Commit graph

297 commits

Author SHA1 Message Date
codex-bot-andresmgsl
7fc0425184 docs(fleet): reduce registry mechanism to a pinned pointer 2026-07-28 09:58:49 +00:00
Daniel Marin
432dff0613
Merge pull request #191 from dan-claude-bot/build/189-ci-red-deployed
docs(fleet): ci-red is deployed engine — advance the stamp to crew@4da17c4
2026-07-27 23:04:12 +01:00
dan-claude-bot
4f3fc2a20b docs(fleet): reconcile the attention wake too — the stamp covers the whole file
Refs #189. Round 1 on #191 (codex blocking, kimi nit).

codex caught that advancing the stamp to crew@4da17c4 made the attention
section false. It did, and the error is mine in kind, not only in detail: a
reconciliation stamp is a claim about the WHOLE file against that tree, and I
audited only the ci-red surface across a 17-commit advance. That is the #187
failure mode, on the PR that closes #189.

What was false at the pinned SHA, all from the crew#66 ruling (danmt,
2026-07-27) landing in d578150e:

- "One wake is registry-independent, by design: attention" — no wake is
  exempt now. _attention_partition splits rows against the registry; OUT rows
  are reported and never acted on.
- "the assignment is what carries the authorization — there is nothing here
  for a repo list to scope" — this is the position the ruling REJECTED. The
  cost was argued first: a cross-repo handoff now waits on an operator adding
  the repo, which is why an out-of-scope demand also pings the operator over
  the boot-gate channel rather than only reaching duty.log.
- "a fix that bounds this wake to the registry would re-create the #16
  incident" — that fix landed, with the ping as its mitigation.
- The parenthetical calling crew's repos-default.txt header a contradiction
  "raised there as a discussion" — the discussion is crew#66, it was ruled,
  and crew's header now names the attention wake explicitly. This file was
  preserving the losing side of a settled question.

Also in range and owned by this section: d849f166 ledgered the wake, so
"a session that dies before acking is relaunched; that is the whole
crash-recovery story" no longer is. Dying relaunches; COMPLETING without
acking is a decline, and the ledger stops it re-firing until the issue
moves. Meaning, not mechanism, so it belongs here.

Re-audited the rest of the advance rather than spot-fixing: fleet.roster
still declares itself the TARGET environment (the roster paragraph holds),
and the roster/install commits touch role resolution inside crew, which this
file does not describe.

kimi's nit, which the earlier rewrite made mine: the paper inventory counted
one row while the triage-signals bullet marks a second. Both are needs-ruling
rows and both are now named — a number that has to be recounted every time a
wake lands is the thing that went wrong.

18/18 test files; changelog_fragment_problem OK; shellcheck, self-ref and
git diff --check clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 21:36:10 +00:00
dan-claude-bot
45934b54a2 docs(fleet): ci-red is deployed engine — advance the stamp to crew@4da17c4
Refs #189 — the post-merge, triage-owned task, now reachable: heavy-duty/crew#64
merged at 4da17c49594c2d86bd3793fa3567846cbca38e90.

#190 wrote the ci-red wake into FLEET.md deliberately marked on paper, per this
file's convention for a spec that is not yet running, and left the reconciliation
stamp at crew@01fb49c because advancing it to a SHA that did not carry the wake
would be the drift #187 exists to remove. crew#64 has merged, so both halves flip:

- The stamp advances to crew@4da17c4, and every crew permalink in the file with
  it. A stamp and its evidence links naming different trees is worse than no
  stamp: the reader diffs the wrong engine and finds no drift because the tree
  they were pointed at is the one the prose was written against.
- The four on-paper markers go: the duty-order caveat, the ci-red bullet's
  parenthetical, the Build bullet's "once ci-red deploys", and the closing
  paper inventory — which now names one remaining paper wake, the notifier's
  needs-ruling queue, not two.

The Build bullet is not a pure marker removal. crew#64's last review round
changed what it has to say: the operator ruled the round gate a whitelist, so
the wake admits a green head OR one with no checks configured, and holds a red
head AND one whose check has not finished. Copying the old "never a round at a
red head" through the flip would have shipped a fresh inaccuracy on the same
commit that claims the file is reconciled. The ci-red bullet gains the matching
sentence from the other side: an unfinished check is not a red head and wakes
nothing, because nothing has failed yet.

Verified at the stamped SHA rather than assumed: duty.sh's header carries
attention → … → resume → ci-red → build (and says it is what this file is
reconciled against), shared/README.md's duty order matches, and notify.sh's
only label filter is still state:needs-human — which is what keeps the
remaining paper claim true.

18/18 test files pass; changelog_fragment_problem OK (it caught a 387-char
entry against the 300 bound, now split); shellcheck, actionlint self-ref and
git diff --check clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 21:22:07 +00:00
Daniel Marin
e3820dbf9a
Merge pull request #190 from claude-bot-andresmgsl/build/189-ci-red-doctrine
docs: the check at the head — round precondition, CI-red recovery, and the ci-red wake on paper
2026-07-27 21:25:20 +01:00
claude-bot-andresmgsl
44ff7524af docs(builder): re-request by head, not by verdict — a push stales every approval
The round protocol told the author to re-request exactly the reviewers
who did not approve, but the handoff predicate counts an approval only
at the current head: any push while answering a round staled the
earlier approver's verdict, doctrine said not to re-request them, and
the PR could never converge — the silent-stall shape of #26/#39.
Step 2 now re-requests by head, not by verdict: every panelist after a
push, the non-approvers alone at an unchanged head. Shape 2's wording
is aligned so the two paragraphs agree.

Defect raised by dan-claude-bot on #190; folded in at the operator's
direction while the paragraph is open. Refs #189.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 19:53:59 +00:00
claude-bot-andresmgsl
e9cf461ed3 docs(builder): avoid 'ledger' for review-verdict state in the red-head rule
Refs #189

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 18:47:00 +00:00
claude-bot-andresmgsl
e85a7d42f3 docs(fleet): ci-red in the duty order and wake list, on paper; changelog fragment
FLEET.md gains the ci-red wake between resume and build in crew#64's
engine position, marked on paper per this file's existing convention (the
notifier queue, triage's past-24h wake); the Build bullet records the
red-head exclusion as reported-not-swallowed; the reconciliation stamp
stays at crew@01fb49c because crew#64 has not merged.

Refs #189

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 18:46:10 +00:00
claude-bot-andresmgsl
203907b0ea docs(builder): green check at the head gates both request points; red-head recovery in picking
The round precondition (crew#45) at step 1 and the re-request in step 2,
with the argued exception and its evidence requirement; the ruled
classification (cancelled/stale not green, skipped/neutral green,
operator 2026-07-27); ci-red pickup precedence and crew#17's recovery
path in Picking, with the explicit shape-2 carve-out so a red head never
reads as parked.

Refs #189

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 18:45:03 +00:00
Daniel Marin
a414f3105b
Merge pull request #188 from claude-bot-andresmgsl/build/187-fleet-split
docs: FLEET.md reconciled against crew@01fb49c — registry is the scope
2026-07-27 19:29:15 +01:00
claude-bot-andresmgsl
7a49de7efb docs: FLEET.md reconciled against crew@01fb49c — registry is the scope
The two scope passages said the opposite of merged behaviour: a reviewer's
registry was 'the org itself' and 'no repo filter may gate' a request.
duty-review.sh implements repos.txt as the queue's scope since the
2026-07-25 operator ruling (crew#16) — out-of-scope requests WARN, never
act. The attention wake survives as the one stated registry-independent
exception: the assignment is the authorization (duty-attention.sh).

Mechanism moved to crew: the duty-loop anatomy and resilience prose is now
a pointer to crew's shared/README.md, folding the two drifted facts (cron
runs tick.sh; hygiene self-schedules inside the duty tick). Wake lists
follow the engine's duty order; the roster keeps the as-built bench beside
fleet.roster's target with the delta stated; stamp updated to crew@01fb49c.

Closes #187

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 18:16:17 +00:00
Daniel Marin
d9c5b92dd1
Merge pull request #186 from claude-bot-andresmgsl/build/184-blocked-by-union
fix: blocked_reference_records unions every Blocked by clause (#184)
2026-07-25 16:40:25 +01:00
claude-bot-andresmgsl
0eea112d50 fix: blocked_reference_records unions every Blocked by clause
Binding to the first marker occurrence dropped every later sentence of a
repeated declaration and let earlier prose hijack the parse — the false
ready promotion on rig#154. Each occurrence now contributes its own
clause, terminated at its own first ./; (unterminated -> end of input),
and the union feeds the unchanged classification and decision table.

Closes #184

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 13:58:39 +00:00
Daniel Marin
80c0dca3b0
Merge pull request #183 from claude-bot-andresmgsl/build/182-shape-sentinel
lib/changelog.sh + changelog-armed — the shape anchor becomes declarable; ceremony flips to grouped
2026-07-25 14:43:53 +01:00
claude-bot-andresmgsl
0b158a6917 fix: the sentinel's one-line contract is checked on the file, not the $(cat) word
Command substitution strips every trailing newline, so 'grouped\n\n'
reached the case as a clean word and passed — the round's shared blocker
(codex, grok). A line count taken from the file itself now refuses any
physically multi-line sentinel before the word check runs, with the
existing diagnosis naming the file. Red rows: grouped/flat with a
trailing blank line in the unit suite, grouped in the armed suite.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 13:29:02 +00:00
claude-bot-andresmgsl
be666ebed6 feat: ceremony flips to grouped — changelog.d/shape = grouped, five fragments converted, docs per D6
167/175 gain '### Added', 173/178 '### Changed', 180 '### Fixed' — every
bullet byte-identical, headings only (the #158 bar, inverted). CONSUMERS.md
names the sentinel and the flip procedure; changelog.d/README.md names the
sentinel. 182.md is this PR's own fragment, grouped atop the sentinel it
ships.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 13:14:05 +00:00
claude-bot-andresmgsl
2fd9cb7ded test: sentinel rows across the shape predicate, the armed guard, and the assembler
Must-pass and must-fail rows from #182's test plan: the flip shape green
under the sentinel, drift and malformed sentinels red with file named, the
D3 fragment-list assertion, and D5 sentinel survival through consumption.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 13:12:30 +00:00
claude-bot-andresmgsl
7d29acdeb0 feat: changelog_shape_problem reads the declarable anchor changelog.d/shape
The sentinel pins the set's shape, outranking the newest-published-section
inference (#182 D2); malformed content is a red diagnosis naming the file.
bin/changelog-assemble skips 'shape' in the stray-file loop so the sentinel
survives the consumption (#182 D5).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 13:09:37 +00:00
Daniel Marin
4debf53872
Merge pull request #181 from claude-bot-andresmgsl/build/180-blocked-excludes-nh
fix: `blocked` excludes `state:needs-human` in decide_state()
2026-07-25 11:31:23 +01:00
Daniel Marin
ede2767232
Merge pull request #176 from codex-bot-andresmgsl/build/175-post-merge-queue-state
feat: add post-merge issue queue state
2026-07-25 11:31:08 +01:00
claude-bot-andresmgsl
1c9a82aaf0 fix: blocked excludes state:needs-human in decide_state (#180)
During the ceremony#111 freeze, rig#126/#128 carried blocked beside
state:needs-human — the round had finished, but the hold said the merge
must not happen, and rig#126 was merged seven minutes after the
reconciler wrote the green label. decide_state() only joined the two
axes through blockers(), which emits branch facts; the hand-set blocked
label was never consulted.

blocked becomes the second exclusion on state:needs-human, exactly
parallel to needs-ruling: round says needs-human + has_label blocked ->
state:addressing. Deliberately not a blockers() emission — BLOCKERS is
machine-owned and the converge loop would strip the live hold on the
next tick, the same trap #51 names for needs-ruling.

Ruling record: discussion 122, armed default A fired 2026-07-25T09:00Z.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 09:08:54 +00:00
Daniel Marin
24255a97cd
Merge pull request #179 from claude-bot-andresmgsl/build/178-park-stands
docs: a park is declared once and stands; a nothing-changed resumption posts nothing
2026-07-25 08:02:52 +01:00
codex-bot-andresmgsl
5a3d72f09c fix: make post-merge transitions episode-aware 2026-07-25 04:29:37 +00:00
claude-bot-andresmgsl
9ff8ed6c03 docs: a park is declared once and stands; nothing-changed resumptions post nothing
The park contract said declared-never-inferred but not that the
declaration stands, so a conservative builder re-declared every ~5
minutes — rig#145 collected 38 identical resumption audits in one
night. Now the declaration stands until the park's facts change; the
only repeat owed is the no-open-PR refresh inside the 48-hour reclaim
window. Decided on #177.

Closes #178

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 04:27:04 +00:00
codex-bot-andresmgsl
24dd818b35 test: cover post-merge queue boundaries 2026-07-25 00:14:23 +00:00
codex-bot-andresmgsl
bb7dd51ba7 feat: transition merged refs work to post-merge 2026-07-25 00:11:42 +00:00
codex-bot-andresmgsl
8e6423a07c docs: define post-merge queue state 2026-07-25 00:09:14 +00:00
Daniel Marin
486bbd10a4
Merge pull request #174 from codex-bot-andresmgsl/build/173-private-read-scopes
docs: add actions read to private caller guidance
2026-07-25 00:35:46 +01:00
codex-bot-andresmgsl
eae000bd62 docs: add actions read to private caller guidance 2026-07-24 22:57:22 +00:00
Daniel Marin
68354f846a
Merge pull request #169 from claude-bot-andresmgsl/build/167-fragment-entry-bound
changelog_fragment_problem — entries are bounded at 300 characters
2026-07-24 19:54:09 +01:00
claude-bot-andresmgsl
6c746364af feat: changelog_fragment_problem bounds entries at 300 characters (#167)
One definition in the fragment predicate; changelog-armed reds the PR
that writes the fragment and the assembler refuses at release, both by
inheritance. Doctrine names the number in BUILDER.md and CHANGELOG.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 18:25:46 +00:00
github-actions[bot]
9008e03b03 chore: bump main to 0.3.1-dev — a dev install must not impersonate 0.3.0 2026-07-24 17:39:49 +00:00
Daniel Marin
bc469d9de5
Merge pull request #164 from codex-bot-andresmgsl/build/160-release-0-3-0
release: cut 0.3.0
2026-07-24 18:39:38 +01:00
codex-bot-andresmgsl
66c449dd3a docs: record 0.3.0 live drill 2026-07-24 17:12:55 +00:00
codex-bot-andresmgsl
da186729c5 release: prepare 0.3.0 2026-07-24 17:06:25 +00:00
Daniel Marin
a7aedfd081
Merge pull request #163 from codex-bot-andresmgsl/build/159-changelog-shape-guard
feat: fail shape drift on the introducing PR
2026-07-24 17:56:58 +01:00
codex-bot-andresmgsl
eb25b38c14 test: cover grouped anchored release replay 2026-07-24 16:17:02 +00:00
codex-bot-andresmgsl
fdf544b390 feat: enforce changelog shape in guard and assembler 2026-07-24 16:14:35 +00:00
codex-bot-andresmgsl
ef658f52a4 feat: centralize changelog shape validation 2026-07-24 16:12:52 +00:00
Daniel Marin
f19d671b74
Merge pull request #162 from claude-bot-andresmgsl/build/158-strip-grouped-headings
fix: strip the grouped headings from the four drifted fragments
2026-07-24 17:05:32 +01:00
claude-bot-andresmgsl
fb6f16ae0c fix: strip grouped headings from the four drifted fragments
Ceremony is a flat repo (#112 D3); changelog.d/135.md, 137.md, 144.md and
151.md landed with a '### Fixed'/'### Changed' heading, each individually
legal to changelog_fragment_problem, and together they made the directory
mixed-shape — 'bin/changelog-assemble 0.3.0 --check' refused on main.
Delete the heading line and its following blank line from each; every
bullet stays byte-identical (#157 D1). No fragment for this PR: its whole
diff is unpublished fragment text (#157 D2).

Closes #158

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 15:46:48 +00:00
Daniel Marin
f168bbfbac
Merge pull request #155 from claude-bot-andresmgsl/build/154-hold-ends-on-labels
docs: a directive hold ends on the labels, and stale hold prose is triage's to correct
2026-07-24 16:10:05 +01:00
Daniel Marin
cb5bfb1e01
Merge pull request #153 from claude-bot-andresmgsl/build/149-fleet-reviewer-wake
docs: FLEET.md's reviewer wake describes the deployed requested_reviewers sweep
2026-07-24 15:40:42 +01:00
claude-bot-andresmgsl
baf0c04f1f fix: TRIAGE.md cites the real #151 needs-ruling comment; BUILDER.md timestamp to the second
The permalink for the needs-ruling ask on #151 pointed at a comment id
that does not exist; the ask is comment 5070768876 (dan-claude-bot,
2026-07-24T14:10:34Z). Also corrects the #149 claim citation from
14:11:44Z to the comment's actual 14:11:45Z.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 14:37:52 +00:00
Daniel Marin
0e91a0d62f
Merge pull request #152 from claude-bot-andresmgsl/build/151-refs-not-closes
docs: a post-merge acceptance criterion rides Refs #N — triage closes on the evidence
2026-07-24 15:27:43 +01:00
claude-bot-andresmgsl
d9d73878cc docs: a directive hold ends on the labels; stale hold prose is triage's to correct
BUILDER.md shape 5 gains its ending: the hold owner's most recent
queue-label event governs over stale prose, the timeline read comes
before standing down or up on a hold, a claim against stale prose cites
the events it read, and a refused claim has two exits. TRIAGE.md
requires re-reading label events before asserting label-borne state and
makes a lifted hold's stale body header triage's to correct in the same
tick.

Closes #154

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 14:23:16 +00:00
claude-bot-andresmgsl
5f491ffc1f docs: FLEET.md's reviewer wake describes the deployed requested_reviewers sweep
The Reviewers bullet stated a gh-search request trigger and a sequential
first-this-second-that ordering; all four reviewer boxes actually run an
org-wide pulls-API requested_reviewers sweep merged with the repos.txt
backstop, deduplicated by (repo, PR) before acting (crew@b2fd864). The
on-paper list narrows to the notifier's needs-ruling queue, repos.txt is
the registry only on the triage box, and the Status block now carries the
crew ref this description was last reconciled against.

Part of the drift #148 reported; spec and citations in #149.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 14:14:36 +00:00
Daniel Marin
9e960f8dab
Merge pull request #150 from claude-bot-andresmgsl/build/144-consumers-issues-parity
fix: the CONSUMERS.md stub's issues: types match the caller's, parity-tested
2026-07-24 14:56:29 +01:00
claude-bot-andresmgsl
b3b9830700 docs: a post-merge acceptance criterion rides Refs #N — triage closes on the evidence
Merging #143 auto-closed #137 with a post-merge criterion unmet: the PR
carried Closes #137 as doctrine required, the criterion could only be
checked after the merge, and the contract was silent on the disagreement
between GitHub's keyword and the pipeline's close authority — the same
disagreement the cross-repo carve-out already resolved, one case over.

BUILDER.md gains the second exception beside the first: when the issue
body marks a criterion post-merge, the same-repo PR uses Refs #N and
triage closes by hand on the evidence. TRIAGE.md makes the criterion
carry its own mechanism; REVIEWER.md lists Refs #N as a spec pointer and
stops treating the reference-only PR as a defect; CONTRIBUTING.md points
at the one home instead of restating. No machinery, no label (#151 D5).

Closes #151

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 13:48:27 +00:00
Daniel Marin
e8675548ce
Merge pull request #147 from claude-bot-andresmgsl/build/135-drill-cleanup
docs: the drill's delete is the operator's step — the builder archives
2026-07-24 14:46:28 +01:00