docs: write the operator and authority documentation - #5
Merged
Conversation
`CLAUDE.md` becomes the authority for repository guidance and now carries each rule with the mechanism that makes it one: the branch rule with real examples, the merge-only restriction with the dependent-pull-request cost a squash imposes, the CI contract, where a new test belongs, and the standing prohibitions. Two prohibitions changed rather than moved. The `AGENTS.md`/`RULES.md` entry now states that it scopes to an operator's runtime agent directory and explicitly not to this repository's own root files, which are a different thing and read as a contradiction without that sentence. The `.omp/` entry is rewritten because the old wording -- never delete a directory this package or its verification did not create -- permitted deleting one the verification *did* create, which is exactly how the operator's project-local `config.yml` and skills root were lost. The incident is recorded with it. `CONTRIBUTING.md` is new and holds only credentialed procedures: the release path in order, and the ruleset import. It links the authority for every rule rather than restating one. `README.md` is rewritten through the `readme-creator` skill, classified as a CLI tool by how operators consume it, scored 27/27 on its checklist. Three documented facts were wrong and are corrected: the marketplace source format took `owner/repo` and not a `github:` spec, the marketplace install cannot resolve until v0.1.0 is tagged, and CBM 0.10.8 reports 43 client surfaces rather than 44 -- a count that moves each release, so it is gone. `watcher_enabled` was documented as a measured CBM default and no such key exists.
`LICENSE` held the unmodified Apache License 2.0 template while `package.json`, `.omp-plugin/marketplace.json`, and `README.md` all declared MIT. Two contradictory statements of the distribution terms is a defect, not a style question. MIT is the side that gets kept. Three metadata fields already said so, both sibling repositories in this account carry the identical 1066-byte MIT text, and the Apache file's own appendix still read `Copyright [yyyy] [name of copyright owner]` -- it was never customized, which is what a boilerplate drop looks like rather than a decision. No release has been tagged, so nothing was ever distributed under the conflicting pair. The file is now byte-identical to `omp-toolgate`'s.
Review pass 1 measured what the README asserted and one claim did not survive. `README.md` said a marketplace install does not deliver the rulebook rule, on the reasoning that the marketplace provider contributes skills and agents but is not a rules provider. Both halves are false against the OMP version `package.json` pins: `discovery/claude-plugins.ts:637-643` registers a `Rule` provider whose `loadRules` reads `<root>/rules` for every allowed root, and the agents come from `task/discovery.ts` instead. A marketplace install is recorded in `~/.omp/plugins/installed_plugins.json`, and `listClaudePluginRoots` turns each entry there into exactly such a root -- reproduced against a scratch `HOME`. One route difference is real: the catalog resolves a ref, so the route cannot install until a release exists. The same section also carried three mechanisms already stated in `CLAUDE.md` -- the `tool_call` dispatch semantics, CBM's cache-root refusal, and the `mcp.json` read-modify-write degradation -- in a third wording each. The README now keeps what an operator observes and `CLAUDE.md` keeps the prohibition with its mechanism, which is what the authority split claims. Smaller corrections: the CBM defaults are attributed to `config --help`, which prints defaults, rather than `config list`, which prints this operator's effective values; the `harvest.json` block carries the `generated` array the sentence promises; `PI_CONFIG_DIR` no longer claims to affect a path `PI_CODING_AGENT_DIR` supplied whole; the version gate's `v`-stripping is described as it is written; the account-wide CBM key prohibition names the tool and the six keys rather than gesturing at consequences.
The ruleset paragraph disclaimed a category of parameter its own shape list then stated, so a contributor applying it literally would have deleted three correct bullets. It now states the test instead of a category list: a fact belongs here when changing it changes how work lands, and stays in the rulesets when it can move without changing the procedure. The system-first section had been compressed past the truth. A managed copy with its own cache root is not a cost trade -- a second CBM pointed at a different root will not start while yours is live, which is what the operator actually sees. Restoring that also gives `/cbm install`'s "cache-root hazard" a referent the document names.
The paragraph said nothing mechanically verifies either literal it states. True of `ci` and of `v*`, and false of the third pairing it named: the release version gate compares `.omp-plugin/marketplace.json`'s `source.ref` against the pushed tag and fails on a mismatch. The exception that licenses stating a literal at all rested on the one file that is checked. The two genuinely unchecked agreements are between a ruleset and a workflow -- `main.json`'s `ci` against the gate job's name, and `tags.json`'s `v*` against `release.yml`'s trigger -- and nothing in this repository reads either ruleset file. The `source.ref` pairing moves to `CONTRIBUTING.md`, where its gate already is. The shape test also disclaimed approval counts as a parameter while its own criterion made them shape: moving the count off zero adds a step. The criterion is now the sequence of steps rather than any precondition, and the count's current value is stated as the reason no approval step is described.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This pull request writes the repository's operator and authority documentation:
CLAUDE.mdbecomes the authority for repository guidance,CONTRIBUTING.mdis added for credentialed procedures only, andREADME.mdis rewritten through thereadme-creatorskill. No code changes.The gates these documents exist to explain are already live, and nothing in the repository stated them. This change addresses the following:
.github/rulesets/main.jsonhas been enforcing sincea3acc2b— no direct or force push tomain, a pull request with resolved threads, merge commits only, one strict status check namedci— and no file told a contributor or an agent that any of it was true.CONTRIBUTING.mdat all, so the release path lived only inrelease.yml.README.mdhad accumulated from two changes' feature notes rather than being written for a reader arriving cold, and three of its documented facts turned out to be wrong.Two prohibitions changed, not just moved
Two entries in the prohibition list were rewritten because their previous wording did not do the work it claimed.
AGENTS.md/RULES.mdentry now states that it scopes to an operator's OMP agent directory at runtime and explicitly not to this repository's own root files. Without that sentence the rule appears to forbid the very file it is written in, and the resolution a reader invents may be to delete the rule. The mechanism is named: each is single-slot, so writing one replaces the operator's instructions rather than adding to them..omp/entry admits no loophole. The previous text — never delete a directory this package or its verification did not create — permitted deleting one the verification did create, which is exactly how the operator's project-localconfig.ymland skills root were lost while cleaning up a plugin root under<project>/.omp/plugins/. The replacement forbids deleting.omp/at either location, states that a verification step materializing it changes nothing, and requires cleanup to remove named paths one by one rather than a containing directory. It also records why the loss was silent: a global ignore excludes/.omp/, sogit statusnever reports it missing. The incident is recorded next to the rule.Three documented facts were wrong
Running every documented command against the package as built produced three corrections, all recorded in
rasen/changes/operator-documentation/evidence/.omp plugin marketplace add github:pashifika/omp-codebase-memoryis rejected withUnrecognized source format; the accepted form isowner/repo, which is what the siblingomp-toolgateREADME already documents..omp-plugin/marketplace.jsonnamessource.ref: "v0.1.0"and no tag exists, so the command fails withRemote branch v0.1.0 not found. The catalog is deliberately not repointed atmain, becauseversion-gateinrelease.ymlrequirescatalog_ref == TAG. The README states the limitation instead.watcher_enabledwas documented as a measured CBM default and no such key exists. CBM 0.10.8 exposes six config keys,watcher_enabledis not among them, and it is not a field inindex_statusoutput either. The change's delta spec has been corrected in the planning repository and now forbids documenting a key CBM does not expose. The README documentsauto_index(false),auto_index_limit(50000), andauto_watch(true).A fourth stale claim was removed rather than corrected: the README said CBM's installer configures 44 client surfaces, and 0.10.8 reports 43. A count that moves each release is drift with no operator value.
The declared license and the LICENSE file disagreed
LICENSEheld the unmodified Apache License 2.0 template whilepackage.json,.omp-plugin/marketplace.json, andREADME.mdall declared MIT. Two contradictory statements of the distribution terms is a defect rather than a style question, and this pull request is the one that would have shippedMIT. See LICENSEas an operator-facing claim.MIT is the side kept, for three reasons. Three metadata fields already said so; both sibling repositories in this account carry the identical 1066-byte MIT text; and the Apache file's own appendix still read
Copyright [yyyy] [name of copyright owner], so it was never customized — a boilerplate drop, not a decision. No release has been tagged, so nothing was ever distributed under the conflicting pair.LICENSEis now byte-identical toomp-toolgate's.README workflow and section shape
README.mdwent through every phase of thereadme-creatorskill. The skill's classification table has no row that fits this package — nobin, nomain/exports,"private": true,omp.extensionspresent, and askills/directory that is harvested output rather than the product. The literal first-matching row is "skill bundle", which would have produced a one-command Quick Start and a skills table describing neither the executable lifecycle nor the MCP wiring. Classified as a CLI tool instead, by how operators actually consume it, with the harvested context surfaces folded into one extra section. The section order follows the siblingomp-toolgateREADME. Badges are omitted because nothing here is published to a registry.What the review cycle changed
Three review rounds followed the first draft, and each found the same species of defect — an unmeasured inference about how OMP discovers a marketplace install — twice inside the correction to the previous one.
discovery/claude-plugins.ts:637registers aRuleprovider whoseloadRulesreads<root>/rules, and it registers no agents provider at all. That claim was not this change's invention — it is an accepted requirement atrasen/specs/durable-context/spec.md:89, with a scenario obliging the README to assert it, so correcting the README alone would have put it in conflict with an accepted spec.omp-extension-roots.ts:361-379drops any root whose realpath appears in the marketplace set so one plugin is not listed twice. Surface parity is real, but it comes from each lane registering the same providers.config.plugins[<package>], written identically by both install paths — and now carries its own citation.The requirement that came out of round 1 is what caught rounds 2 and 3: an install-route difference is documented only where a measurement supports it, and unmeasured sameness fails that gate as surely as unmeasured difference.
Verification also found that the proposal declared two new capabilities while only one had a delta spec.
rasen validatereported the change valid regardless, because it checks artifact presence rather than capability coverage — so twenty-one of the forty-six tasks would have left no accepted requirement behind on archive.The change therefore carries four delta specs: two added (
repository-conventions,operator-documentation) and two modifying accepted capabilities (durable-context,context-harvest).Key files changed
The three documents, and what each now owns, plus the license correction.
CLAUDE.mdAGENTS.mdremains a tracked symlink to itCONTRIBUTING.mdREADME.md/cbmsurface, why indexing is the agent's work, configuration including the measured CBM defaults, the system-first policy with its cache-root reason, the graph-context surfaces, a refusals section, and the CBM version the shipped artifacts derive fromLICENSETest plan
bun run typecheck— cleanbun run test:unit— 409 pass, 0 failbun run test:packaging— 10 pass, 0 failmktemp -dHOME: git-spec install, the[]feature-declining install,omp plugin features --enable/--disable,omp plugin uninstall,omp plugin marketplace add+omp plugin discover, andomp plugin link ..github/rulesets/main.jsonandtags.json, and every documented path against the code that derives it insrc/paths.tscodebase-memory-mcp config --helpandconfig listat 0.10.8AGENTS.mdverified as a symlink in a fresh clone: mode120000, blob is the target path, both names byte-identicalreadme-creatorquality checklist scored 27/27 applicable items, render check cleanpackage.json,.omp-plugin/marketplace.json,README.md, andLICENSEall say MIT, andLICENSEis byte-identical to the sibling repositories' textcigate green on every pushed head, most recently03a364dREVIEW CYCLE VERDICT: CLEAN. The one self-authored fix in the cycle was checked by a separate read-only worker rather than self-certified🤖 Generated with omp