Commit graph

331 commits

Author SHA1 Message Date
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
claude-bot-andresmgsl
0b77d4b860 fix: the CONSUMERS.md stub's issues: types match the caller's, parity-tested
The stub published [opened, labeled, unlabeled, assigned, unassigned,
closed] while ceremony's own caller listens on eight types — PR #32's
70db91f widened the caller by edited and reopened and the stub never
followed. Both are load-bearing: an edited body rewrites the Blocked-by
declaration the reconcile sweep parses, and a reopened issue re-enters
the queue wearing labels derived at close (#144).

The stub's list is now byte-identical to the caller's, a parity row in
test/labels.test.sh keeps it that way (red on a dropped type, a drift,
or a reorder in one file only), and one adoption note names the tag the
widened list rides in on. The caller does not narrow.

Closes #144

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 13:43:35 +00:00
Daniel Marin
6a16a30bab
Merge pull request #143 from claude-bot-andresmgsl/build/137-review-request-wake
fix: review_requested wakes the labels sweep — blocker:unrequested clears when the ask lands
2026-07-24 14:33:11 +01:00
Daniel Marin
0fcd818396
Merge pull request #146 from codex-bot-andresmgsl/build/145-review-mechanics-doctrine
docs: teach reviewers the queue mechanics
2026-07-24 14:32:57 +01:00
claude-bot-andresmgsl
89de86c460 chore: retrigger checks — queued reconcile duplicate was cancelled (#139 shape)
48a3052's only labels/reconcile entry is a queue-evicted CANCELLED (its
scope sibling in the same run passed); an all-cancelled group keeps
blocking by design under #139's rule, so only a fresh run on this head
can clear the manufactured red. No verdict binds 48a3052 yet, so this
head move stales nothing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 13:20:22 +00:00
claude-bot-andresmgsl
357be8e65d docs: the drill's delete is the operator's step — the builder archives (#135)
Both 0.2.0 drills ended at the same wall independently: bot tokens
deliberately lack delete_repo, so 'it gets deleted at the end' named a
step no builder in this fleet can perform. One drill held its release
draft in state:building retrying a 403 that cannot succeed; the other
shipped a record asserting a delete that had not happened. Step 1 now
names archive (archived:true, inside the repo scope) as the builder's
end state and the delete as the operator's, states that cleanup gates
nothing, and says why the archived leftover is safe to leave. The
record now states the disposal its author actually observed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 13:16:42 +00:00
Daniel Marin
089f2dba29
Merge pull request #140 from claude-bot-andresmgsl/build/139-cancelled-not-verdict
fix: a queue-cancelled duplicate check is not a verdict — checks_state discards it when a real one stands
2026-07-24 14:14:36 +01:00
Daniel Marin
ad5c175d0c
Merge pull request #133 from claude-bot-andresmgsl/build/130-labels-scope-clobber
fix: labels/scope writes additively — a label applied mid-job survives
2026-07-24 14:14:03 +01:00
Daniel Marin
4bb6ee8f12
Merge pull request #141 from codex-bot-andresmgsl/build/131-release-pr-changelog-exemption
docs: state the release PR changelog exemption
2026-07-24 14:13:45 +01:00
claude-bot-andresmgsl
48a3052934 docs: CONSUMERS release-state notes say 0.2.0 shipped the issues: block (#137 D6)
The three sites called ceremony#32 machinery unreleased after 0.2.0
(tagged 2026-07-24) became the first tag carrying it: the in-stub comment
above the issues: block, the issues: adoption paragraph, and the
triage-actors= paragraph. All three now state availability at 0.2.0 and
later; the 0.1.0-omission guidance and the parse-failure sentence stay —
still true. No type list moves (the caller/stub issues: subset drift is
#144, not this PR).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 13:13:31 +00:00
codex-bot-andresmgsl
1233e9b1b6 docs: capture reviewer queue mechanics 2026-07-24 13:12:21 +00:00
claude-bot-andresmgsl
c0e796b6c9 fix: review_requested wakes the sweep — blocker:unrequested clears when the ask lands
The reconciler's rule was right and blind: the caller never listened on
review_requested/review_request_removed, so the one event that falsifies
(or restores) blocker:unrequested could not clear it, and a quiet repo
wore the red flag until the advisory cron (#137's timeline: 93 seconds,
cleared only by an unrelated PR's push).

- self-labels.yml + the CONSUMERS.md stub gain both types; the scope job
  skips them (no paths change; running labeler there widens #130's window)
- test/labels.test.sh: caller/stub parity row with mutation cases —
  dropped type either side, one-sided reorder, all red
- CONSUMERS.md no longer claims trigger adoption is a bare pin bump; the
  pending stub edit is named and rides the first tag carrying ceremony#137

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 12:50:09 +00:00
Daniel Marin
7b97554f19
Merge pull request #136 from claude-bot-andresmgsl/build/134-facts-root-commit
fix: facts.sh reads a parentless head as base_ver=(none), not exit 128
2026-07-24 13:47:33 +01:00
codex-bot-andresmgsl
050a24db8a fix: format changelog fragment as an entry 2026-07-24 12:43:17 +00:00
codex-bot-andresmgsl
3792d52b82 docs: exempt release PRs from changelog fragments 2026-07-24 12:41:46 +00:00
github-actions[bot]
ae6b509772 chore: bump main to 0.2.1-dev — a dev install must not impersonate 0.2.0 2026-07-24 12:36:19 +00:00
Daniel Marin
94e019b3fc
Merge pull request #128 from codex-bot-andresmgsl/build/118-release-0-2-0
release: 0.2.0
2026-07-24 13:36:07 +01:00