/llmdoc:update
Use this command when repository changes require tracked llmdoc/ knowledge to be verified or synchronized.
Load the llmdoc skill before broad exploration. CLI commands below run as npx -y @tokenroll/llmdoc <cmd>.
Authorization
An explicit /llmdoc:update invocation authorizes this run to:
- read repository state and existing llmdoc docs
- write impacted
llmdoc/documents andllmdoc/meta.json - write temporary investigation reports under
.llmdoc-tmp/investigations/ - read and resolve declared reflection candidates under
.llmdoc-tmp/reflections/
This command does not authorize source-code edits.
Preconditions
git status -- llmdoc/must be clean before the first formal write.- Rollback means
git checkout -- llmdoc/(plus deleting any newly created files underllmdoc/); never hand-edit files back. - If
validatefails after writes and cannot be repaired in-run, roll back the doc write-set before reporting failure.
Workflow
Measure the current doc state.
- Run
status. - Run
deltawith any explicit scope flags. - Read each explicitly declared
--reflectioncandidate. When the flag has no paths, read all Markdown candidates directly under.llmdoc-tmp/reflections/pending/. A pending candidate is an update signal even when code delta is empty.
- Run
Gate reflection candidates before promotion.
- Require a verifiable trigger, wrong assumption or action, root cause, preventive rule, scope, confidence, and existing-doc match.
- Verify repository claims against code, tests, or stable docs. User corrections prove intent, not repository facts.
- Reject transient tool failures, one-task preferences, and unverified speculation. Use
searchand targetedshowto find an existing owner before creating a document.
Choose the lightest sufficient path from delta plus any qualified candidates.
- Light: owners are mapped and facts are clear.
- Deep: files are unmapped, owner/root cause is unclear, boundaries changed, facts conflict, or impact is broad.
- This choice controls evidence gathering only. It does not decide whether prose must change.
- For unmapped or moved code and boundary changes, read Knowledge Topology and Context Floor and classify each surface as missing mapping, missing owner, or intentional no-doc.
Decide the semantic outcome with
recorder.- Treat
deltaand candidates as review evidence, not a write list or prose to copy. - Rewrite only false/incomplete claims or new conclusions that pass the Stable Knowledge Gate. Reflection candidates must pass both gates.
- Gate prose and routing independently; true prose may still need routing metadata repair.
- If the document remains true and the change adds only reconstructable evidence, mark it verified unchanged.
- Light:
recorderdecides from targeted CLI reads. Deep:investigatorreports evidence, thenrecorderapplies the gate. - Scaffold brand-new docs with
new; register docs that already exist as files withadopt <path...>— never hand-editmeta.jsonor recreate the file throughnew.
- Treat
Finalize.
- If document identities changed, read Startup Configuration.
mvsyncs renames; sync manual merges or deletions before validation. - Run
validate; after mapping or boundary changes, also run the reference's scoped routing acceptance. - If prose changed, run
commit -m "<message>", adding--verified <path...>for reviewed unchanged docs. If all stayed unchanged, runcommit --verified <path...>. Full verification uses--all, never with--verified. commitvalidates, commits prose, refreshes fingerprints, and landsmeta.jsonseparately. Never reconstruct this sequence manually or--amendit.- Dirty mapped source makes
commitfail closed; commit or clean that source, then retry. - After success,
N commits behind HEAD, metadata-only; knowledge cleanreflects the meta follow-up commit, not staleness.
- If document identities changed, read Startup Configuration.
Fold durable lessons into stable docs directly.
- Put reusable cautions, invariants, and workflow fixes into the relevant architecture or guide docs.
- Reflection candidates are a temporary evidence queue, not a tracked reflection kind or a second knowledge tree.
- On
success, resolve consumed candidates. Onno_change, resolve only already-covered or rejected candidates. Leave them pending afterincompleteorfailed.
State Invariants
- Full successful updates may advance the repository baseline.
- Scoped updates must update only per-document fingerprints, not the global baseline.
- Update never changes convergence state. If growth requires convergence, finish update and ask once before running the separate prune workflow.
Result Contract
success: the declared scope was semantically verified, any necessary prose changes were committed, and applicable revisions advanced.no_change: the declared scope was already current, so neither prose nor revision state needed to change.dry_run: the user asked for a dry run, or only status/delta/investigation/planning output was produced without writingllmdoc/; do not advance state.incomplete: evidence was insufficient, user input is required, or the scope belongs to a different explicit maintenance workflow; roll back writes and do not advance state.failed: update failed and doc writes were rolled back.
Always report:
- the chosen path (
lightordeep) and why - the
statusanddeltasignals used - any investigation report path
- each reflection candidate and its disposition (
promoted,already_covered,dismissed, orpending) - the stable docs changed and the docs verified unchanged by
recorder - routing classifications and checks when topology changed
- the
commitresult — validate gate, fingerprint refresh, and the meta follow-up commit — or why finalization was skipped