A builder's whole-file run list for a row comes from imports, not a text grep, and goes in the builder's report before the run. Files on the mos-1592 list stay off unless Mos approved the run. Row 329 round 2's path grep matched fixture text and reran case1-accept.
128 lines
5.7 KiB
Markdown
128 lines
5.7 KiB
Markdown
# Brief template
|
|
|
|
Copy the section below into the brief file for a queue row, one `##`
|
|
heading per row. The row records the file path and that heading as its
|
|
brief anchor (`--brief docs/plans/<file>.md#<heading>`), plus the git blob
|
|
of the committed file.
|
|
|
|
Rules the queue enforces (queue-as-data plan 8.13):
|
|
- the brief is committed before `queue add` or a brief change names it; a
|
|
staged or untracked brief is refused;
|
|
- the heading occurs exactly once in the file;
|
|
- a later edit to a committed brief makes `next` flag the row and `start`
|
|
refuse until the lead re-pins it.
|
|
|
|
`queued` means the brief exists, not that it is accepted. The row moves to
|
|
`briefed` when a privileged actor (jason or sage) accepts it; the owner
|
|
can't.
|
|
|
|
---
|
|
|
|
## <Piece name, the row's one-line piece text>
|
|
|
|
### Problem
|
|
|
|
What is wrong or missing today, with evidence: file paths, issue numbers,
|
|
command output. One paragraph.
|
|
|
|
### Owner and reviewer
|
|
|
|
- Owner: the seat that does the work.
|
|
- Reviewer: the seat that reviews it, or "none" and why.
|
|
|
|
### Files owned
|
|
|
|
Every path this piece may create or change. Anything else is out of scope
|
|
unless the brief is amended.
|
|
|
|
### What ships
|
|
|
|
The concrete result: code, tests, docs. Name the test suites that must pass.
|
|
|
|
### Out of scope
|
|
|
|
What this piece deliberately leaves alone, and where that work goes.
|
|
|
|
### Gate
|
|
|
|
Who says yes, and on what evidence: the command to run, the output to
|
|
expect, or the comment to read.
|
|
|
|
Every seat, Claude or Codex, runs the suites with a short TMPDIR:
|
|
`export TMPDIR=$(mktemp -d /mnt/storage/scratch/tmp/XXXXXX)`, 31 bytes. A
|
|
launch refuses when its run's `tools.sock` path passes 107 bytes
|
|
(`packages/seat/src/session.mjs:278`). Tests build that path under TMPDIR
|
|
and drop the launcher log, so the refusal shows only as a 20-second "no
|
|
RESULT". `packages/cli/tests/revoke-window.test.mjs` needs TMPDIR at 35
|
|
bytes or less. A seat-named TMPDIR such as `.../tmp/goldieXXXXXX` (37)
|
|
fails it on any commit (row 323, mos-1561). A builder whose cli suite
|
|
can't run says so in the row, and the cli suite counts from the lead's
|
|
landing gate.
|
|
|
|
Make the TMPDIR with shell `mktemp -d` and that template only. Python's
|
|
`tempfile.mkdtemp` adds `_` and runs to 48 bytes, which fails
|
|
`claude-session.test.mjs:298` and the socket limit (Vikunja 590). A
|
|
script that starts several runs makes one TMPDIR per run.
|
|
|
|
Set nice absolutely, not relative. The host's ananicy renices node, so
|
|
`nice -n 10` can land at 16 or at -4. In shell use
|
|
`nice -n $((19 - $(nice))) CMD`. In a Node or Python launcher set 19 in
|
|
each child (`os.setpriority` or `os.nice(19 - os.nice(0))` in preexec).
|
|
Record the nice each run saw in BUILD.md (Vikunja 623, mos-1598).
|
|
|
|
Evidence that lands with a row is plain text: logs, diffs, manifests. No
|
|
gzip or other binary file, so the lead's push guard runs its binary and
|
|
secret checks with no waiver. If a log is too big, cut it to the lines
|
|
that prove the claim. Or keep it off refactor, in the seat's scratch, and
|
|
cite its path and sha256 in BUILD.md (mos-1570, after row 265's 22 gzip
|
|
logs).
|
|
|
|
Builders never run npm or remove files in the canonical checkout
|
|
(`/mnt/storage/src/mosaic-stack`), only in their own worktree. Every gate,
|
|
the builder's and the lead's landing gate, runs its own
|
|
`npm ci --ignore-scripts --no-audit --no-fund` in its worktree root and in
|
|
`packages/webui`, and never links to canonical node_modules (mos-1575,
|
|
after canonical node_modules was found empty at 05:45:15Z 10-24 and row
|
|
327's gate went red on it).
|
|
|
|
A skipped cli test turns the lead's landing gate RED unless it is on the
|
|
gate's skip list (mos-1583, after row 296's FED R7 test). An entry is the
|
|
test file, the test name and the runner script, for example
|
|
`tests/federation-acceptance.test.mjs`, "FED R7 scratch two-instance
|
|
acceptance", `scripts/test-federation-acceptance.sh`. The skip passes only
|
|
when that runner ran in the same gate with rc 0, at least one pass, no
|
|
skips, and the named test passed. A builder whose new cli test skips in the
|
|
suite by design and runs through a script puts that entry in the brief's
|
|
Gate and in BUILD.md with the row, and the lead adds it to the landing
|
|
gate's list. Any unlisted skip stays RED.
|
|
|
|
A builder's list of whole test files to run for a row comes from imports,
|
|
not from a text grep for a path, and goes in the builder's report before
|
|
the run. A file on the mos-1592 list (`packages/cli/tests/case1-accept.test.mjs`
|
|
for now) stays off the list unless Mos has approved that run (mos-1612,
|
|
after row 329's round 2 grep matched fixture text and reran the F7 file).
|
|
|
|
Any row that builds businessDoc() with a library project sets the chief's
|
|
gitea ref in its fixture (mos-1584, after row 285 gave the chief of staff
|
|
a read-scoped gitea credential that the validator requires when a business
|
|
declares a library).
|
|
|
|
A made-up credential in a test stays under 24 characters, for example
|
|
`const SEAT_TOKEN = 'fx286-seat-q7'`. The push guard stops any added line
|
|
where `token`, `secret` or `password` is assigned a quoted value of 24 or
|
|
more letters, digits, `_` or `-`, and it has no fixture exception (sage-4112,
|
|
after row 286's 31-character fixtures stopped its landing push).
|
|
|
|
### Handoffs
|
|
|
|
Every seat hands off directly (DECISIONS Q210, mos-1221). When the owner
|
|
pushes a build or a new round, or the reviewer posts a verdict, that seat
|
|
messages the next seat's T3 thread and Sage's with
|
|
`mcp__t3__t3_send_message`. Claude and Codex seats both have it. Copy
|
|
Mos's thread only when Mos has a step. Nobody waits on a date or a
|
|
schedule when the next step is ready. Reports, questions and slot
|
|
requests for Sage go to Sage's thread,
|
|
`1ef1e4f8-3ead-4208-beca-38f9f1add079`, with the `[from: ... -> to: ...]`
|
|
header, never to Mos's thread in Sage's place (mos-1591, after Beakley,
|
|
Fethry and Herb reports reached Mos).
|