obsidian-memory
Recall project memory or save reusable lessons to Obsidian only when explicitly requested. Exclude automatic task closeout, raw…
TLA+ model checks of the boss command send: the operator write run and the cooldown from the audit log. Use before you change src/effects/operator/write-run.ts, src/effects/operator/advisor-seat-route.ts, src/effects/operator/write-audit.ts, src/core/board/advisor-seat.ts,
Claude Code
$ npx -y skills add aimpact-inc/repo-harness --skill verify-boss-command --agent claude-code
Codex
$ npx skills add aimpact-inc/repo-harness --skill verify-boss-command -a codex -y
Cursor
$ npx skills add aimpact-inc/repo-harness --skill verify-boss-command -a cursor -y
Gemini CLI
$ npx skills add aimpact-inc/repo-harness --skill verify-boss-command -a gemini-cli -y
GitHub Copilot
$ npx skills add aimpact-inc/repo-harness --skill verify-boss-command -a github-copilot -y
OpenCode
$ npx skills add aimpact-inc/repo-harness --skill verify-boss-command -a opencode -y
Windsurf
$ npx skills add aimpact-inc/repo-harness --skill verify-boss-command -a windsurf -y
name: verify-boss-command description: "TLA+ model checks of the boss command send: the operator write run and the cooldown from the audit log. Use before you change src/effects/operator/write-run.ts, src/effects/operator/advisor-seat-route.ts, src/effects/operator/write-audit.ts, src/core/board/advisor-seat.ts, src/effects/operator/board-read.ts or src/effects/operator/server.ts."
A boss command is a console write into an agent terminal. `BossCommandSend.tla` describes the server code at the sync commit: the target lock, the request lookup, the intent record, the cooldown, the read-back, the send child, the result record, and one crash of `operator serve` at a step boundary.
Sync commit: `b9dee51ee0390b300951123607144d680add2339` (PR base). Move it forward only after each row of the coverage record is true for the new code.
| Rule | Sentence | Harm when it breaks | State | |---|---|---|---| | `CooldownHolds` | Two requests that reached the seat have intent times at least one cooldown apart. | The advisor seat gets the same command two times inside 30 or 60 minutes. | holds | | `OneSendPerRequest` | One request_id reaches the seat at most one time. | A retry types the command into the terminal again. | holds | | `IntentBeforeSend` | Nothing is sent before the intent record is in the log. | A send that no log entry can account for. | holds | | `HonestAnswer` | An answer that says "not sent" is true, and an answer 200 has a send. | The person sends again after a false "not sent". | holds |
| Model part | Code | |---|---| | `Admit`: the lock, the lookup, the intent | `src/effects/operator/write-run.ts:145-171` | | `IdempotentAdmission` | `write-run.ts:152-153` | | `Admit`: the cooldown | `src/effects/operator/advisor-seat-route.ts:141-158,193-205` | | `UnresolvedCounts`, `ReconcileCounts` | `maySend`, `advisor-seat-route.ts:126-131` | | `ReadBack` | `advisor-seat-route.ts:207-222` | | `ChildFails` | `ADVISOR_SEAT_NOT_SENT`, `src/core/board/advisor-seat.ts:55-59` | | `SendReturns`, `SendTimesOut` | `advisor-seat-route.ts:65-100`, `src/effects/operator/board-read.ts:172-181` | | `Record` | `write-run.ts:181-197` |
`Admit` is one step of the model because the lookup, the intent append, the read of the log and the cooldown decision run with no `await` between them. A change that puts an `await` there makes the model wrong: split the step before you run the check.
A change touches the verified code when `git diff b9dee51ee0390b300951123607144d680add2339 -- src/effects/operator/write-run.ts src/effects/operator/advisor-seat-route.ts src/effects/operator/write-audit.ts src/core/board/advisor-seat.ts src/effects/operator/board-read.ts src/effects/operator/server.ts` is not empty.
TLA2TOOLS_JAR=<tla2tools.jar of TLA+ v1.7.4> bash specs/tla/check.sh BossCommandSend
The run takes about 10 s and needs Java 11 or later. The script takes the version and the SHA-256 of the jar from `scripts/contract-closeout-tla.sh`. `specs/tla/checks.tsv` holds the expectation of each config: `holds`, `breaks` (one guard is off, and TLC must report the named rule) or `finding` (the code breaks these rules now).
Bounds of `BossCommandSend.cfg`: one binding, three calls (two with one request_id), a cooldown of 2 clock ticks, a clock of 0 to 3, one crash: 72,018 states.
Read each counterexample as a path through the actions in the spec header. `BossCommandSend.tla` has more states than a chart can show.
1. Find the changed lines in the coverage record and in the header of the spec. 2. Change the model first, from the code: the action, or the constant of the guard. Do not shape it by the result. 3. Run the check.
4. Set the sync commit to the commit that you checked.
The tests catch each of the three guard removals: `tests/cli/operator-serve.test.ts` (`boss commands`) fails for both changes of `maySend`, and `tests/effects/operator-write-channel.test.ts` fails with the request lookup off. The model adds the crash at each step boundary and each order of three calls.
Recall project memory or save reusable lessons to Obsidian only when explicitly requested. Exclude automatic task closeout, raw…
Start the advisor seat of the current repository beside its live orchestrator seat in the project Herdr space, from rh seats…
Draw or refresh the project's human-facing architecture map, one self-contained HTML file at docs/architecture/archimap.html,…
Independent acceptance review through a persistent Herdr task session that runs the deep-reasoner role. Generic review owns…
Start or reuse a named Claude CLI worker in a visible herdr-core terminal from a Claude Code session (App Code tab first), return…
Run GitHub issue and PR driven development with several agents. Use it to turn a PRD or feature into a backlog of requirement…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.