Repository navigation
Releases
Compass 8.0.4
Compass 8.0.4 is a patch release. The plugin manifest now names Compass's privacy policy, terms of service and support pages, which the Claude plugin directory shows on the listing. No check, refusal or exit code changes.
Upgrade
Run claude plugin update compass. No archive migration is needed.
Changes
- The directory listing links privacy, terms and support.
plugin.jsonnames https://ayeo.io/privacy/, https://ayeo.io/terms/ and https://ayeo.io/support/ (#718). compass policy migraterecognizes 8.0.3. Governance copied from the 8.0.3 release is matched to that release (#716).- The test suite passes on GitHub's current Ubuntu runner image. Five test helpers that build a PATH without jq or python3 failed when
/usr/binand/binheld the same broken link (#716).
Queued against this release
- Show git's error when a test's clone of the repository fails (ayeo-io/compass-delivery#309).
- Plugin copy tests fail in a clone that has a local
pluginbranch (ayeo-io/compass-delivery#310). - A settings test sometimes gets
no-red-on-recordinstead of a read error (ayeo-io/compass-delivery#311). - Scope the write grants of six commands. The directory reports it as information only.
- Let the approval guard cover the approval program file.
- Move the remaining inline Python out of shipped scripts.
- Refuse a Codex tool call when python3 is missing.
Compass 8.0.3
Compass 8.0.3 is a patch release. It rewrites seven lines in the pre-tool and post-tool hooks so the Claude plugin directory can read every command they run. No check, refusal or exit code changes, and nothing is removed.
Upgrade
Run claude plugin update compass. No archive migration is needed.
Fixes
- The plugin directory can read the hooks. The directory blocked the 8.0.1 and 8.0.2 copies with "Unpinned npx launcher" on
hooks/pre-tool.shandhooks/post-tool.sh, although neither runs a package launcher. Its validator cannot read a quote nested inside a double-quoted string, such as"${ABS_TARGET#"$REAL_ROOT"/}"or"${found//\\\"/\"}". Those lines now keep every quote outside double-quoted strings. A new test fails if either hook nests a quote again (#714). - Without jq, the pre-tool hook decodes
\/on macOS. The reader the hook uses when jq is missing left\/undecoded under bash 3.2, the macOS/bin/bash, so a path written that way did not match jq's reading. It now decodes every string as jq does under bash 3.2, 4.4, 5.1 and 5.2 (#714). compass policy migraterecognizes 8.0.2. Governance copied from the 8.0.2 release is matched to that release (#711).
Queued against this release
- Scope the write grants of six commands.
/compass:define,/compass:go,/compass:implement,/compass:quick-fix,/compass:resumeand/compass:shippre-approveWrite(and all but/compass:resumealsoEdit) with no path. It waits: five of them write code and tests anywhere in a project, so their scope needs a decision of its own. The directory reports it as information only. - Let the approval guard cover the approval program file. It waits: the guard change needs its own review.
- Move the remaining inline Python out of shipped scripts. It waits: the scripts it names,
bin/compass-statuslineandscripts/multiagent.sh, are not hooks. - Refuse a Codex tool call when python3 is missing. It waits: the fix needs a hook command that does not start with python3.
Compass 8.0.2
Compass 8.0.2 is a patch release. It rewrites how the pre-tool and post-tool hooks write their commands, so the Claude plugin directory can read every command they run. No check, refusal or exit code changes, and nothing is removed.
Upgrade
Run claude plugin update compass. No archive migration is needed.
Fixes
- The plugin directory can read the hooks. The pre-tool and post-tool hooks ran 33 commands inside double-quoted strings, such as
TOOL="$(... | jq ...)". The directory validator cannot read a command written that way, so it refused the 8.0.1 copy. Each of those commands now assigns its output first, and nested commands are split into steps. A new test fails if either hook runs a command inside a double-quoted string again (#709). compass policy migraterecognizes 8.0.1. Governance copied from the 8.0.1 release is matched to that release (#707).
Checked in this release
- An 8.0.0 install updates to 8.0.1 from the
pluginbranch, and the updated install holds the 434-file copy, not the whole repository.
Queued against this release
- Scope the write grants of six commands.
/compass:define,/compass:go,/compass:implement,/compass:quick-fix,/compass:resumeand/compass:shippre-approveWrite(and all but/compass:resumealsoEdit) with no path. It waits: five of them write code and tests anywhere in a project, so their scope needs a decision of its own. The directory reports it as information only. - Let the approval guard cover the approval program file. It waits: the guard change needs its own review.
- Move the remaining inline Python out of shipped scripts. It waits: the scripts it names,
bin/compass-statuslineandscripts/multiagent.sh, are not hooks. - Refuse a Codex tool call when python3 is missing. It waits: the fix needs a hook command that does not start with python3.
Compass 8.0.1
Compass 8.0.1 is a patch release. It changes how Compass is packaged and narrows what its commands pre-approve, so the Claude plugin directory can read and review it. Nothing is removed, and no reader changes: every old form 8.0.0 reads is still read until 9.0.0.
Upgrade
Run claude plugin update compass. No archive migration is needed.
What's new
- A smaller install. An install is now a copy of the 434 files the plugin reads, published to the
pluginbranch, not the whole repository with its tests and developer documents. The marketplace entry fetches that branch, so 8.0.0 users get 8.0.1 through the usual update (#698). compass policy migraterecognises 8.0.0. Governance copied from the 8.0.0 release is matched to that release (#696).
Changed behavior
- Commands pre-approve only
compass. Each command'sallowed-toolsnow namesBash(compass *)in place of every shell command. Test runs go throughcompass tdd-redandcompass tdd-green, so they stay pre-approved. Three steps now ask for permission once: the status-line setup in/compass:init,scripts/integrate.shin/compass:shipandscripts/multiagent.shin/compass:breakdown(#699). - Commands that write only issue state write only there. Twelve commands (assess, breakdown, consult, design, flow, init, intent, plan, position, refine, status and verify) pre-approve writes to
.compass/anddocs/only, and init also tocompass.yml. A write elsewhere asks first (#699). ghand the Codex hooks get only the variables they need. The GitHub label and page sync passesghits own settings, the GitHub token, locale, certificates and proxies, and no other variable. The Codex adapter's shared hooks get the same kind of list (#699).- A broken install refuses. The pre-tool hook now loads its checks from parts in
hooks/lib/. If a part is missing from the install or cannot be read, the hook refuses every call withreader-failedand names the part, in any project, rather than run with a check left out (#699, #701).
Fixes
- The hooks, including the approval prompt hook, run each Python check from its own file in
hooks/py/, not from text inside the script. A file in your project can no longer shadow a module a check imports, because the project folder is no longer on the check's import path (#699, #700).
Queued against this release
- A check that an 8.0.0 install updates to 8.0.1 from the
pluginbranch (FU-B3). It needs the published 8.0.1 copy, so it runs after this release. - Let the approval guard cover the approval program file. It waits: the approval program moved to
hooks/py/in this release, and the guard change needs its own review. - Move the remaining inline Python out of shipped scripts. It waits: the scripts it names,
bin/compass-statuslineandscripts/multiagent.sh, are not hooks, and this release moves only the hooks' inline programs. - Refuse a Codex tool call when python3 is missing. It waits: without python3 the Codex hook fails as it did in 8.0.0, and the fix needs a hook command that does not start with python3.
Compass 8.0.0
Compass 8.0.0 is a major release because of one change: delegation. A delegation now works across git worktrees and takes optional flags, and four forms that 7.0.0 accepted are refused. 8.0.0 removes no reader: old words, old approach names, copied 5.x governance, the generated governance views, .compass/config.yml and migrated LEGACY waivers are read until 9.0.0. docs/upgrade-8-0-0.md covers the change.
Upgrade
- Update every checkout and every installed plugin together.
- Type
/compass:delegateagain for each delegation you rely on, in the flag form below. A delegation file that 7.0.0 wrote in a linked worktree's own folder no longer gives approval. - If an agent prompt or script records delegated approvals, add
--issue <slug>, and run the command as a plaincompass ...in the agent's Bash tool.
No archive migration is needed.
What breaks
- The positional form of
/compass:delegateis refused, and so is--labels. The message shows the flag form:/compass:delegate --agent compass:architect --until 08:00 --on my-issue(#691). - A delegated approval needs
--issue <slug>. The pre-tool hook writes a call ticket naming the calling session and agent, and the CLI takes the session from it. A command inside a script, anechoor a variable gets no ticket and is refused (#691). - One delegation store. Compass reads
.compass/delegations/in the main checkout; a file in a linked worktree's own folder is refused, and the refusal names it (#691).
What's new
- Delegation without ceremony.
/compass:delegate [--agent] [--until] [--on] [--for] [--max], each optional. With none, a delegation covers this session's agents on every issue until/compass:revoke, with no time limit and no cap.--for g5still needs the code you type back. Each delegation with no end time is listed at session start (#691). - Approve and reject across worktrees.
/compass:approve <n>and/compass:reject <n> <reason>find a request in any worktree's current issue;--issue <slug>reaches any issue (#691, #679). - Review only what you were shown.
/compass:approvewith nothing pending marks reviewed only the approvals your last summary showed (#691). compassin your own terminal. A plugin install now has a launcher in the plugin's data folder. The commands the CLI prints for you to run in your terminal name it, with the folder to add to your PATH (#693).- Execution profiles.
compass profile lint,addandshow(#677).
Fixes
- The pre-tool hook treats
perl -pi,ruby -piand interpreter scripts that write a path held in a variable as writes to production code (#692). - The approval guard joins a protected folder name split over two lines with a backslash, and decides long or unusual commands within the hook's time limit (#690).
compass record restorerefuses a redacted generation file instead of leaving the issue broken (#684).compass issue migratekeeps a one-unit distribution map (#683).- The README, the docs home page and the quickstart state what each guarantee covers and where it stops, and the text an adopter reads is plain English (#694).
compass quick-fix startwrites its start record before the pointer, so a failed start can run again (#686).- Assess reuses the issue the pointer names; the docs show the shell install; two templates are corrected (#681).
- The architect reads the intent when acceptance criteria are missing (#682).
- Six commands list Bash among their tools, and the manifest schema defines
intent_source(#680). - Three code scanning alerts in the template readers are fixed (#678).
Known limits
- A resumed session (
claude --resume) gets no list of delegations with no end time (ayeo-io/compass-delivery#299). - Some texts still name plain
compassfor a terminal command, such as the issue page, and a few install layouts fall back to it: ayeo-io/compass-delivery#302.
Compass 7.0.0
Compass 7.0.0 is a major release. It finishes the document set and moves the framework's own text to US English. It removes 8 command spellings that 6.0.0 renamed, and a ninth, issue labels sync. The readers for old words, old approach names, copied 5.x governance and .compass/config.yml stay until 8.0.0.
6.1.0 already carried most of the document set. This list covers what changed since 6.1.0. If you upgrade from 6.0.x, read the 6.1.0 release notes too. docs/upgrade-7-0-0.md covers both steps, one section for each change.
Upgrade
There is no supported rollback. Copy your issue folders before you start.
- Update every checkout and every installed plugin together. Do not run a 6.x CLI on a 7.0.0 tree.
- Copy the two issue folders,
.compass/workanddocs/compass, to a folder outside the project. - Run
compass issue migratefor a dry run and read the list. Then runcompass issue migrate --apply --i-have-a-copy. Its totals must equal the dry run's. - Run
compass issue render --all --dry-run, thencompass issue render --all. - If the project has a
compass.yml, runcompass policy migrate --wordsto see the old words in it, thencompass policy migrate --words --apply. Runcompass policy updateto move the project todefault@7, thencompass policy lint. - Replace each removed spelling in your scripts, notes and CI with the new one from the table below. A script that reopened a closed issue with
issue set-statusmust runissue status remove. - If a script matches the refusal code
not-initialised, matchnot-initialized. The session-start hook prints only the new code (#661). - To go back, restore both folders from the copy, together. Restoring the copy discards everything recorded after you took it. To undo a
compass policy migrate --apply, runcompass policy migrate --undo(#660).
Known issue: compass issue migrate renames a distribution map that declares units: 1 to distribution-map.md.v6.bak. The check multiagent-run-recorded then fails for that issue. Rename the .v6.bak file back to distribution-map.md, then restore the entry with compass issue artifact set distribution-map --status approved --path <the map's path> --reason "<why>" --issue <slug>. Only a project that used the one-unit breakdown before 7.0.0 is affected. The fix is tracked as ayeo-io/compass-delivery#259 [Leave a one-unit distribution map in place when the migration renames stubs] for 7.1.0.
What breaks
These 8 command spellings are removed. Each exits 2 (#658). run --stage build is refused by compass run, which names the stages it permits. The other 7 get the parser's usual error.
| Old | New |
|---|---|
approach summary |
approach show |
issue set-status |
issue status set, or issue status remove for active |
policy review-rules |
review-rule list |
issue dashboard |
issue render |
issue artifact |
issue artifact set |
migrate |
issue migrate |
issue subtask update |
issue subtask set |
run --stage build |
run --stage implement |
issue labels sync is removed too. Use issue github sync. The error for issue labels sync and for issue dashboard adds one line that names the new spelling. The error for the others names no new spelling, so use the table (#658).
Other changes that can stop a script or a session:
-
A command refuses an issue whose stored generation is from another major. This applies when another resolver or schema major built the generation. Each command that reads or changes the issue exits 2 and names
compass issue migrate --config. The repair commands still run. A closed issue is read, not refused.compass ci,compass flowandcompass issue render --allreport the issue and continue with the others (#650, #657). -
The pre-tool hook refuses a Bash command it cannot check in time. In a Compass project it refuses a command over 98,304 bytes (
bash-command-too-long). It refuses a command in these cases (bash-command-too-complex):- more than 400 write targets, 700
$(openers or 20 variable names; - a write target over 2,048 bytes;
- a command over its work budget or its 8-second limit.
Outside a Compass project the hook skips only the write scan. Claude Code 2.1.295 or later also stops the hook after 15 seconds and blocks the call (#655).
- more than 400 write targets, 700
-
The pre-tool hook refuses when its working directory is gone. This applies when the folder was removed and
CLAUDE_PROJECT_DIRis not set. The hook then refuses an Edit or Write of a file inside a Compass project, with exit 2 (working-directory-gone). Before, the hook ended with exit 1 and the edit ran unchecked (#656). -
The
quick-fixskill is removed. Its rules are now in the/compass:quick-fixcommand. The command and the skill had the same name, and the Skill tool loaded the command in 83 of 86 calls and the skill in none. An agent file or a project instruction that loads the skill by name must run the command (#667). -
The
compass ship-commiterror has new first lines. When git does not commit, the error opens with the lines git printed. "HEAD did not advance" and "the land did NOT happen" stay (#665). -
A layer that sets both spellings of one check is refused. A
compass.ymllayer that givesdor-behaviour-is-gwtanddor-behavior-is-gwtdifferent values fails the merge withM-ONE-CHECK(#661). -
The hook text says "initialized by".
hooks/pre-tool.shnow prints "This project was initialized by ...". A tool that matches the old printed textinitialised bymust match the new text (#669).
What is new
-
The shipped default is
default@7.default@6stays as a frozen copy of the 6.1.0 preset, socompass policy updatecan tell which waived fields moved. A project on 6.0.1 has its waivers checked again against the 6.1.0 values (#641, #643). -
A project-scoped design decision needs a record. Each design decision in the technical design has a
Scope:line,issueorproject. A landing refuses an open issue whose design holds aScope: projectdecision that no record inarchitecture/decisions/names (project-decision-unrecorded). The refusal names the pathcompass adr newwrites next (#641). -
A regular issue needs a requirements review, and a hotfix needs a bug report. A new regular issue cannot land until its
requirements-review.mdis approved. A new hotfix cannot land until itsbug-report.mdis approved (#641). -
The
languagesetting.languageincompass.ymlis a BCP 47 tag such asen-USorde. When it is set, the session-start hook adds one line that tells the agent to write prose in that language. When it is not set, nothing changes.compass policy lintrefuses a malformed value./compass:initasks the question, and a new project now extendscompass:default@7(#661). -
US English. Compass prints its messages and its
--helptext in US English (#664). It writes its typed names in US English (#661). Its documents, skills, commands and templates use US English (#669). A guard fails the build when a British spelling returns. -
Typed names in US English, with the old forms read until 8.0.0. Each old name is still read and prints one notice. The new name is the one written (#661).
Kind Old name New name kind judgementjudgmentcheck dor-behaviour-is-gwtdor-behavior-is-gwtskill behaviour-mappingbehavior-mappingrefusal code not-initialisednot-initializedstate key initialisedinitializedreadiness key catalogue_digestcatalog_digestJSON key behaviour,behavioursbehavior,behaviorsheading Current Behaviour,Archived BehaviourCurrent Behavior,Archived Behaviorterm cataloguecatalogFor one release the writer emits both spellings of two saved keys: the readiness record holds
catalogue_digestbesidecatalog_digest, andcompass retro --complianceemitsbehaviourandbehavioursbesidebehaviorandbehaviors.docs/artifact-catalogue.mdis nowdocs/artifact-catalog.md, and the old page links to it (#661). -
compass policy migrate --undo. It restores a migrated project to its state beforecompass policy migrate --apply. It is a dry run until you add--apply. It restores the old settings file and any deleted governance file from.compass/legacy/, byte for byte. It refuses, and writes nothing, in these cases:- a file the migration wrote has changed;
- a legacy copy is missing or differs;
- a signed record exists from after the migration.
A marker from an earlier migration lacks the digests the undo needs. The undo refuses it and prints the steps to go back by hand (#660).
-
The approval guard reads a simple command as words. The guard judged the whole text of a Bash command. A commit message that only mentioned a protected folder was therefore refused. Now the guard does not judge the message text of a simple
gitorghcommand. A command alone can name a protected path in these cases:ls,wcandstatcan name a request folder, andcatcan name the prompt hook script. Read, Grep, Edit and Write can open the auto-memory folder. The guard judges every other command by its whole text, as before. A refusal names the word it judged (#663). -
/compass:approvenames the real cause when no approver can be named. Each of the seven causes has its own message with the next step (#663). -
A comment-only edit of Python or YAML needs no failing test. The hook applies the Edit in memory. It compares the syntax tree (Python) or the parser events (YAML). A pragma, a hidden character, an encoding cookie, a file over 1 MiB or a parse error keeps the old verdict. The rule does not cover shell.
evals/*/seed/is no longer production code (#662). -
The hook judges an edit in another worktree by that worktree's issue. It...
Compass 6.1.0
Compass 6.1.0 is an interim release on the way to 7.0.0. It makes the Stop hook fast on projects with many issues, and it carries the 7.0.0 changes that have landed so far. Some of those change behaviour, so read docs/upgrade-7-0-0.md before you upgrade a project.
Fixed
- The Stop hook skips closed issues and checks the rest in one Python process. On this repository's 515 issues one run took 513 seconds before and takes under a second now, with 40 warnings instead of 264. One issue folder it cannot read no longer hides the warnings for the others.
- Two Compass commands that save the same issue at once no longer lose either change, and a reader never sees a half-written manifest.
- Two sessions approving at once can no longer hang on each other's review locks.
- A generation commit no longer deletes files it did not write.
compass migrateno longer stops with a NameError when it checks which files it can restore.- Records copied to the delivery record now match their source: redaction removes secret values only.
- The
compass nextlatency check no longer fails on runner noise, and still fails a real slowdown.
Changed behaviour
- Stage commands write the status of each registered document, and
compass ship-commitrefuses a document that is not accepted (the blocking checkartifacts-approved).compass issue migratesettles the status of done issues. Seedocs/upgrade-7-0-0.md. - Guardrail 5 asks for a human sign-off only on work labelled
auth,payments,personal-dataormigrations, not on everyrisk: criticalissue. - Role is no longer part of the assessment.
- Compass picks each stage's model and effort from the issue's assessment.
- Regular issues owe a short intent with four sections, and every issue that ships records a release line, given with
--release-note. - A document kind can carry a word limit per depth, and the full approach keeps one low-level design per work unit.
- An owner-approved waiver can lower a stage that a label floor raised, without touching its gates or guardrails.
- The pre-tool hook refuses more Bash writes to production code that substitutions, line continuations, quotes or
..paths used to hide, and no longer refuses a write to a scratch file named through a variable the same command sets. - The approval guard refuses more ways an agent could forge or replay a guardrail 5 approval.
- Lint accepts LEGACY waivers, with a warning, until 8.0.0.
- The CLI and the docs use only the current vocabulary.
How to upgrade
- Copy
.compass/workanddocs/compassto a folder outside the project. - Run
compass issue migratefor a dry run, thencompass issue migrate --apply --i-have-a-copy. - Do not run a 6.0.x CLI on the migrated tree.
Verify the download
compass-6.1.0.tar.gz, SHA-256 cf6869269091e5278d68968fe19fd91b9755b888b822dacfbfca3e6f21e17a1d.
Compass 6.0.1
Compass 6.0.1 is a patch release. It fixes compass issue migrate, which left some paths in a migrated manifest pointing at files that had moved, and it makes compass flow faster on a large archive. It removes and renames nothing.
Fixed
compass issue migratenow repoints every path in a manifest when it moves an issue's documents to the 6.0 layout. In 6.0.0 it missed some fields, including the evidence path on a stopped subtask. A project with multi-agent issues then sawcompass checkfailmultiagent-run-recordedon issues whose work was fine. On this repository's archive, 34 of 490 issues failed this way.compass flowreads issue manifests through a cache, so a second run on a large archive is quicker. On this repository's archive, it takes 0.18 s instead of 2.29 s once the cache is filled.
Changed behaviour
compass flowkeeps parsed manifests under.compass/cache/parsed_yaml/. The folder carries its own.gitignore, so git ignores it. Deleting the folder is safe: the next run parses the manifests again. An entry is used only when it matches the file on disk exactly, and no command that changes a manifest reads the cache.
How to upgrade
If you ran compass issue migrate --apply on 6.0.0, run it again on 6.0.1. Run compass issue migrate first to see what it would change. The second run repairs the paths 6.0.0 missed and leaves every other field alone.
Queued against this release
None that this release changes. The four backlog issues that carry a recommendation are the same as at 6.0.0, and none touches compass issue migrate or compass flow.
Verify the download
compass-6.0.1.tar.gz, SHA-256 3723e25f564ed2a6a982a06f94d98e41a616046ee6671bd1050e28458e19e16f.
Compass 6.0.0
Compass 6.0.0 is a major release. It makes a project's configuration a file a person edits and a tool can check, renames the vocabulary and the commands, and adds an opt-in GitHub label sync. It removes no command. It does change the manifest schema to 3.0 and one output shape, so update every checkout and plugin together (see "What breaks").
New
Configuration in compass.yml
compass.yml at the project root is the one file a person edits. It holds the project's settings and, optionally, its edits to the shipped default. It extends compass:default@6, and a project that sets nothing runs on the default. A 6.x release of the default never changes a value that 6.0.0 defines.
- Presets. The shipped default is a preset directory,
governance/presets/default/.governance/routing-policy.ymlandgovernance/guardrails.ymlare views generated from it and stay through 6.x.compass preset initscaffolds a team preset repository andcompass preset testruns a preset's fixtures and checks its locks. - Layers. A layer can add, set, replace or remove an entry.
compass policy lintchecks a layered project,compass policy showprints every resolved field with the layer that set it, andcompass policy diffcompares two configurations by classification and by replaying assessments. - Waivers and locks. A change that loosens its parent needs a waiver with an approver. A framework lock cannot be removed by a lower layer, and a project that unlocks a framework entry is reported non-conformant.
- Generations.
compass approach evaluate --writestores the configuration an issue runs against as a numbered generation. A later change tocompass.ymlcannot change an issue that is already running.compass issue configurechanges an issue's own configuration, andcompass issue migrate --configpins an issue to the installed versions. - Git parents. A project can name git parents, singly or in a chain. Each is pinned by sha and judged against the default like any other layer.
compass policy updatemoves a project to a new major of the shipped default and asks again for approval of each affected waiver. - Judged checks. A check can pass on a recorded review.
compass evidence reviewrecords the verdict, its reason and the reviewer. - Approvers.
approversname who may approve a waiver, a human check or an exit.compass evidence approverecords a person's approval or rejection with its approver. - Stage entry and exit lists. Each stage's entry and exit lists are evaluated, so a stage can name what must hold before it starts and before it ends.
- Approach table.
compass approach renderwrites the delivery approaches as one HTML table, one column per stage. - Artifact freshness. An opt-in capability that records a document's digest and reports the document as stale when an artifact it depends on has changed.
- Receipt provenance.
compass issue receiptshows where each rule, waiver, lock and check came from. - Templates.
compass issue template showprints a document template with its checklists rendered from the issue's stage lists. - Migration.
compass policy migrateturns copied governance and a.compass/config.ymlinto acompass.yml./compass:initwrites a minimalcompass.ymlfor a new project and copies no governance.
Vocabulary and commands
6.0.0 renames the depth words (full becomes thorough, light becomes lightweight, full-plus-backfill becomes thorough-with-follow-up), the size standard (now medium), the run stage build (now implement), the friction key phase (now stage) and the stored issue statuses. An issue's state is now backlog, ready, in-progress, in-review or done, and it is read from the issue's records. compass issue blocked set and compass issue blocked remove flag an issue that is in progress or in review. compass spec sync merges the base branch and re-derives the living spec.
Eight released command spellings are renamed. The old spellings keep working through an alias until 7.0.0. Each prints the new spelling on standard error, and standard output and the exit code are the new command's.
| Old | New |
|---|---|
approach summary |
approach show |
issue set-status |
issue status set, or issue status remove for active |
policy review-rules |
review-rule list |
issue dashboard |
issue dashboard render |
issue artifact |
issue artifact set |
migrate |
issue migrate |
issue subtask update |
issue subtask set |
run --stage build |
run --stage implement |
The old words in manifests, copied governance and .compass/config.yml are also read until 7.0.0. issue status remove reopens a closed issue, so a script that ran issue set-status active on a landed issue keeps working.
GitHub label sync (opt in)
Compass can write an issue's domain labels and workflow state to the GitHub issue it is linked to. It is off by default. The github_labels key in compass.yml has two switches, domain and status. With both off, no command calls GitHub.
compass issue link setlinks a Compass issue to a GitHub issue. The manifest schema gains an optionalgithubfield (repo,number).compass issue labels syncwrites the labels now.- Compass writes one way. It never reads a label back into the manifest, and
compass issue lintreports the issue as out of sync when a label differs on GitHub.
See docs/github-labels.md.
What breaks
6.0.0 removes no command. These are the changes that can break a caller.
- Manifest schema 3.0. A 6.0.0 command reads schemas 1, 2 and 3 and writes 3.0. The first save of a manifest that holds old words copies the original to
manifest.yml.v5.bak. A v5.6.0check,issue lint,ci,gate pass,approach evaluateandapproach summaryrefuse a 3.0 file and exit 2. A v5.6.0next,flow,analyze,retroandissue dashboardread it and exit 0, andtdd-greenwrites to it, so they can read it wrongly. - Update everything together. Update every checkout and every installed plugin at the same time. Do not run a v5.6.0
ship-commiton a 6.0.0 tree: it does not read the new words and drops the issue from the living spec. - No supported rollback. A problem is fixed forward in a 6.0.x release. Restoring
manifest.yml.v5.bakdiscards everything recorded after the first rewrite. compass flow --jsonkeys. The keysheld,next_up,landed_this_weekandabandonedare removed. The board now hasbacklog,ready,in_progress,in_review,done_this_weekandclosed. Aclosedentry carries itsclose_reason.- Output names. A project with a
compass.ymlseesapproach evaluatename the intent documentintent, the launch documentlaunch-readinessand the last stageship. A project without one keeps the 5.6.0 document names. - Stricter refusals. A
compass.ymlthat failscompass policy lintmakescompass approach evaluate --writerefuse to commit. A project with acompass.ymland a.compass/config.ymlthat still holds settings is refused (settings-conflict). When a.compass/config.ymlalso exists, acompass.ymlwith noschema:key is not taken for Compass's file: the old file is read and a warning says so. - Old CLI on new data. A v5.6.0 CLI reading a manifest that has a
generation:key failscompass issue lint. - A tool to rewrite configuration files (
compass.yml, copied governance and.compass/config.yml) into the new words is owed before 7.0.0. Until then they are read in their old words.
How to upgrade
Read docs/upgrade-6-0-0.md. It has the full tables of renamed words and commands, the notice a first save prints, and why there is no supported rollback. To move settings into compass.yml, run compass policy migrate (a dry run) and then compass policy migrate --apply. To rewrite every issue in one run, use compass issue migrate --apply. It refuses unless .compass/work is tracked by git or you pass --i-have-a-copy to confirm you have a copy.
docs/configuration.md explains compass.yml. The documentation and the plugin's agent instructions now describe the 6.0.0 model: the shipped guardrails and strategies come from the plugin, compass policy show prints the configuration in force, and a project changes the rules in compass.yml. A 5.x project that has not run compass policy migrate keeps running on its own copied governance/. The glossary and compass terminology now give only what each term means.
Fixed
compass issue dashboard rendershows each issue's state, close reason and blocked reason, where it printedStatus: ?for an issue in progress.compass policy showno longer says the generation store has not landed, and thecompass issue migratehelp names schema 3.0.- The release, security and upgrade pages list every command that can fetch a git parent, and say which v5.6.0 commands refuse a 3.0 manifest.
Checked
- A project with no configuration behaves as 5.6.0, apart from the renamed words, for routing output, what each delivery approach owes,
compass checkverdicts on archived issues, CLI exit codes on a recorded command corpus, pre-tool hook decisions on a recorded corpus, and the readability of old manifests, evidence and receipts. Each is compared with a baseline captured once from 5.6.0.
Queued against this release
None that this release changes. Four queued issues carry a recommendation and wait for a maintainer decision:
- Governance merge versus replace: 6.0.0 adds layers in
compass.ymlas a way to extend the default, but the issue's report about a copiedgovernance/directory has not been re-checked against 6.0.0. - Whether this repository declares project guardrails: its
compass.ymlstays settings-only. - Approvals bound to what was approved: 6.0.0 records the approver with an evidence approval, not the revision approve...
Compass 5.6.0
Compass 5.6.0 is a minor release. It adds two commands, tightens several checks, fixes the defects below and pins CI's dependencies. Nothing is removed.
New
compass ship-commit -F <file>reads the commit message from a file, so a long message never needs a shell fallback around ship-commit's HEAD check (#120).make test-cleanruns the suite in a fresh clone of HEAD, as CI sees it, so a test that reads gitignored local state fails before the push (#122).
Changed behaviour
compass changed-file addandcompass evidence addrefuse a scenario id the issue does not define, or several ids in one value. Define a scenario withcompass scenario addbefore tracing to it (#119).compass check --verboselabels a check with nothing to inspectNOTHING TO CHECK, notPASS, and a failing verdict counts those checks apart:FAIL - 1 of 13 check(s) failed, 9 had nothing to check. The exit code and the JSON are unchanged (#110).- Printed output says "delivery approach" and "stages" where it said "route", "candidate shape" and "phases".
retroprintsDelivery approaches:. Machine keys are unchanged (#108). compass approach evaluate --writeandcompass checkrefuse an assessment key the manifest schema does not allow (#399).scripts/multiagent.shrefuses a distribution map whose subtask table and stated final count disagree (#101).
Fixed
compass tdd-redrecorded no import red whenFORCE_COLORwas set, and the eval harness and judge read no results (#403).- A friction note's phase accepts the current stage names (#156).
compass issue lintno longer demands an assessment from an issue abandoned before it was assessed.- Fired policy rules print through one formatter on every screen (#109).
- The pytest-bdd adapter tests pass where pytest-bdd is installed, and CI runs them (#407, #114).
- Test reliability: seed test runs no longer write caches into the checkout (#261), the full-archive citation check passes before generated files are built (#153), and the entry-point guard measures logic rather than line count (#102).
- Docs site: inline code in tables stays on one line.
Supply chain
Every action in .github/workflows/ and in the copyable ci/ workflows is pinned by commit SHA. CI installs its test tools from .github/requirements/ at exact versions, and the cucumber-js adapter installs with npm ci (#99, in part).
Queued against this release
None that this release changes. Three queued issues carry a recommendation and wait for a maintainer decision: governance merge versus replace (#105), project guardrails in this repository (#100) and approvals bound to what was approved (#118).
Verify the download
compass-5.6.0.tar.gz, SHA-256 56059226a4a1bbceb3b7ca78e1eec1272ad491508d35408887fd160f9628284c.