docs: re-init CLAUDE.md from seed into a full runtime prompt#1
Conversation
Replace the bootstrap seed (agent description + "run /init") with a
runtime prompt derived from how the code actually behaves.
Documents the things that cost a fresh session real time to rediscover:
- The French-tutor domain is NOT implemented. Every verb is generic
template introspection and the package docstrings still describe the
repo as a clonable template.
- `teken cli doctor . --strict` exits 1 on a clean checkout, so CI's
lint job is red before any change: the template rename left dist
`french-cli`, console script `french`, and argparse prog `french-cli`
disagreeing, and the rubric requires `explain french` to resolve while
the catalog keys its root on ("french-cli",). Recorded with a name
table and both candidate fixes; choosing one is a naming decision, so
it is deferred rather than patched here.
- README's quickstart invokes a `french-cli` console script that does
not exist (it is `french`), and cites a `git grep` command in CLAUDE.md
that never existed there.
- The agent-first rubric is a contract, making apparently-dead code
load-bearing: overview's ignored `target`, the `cli` noun group, and
_CliArgumentParser._json_hint.
- backend: colleague => AGENTS.colleague.md, enforced jointly by
doctor.py's _PROMPT_FILE and test_doctor_recognizes_declared_backend.
The seed had re-introduced the stale `backend: claude` claim that
0.3.4 corrected elsewhere.
- `type: command` in a vendored SKILL.md is load-bearing --
core.skill_loader silently skips a SKILL.md without it.
Also refresh uv.lock, which still pinned french-cli 0.3.4 while
pyproject declared 0.4.0 (the 0.4.0 bump never re-locked), and bump to
0.4.1 per the version-bump-every-PR gate.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019pZenu1fqrz35Hxh9m5VjW
|
/agentic_review |
PR Summary by QodoRe-initialize CLAUDE.md into a runtime prompt and bump version to 0.4.1
AI Description
Diagram
High-Level Assessment
Files changed (3)
|
…ifies
Fixes the pre-existing rubric failure that had CI's lint job red on a
clean checkout:
FAIL (error) explain_self: `explain french` exit=1
The agent-first rubric resolves the tool's own name from
[project.scripts] (-> `french`) and requires `explain <that name>` to
resolve, but french/explain/catalog.py keyed its root entry only on
("french-cli",), and the argparse prog disagreed with the installed
script too.
Two names now coexist on purpose, with a stated rule:
invocations -> `french` console script, argparse prog, usage
lines, command maps, explain paths, help
identity -> `french-cli` distribution/PyPI, repo, culture.yaml
nick, _FALLBACK_NICK, _pkg_version,
overview subject, doctor report header
- catalog root is reachable under BOTH ("french",) and ("french-cli",)
- prog="french"; every usage string moved onto the `french` invocation
(learn.py's _TEXT and _as_json_payload, the explain remediation hint,
command docstrings, --help text)
- learn --json exposes both: `tool` (distribution) + new `command` field
- README quickstart and CLI table now show the real command; the
vestigial "Make it your own" section (cloner boilerplate citing a
`git grep` command that never existed in CLAUDE.md) is replaced with a
Status section stating the tutor domain is unbuilt
- CLAUDE.md's "Known breakage" section becomes a "Naming" section, since
the breakage is fixed
test_explain_self now asserts both names resolve, and a new
test_explain_self_matches_console_script pins the catalog key to the
console script so this cannot regress silently.
Verified: teken cli doctor . --strict -> 26/26 healthy (was 25/26, exit 1);
pytest 23 passed; black/isort/flake8/bandit/markdownlint clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019pZenu1fqrz35Hxh9m5VjW
|



Summary
Runs
/init— replaces the bootstrap seedCLAUDE.md(agent description + a"run
/init" instruction) with a runtime prompt derived from how the codeactually behaves, verified by running it — and fixes the CI failure that
reading the repo turned up.
Two commits:
docs:re-initCLAUDE.mdfrom the seed.fix:settle the CLI name split, turning CI'slintjob green.The CI lint job was red on
mainuv run teken cli doctor . --strict(a CI gate) exited 1 on a cleancheckout, and had since the template rename:
The agent-first rubric resolves the tool's own name from
[project.scripts](→
french) and requiresexplain <that name>to resolve, butfrench/explain/catalog.pykeyed its root entry only on("french-cli",), andthe argparse
progdisagreed with the installed script as well.Resolution — two names, on purpose, with a stated rule:
prog, usage lines, command maps,explainpaths, help textfrenchculture.yamlmesh nick,_FALLBACK_NICK,_pkg_version,overviewsubject,doctorheaderfrench-cli("french",)and("french-cli",).learn --jsonexposes both: the existingtoolfield (distribution) plus anew
commandfield (what to invoke).test_explain_selfasserts both names resolve, and a newtest_explain_self_matches_console_scriptpins the catalog key to the consolescript so the regression can't recur silently.
Rubric goes 25/26 (exit 1) → 26/26 (exit 0).
Also fixed
README.mddocumented a command that doesn't exist —uv run french-cli whoami.Quickstart and the CLI table now show the real command,
french.README.md's "Make it your own" section was cloner boilerplate (this repois the clone), and its step 1 pointed at a
git grepdiscovery command "inCLAUDE.md" that never existed there. Replaced with a Status section statingplainly that the tutor domain is unbuilt.
uv.lockhad drifted — still pinnedfrench-cli 0.3.4whilepyproject.tomldeclared0.4.0(the 0.4.0 bump never re-locked).What the new CLAUDE.md captures
introspection. Said up front so the next session doesn't hunt for a domain
layer that was never written.
apparently-dead constructs load-bearing:
overview's ignoredtargetpositional (descriptive verbs must not hard-fail on a bad path), the
clinoun group (any noun with action-verbs must expose
overview), and_CliArgumentParser._json_hint(argparse parse errors fire beforeargs.jsonexists).backend: colleague→AGENTS.colleague.md, enforced jointly bydoctor.py's_PROMPT_FILEmap andtest_doctor_recognizes_declared_backend.CLAUDE.mdguides Claude Code;AGENTS.colleague.mdis the resident prompt.The seed had re-introduced the stale
backend: claudeclaim that 0.3.4corrected elsewhere.
type: commandin a vendoredSKILL.mdis load-bearing —core.skill_loadersilently skips aSKILL.mdwithout it..claude/skills/, and why[tool.coverage.run] relative_files = trueis not decorative.Verification
devex pr lintreports oneuser-dotfile-referenceviolation on the~/.eidetic/memoryline inside the shipped 0.4.0 changelog entry(
main:CHANGELOG.md:14); my insert only shifted its line number. I won'trewrite released changelog history to satisfy a portability rule on descriptive
prose, and
devex pr lintis not one of CI's gates.Alignment-delta: no
.claude/skills/orculture.yamlchange, so no siblingfollow-up is owed.
Version bumped
0.4.0→0.4.1.🤖 Generated with Claude Code
https://claude.ai/code/session_019pZenu1fqrz35Hxh9m5VjW