Commit graph

79 commits

Author SHA1 Message Date
claude-bot-andresmgsl
a3e59241b5 docs: builder surfaces write fragments, never CHANGELOG.md
CONTRIBUTING's flow item, BUILDER.md's entry rule, and the PR template
checklist all point at changelog.d/<issue>.md; the insert-above warning
retires with its anchor while the monotonic guard keeps the case (#117).
2026-07-24 11:11:23 +00:00
claude-bot-andresmgsl
c6e9afee87 docs: README describes the assembled stamp and the four guards
Stamp 2 is one assembler-produced edit; changelog-armed's rule is stated
mode-first (fragment, then legacy, #112 D7/D8/D9); changelog-assembled
gets its operator section (#116); monotonic records D10; the two rewritten
error strings and the retired re-arm recovery follow (#117).
2026-07-24 11:11:23 +00:00
claude-bot-andresmgsl
819dc7d992 feat: convert Unreleased entries to changelog.d fragments
The flip's mechanical half (#117): the 26 entries under '## Unreleased'
move verbatim to changelog.d/<issue>.md, the heading is deleted, the
directory gains its marker README (#112 D1) and this PR's own fragment
(112.md), CHANGELOG.md's preamble describes fragments, and labeler.yml
maps changelog.d/** into scope:release-flow.
2026-07-24 11:11:23 +00:00
claude-bot-andresmgsl
185fc39b96 ci: self-guards runs changelog-assembled; changelog entry 2026-07-24 09:31:49 +00:00
codex-bot-andresmgsl
69410723bd fix: reject entry-less release notes 2026-07-23 23:44:51 +00:00
codex-bot-andresmgsl
2c57216a56 fix: surface wholly blind label sweeps 2026-07-23 23:12:30 +00:00
claude-bot-andresmgsl
44d0a79547 feat(guards): wire runner-isolated — self-guards step, consumer entry, changelog (#58) 2026-07-23 12:04:11 +00:00
codex-bot-andresmgsl
70db91fa1a fix: wire dogfood issue reconciliation 2026-07-23 10:47:30 +00:00
codex-bot-andresmgsl
8174080c9d feat: reconcile the issue work queue 2026-07-23 10:31:15 +00:00
Daniel Marin
dbf857a94a
Merge pull request #43 from claude-bot-andresmgsl/build/19-docs-sync
feat: actions/docs-sync — vendored doctrine, machine-verified
2026-07-23 00:18:28 +01:00
claude-bot-andresmgsl
9782687bd7 feat: dogfood bootstrap — ceremony adopts its own ceremony (#11)
VERSION at 0.1.0-dev, the armed CHANGELOG.md, drills/README.md (what a
drill means here), the self-callers (self-release.yml, self-labels.yml —
local uses:, the one form consumers must never copy), .github/labeler.yml
for the scope job, and the three self-guards in CI. labels.yml gains the
self-consumption bypass (release.yml's twin) so the label bootstrap can run
before any release tag exists; action-exercise's armed/drill-recorded
scratch steps move to self-guards per their own eviction note.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 22:19:50 +00:00
claude-bot-andresmgsl
77f195a6ae ci: docs-sync-exercise job + CONSUMERS.md doctrine-mirror section
The fixture consumer is the workspace root (a uses: step cannot cd);
ceremony rides a subdirectory checkout serving as both the local action
ref and the --source override. CONSUMERS.md gains the wiring, bootstrap,
and pin-bump procedure (#12's section, amended in the same cycle).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 21:42:01 +00:00
claude-bot-andresmgsl
71c45b7fe5 feat: actions/drill-recorded — a release carries its evidence
Port box's drill-recorded.sh (the origin of the three copies) as a
composite action on the #5 pattern: version read through lib/version.sh,
one file per version under drills/, whitespace-only records refused.
Keyed on the tree's version — -dev trees pass with a notice that says
why nothing was asserted; bare trees must show drills/<version>.md with
at least one non-whitespace character.

Closes #7

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 21:28:06 +00:00
Daniel Marin
093656adbe
Merge pull request #41 from claude-bot-andresmgsl/build/6-changelog-monotonic
feat: actions/changelog-monotonic — shipped release headings are append-only
2026-07-22 22:23:06 +01:00
claude-bot-andresmgsl
a0bea573a1 ci: exercise changelog-monotonic with a real containment run
The action-exercise job commits a scratch base, marks it as an in-job
fixture branch, commits an insert-above edit, and runs the composite
action against that history — proving the wiring AND a genuine
merge-base comparison, not just an action.yml parse. Base ref passed
explicitly: the shallow PR checkout has no origin/main to resolve.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 21:12:44 +00:00
claude-bot-andresmgsl
4fd78615b3 ci: replay the merge door's steps against a fixture — the caller ran zero of them
Round 1's shared blocking catch: release-exercise's call job proves the
parse but executes no steps (both doors are push-gated, by design), and
fixture-chain drives the scripts, not the workflow. The new step-replay
job executes the merge door's early sequence for real — both checkout
shapes including path: .ceremony-src, both branches of the bypass via a
matrix standing in for the repository test, the CEREMONY_DIR wiring, and
facts → decide → notes through genuine $GITHUB_OUTPUT plumbing — against
a fixture tree with a stubbed gh. Wired into PR CI as standing evidence;
PR-only, because a push-to-main workflow_call would hand release.yml the
merge door's exact gate. release.yml's honest-gap paragraph narrows to
what stays untested until #11: the doors themselves.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 21:01:41 +00:00
claude-bot-andresmgsl
ad8ebfe2c9 feat: the reusable release workflow — both doors, one implementation
Closes #9. .github/workflows/release.yml (workflow_call) replaces box's,
rig's and cast's release.yml: the merge door (facts -> decide -> notes ->
tag+publish+bump, every decision in a tested lib script) and the tag door
(the manual fallback and backfill, no bump). Plus lib/facts.sh (the merge
door's impure half, contract-tested against fixture repos with a stubbed
gh), the self-ref pin guard (.github/scripts/self-ref-check.sh + CI step +
tests), the release-exercise scratch caller (dry wiring), the end-to-end
script-chain rehearsal, and the caller + artifact-hook contracts in
docs/CONSUMERS.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 19:55:39 +00:00
claude-bot-andresmgsl
dde6b253f5 feat: actions/changelog-armed — the version-keyed arming guard
Port box's changelog-armed.sh as the first composite action, establishing
the pattern #6 and #7 copy: action.yml passes inputs as env vars, the
co-located script stays directly runnable, and the shared libs are sourced
relative to the action so they travel with it at the consumer's pinned ref.

Port deltas per issue #5: the version goes through version_read (#3) so the
guard works for package-json trees, and the bare-version emptiness check
consults changelog_section (#4) — the guard and the publisher cannot
disagree about what a section is. Messages and the header essay keep the
box#108 / rig#66 / rig#44 / cast#108 history; this is the guard rig and
cast regain at adoption.

CI gains an action-exercise job driving uses: ./actions/changelog-armed
against a scratch armed tree — the composite wiring proven, not just the
script.

Closes #5

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 19:22:31 +00:00
Daniel Marin
3d252d2abd
Merge pull request #28 from claude-bot-andresmgsl/build/3-version-lib
feat: lib/version.sh — one version abstraction, two backends
2026-07-22 19:43:21 +01:00
codex-bot-andresmgsl
1ff660f539 docs: preserve labels workflow safety rationale 2026-07-22 18:21:11 +00:00
claude-bot-andresmgsl
36fc98bf40 feat: lib/version.sh — one version abstraction, two backends
The seam that lets box/rig/incubator (a VERSION file) and cast
(package.json + lockfile sync) share every other ceremony component
unchanged. Sourced, pure (no git), fail-loud on every unreadable state.

Carries cast's pkg_version discipline (node's parser, never regex) and
its lockfile-only bump incantation; refuses pre-release arithmetic
(-dev/-rc1) per box's prefix-confusion lore. The npm-backed write test
skips locally without npm but CI sets CEREMONY_REQUIRE_NPM so the skip
is a failure there — the case can never quietly stop running.

Closes #3

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 18:19:50 +00:00
codex-bot-andresmgsl
9755f634a0 test: cover labels state machine 2026-07-22 18:19:49 +00:00
codex-bot-andresmgsl
60e417a13c feat: centralize labels machinery 2026-07-22 18:18:18 +00:00
Daniel Marin
79cdbb81aa
Merge pull request #25 from codex-bot-andresmgsl/build/2-scaffold
ci: scaffold test and lint workspace
2026-07-22 18:53:28 +01:00
codex-bot-andresmgsl
9c7036e480 fix: use actionlint amd64 release asset 2026-07-22 16:59:13 +00:00
codex-bot-andresmgsl
0b05d6ac37 fix: quote shellcheck file arguments 2026-07-22 16:58:20 +00:00
claude-bot-andresmgsl
516f6d7a45 feat: entry templates — the pipeline's doors made mechanical
Four files under .github/: the new-issue interception (blank issues off,
Discussions link first), the work-order form mirroring TRIAGE.md's issue
contract with stable headings for #18 to parse, the PR template carrying
BUILDER.md's checklist, and light optional-only discussion forms for Ideas
and Q&A. No template applies any label — queue labels stay triage's
explicit act (LABELS.md).

Closes #24

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 16:58:01 +00:00
codex-bot-andresmgsl
dc886f7cb4 ci: scaffold test and lint workspace 2026-07-22 16:56:25 +00:00
dan-claude-bot
d0a0989a21 ci: interim labels-bootstrap dispatch — the taxonomy as a job, not a paste
Label definitions need write; the agents team is triage on purpose, and
the Actions GITHUB_TOKEN is how the family converges label taxonomies
without granting any agent identity write (box/rig/cast labels.yml
precedent). Deletable the day #10 lands.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 15:52:42 +00:00