Commit graph

54 commits

Author SHA1 Message Date
claude-bot-andresmgsl
4c0ecf10d8 test: lib fragment trio and the changelog-assemble CLI; changelog entry
test/changelog.test.sh drives changelog_fragments (order, marker, absent
dir), changelog_fragment_problem (every rule, file named each time), and
changelog_assemble (both shapes, canonical order, mixed-shape refusals).
test/changelog-assemble.test.sh drives the CLI against constructed trees:
exact-byte writes, provably read-only --check, every refusal from the
spec, the publisher/assembler round trip, and idempotence.

Closes #114.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 08:28:15 +00:00
codex-bot-andresmgsl
ce27861821 test: cover absent Unreleased section 2026-07-24 00:26:48 +00:00
codex-bot-andresmgsl
69410723bd fix: reject entry-less release notes 2026-07-23 23:44:51 +00:00
codex-bot-andresmgsl
0e489438de feat: enforce publishable changelog entries 2026-07-23 23:44:51 +00:00
codex-bot-andresmgsl
73bee80faa feat: define publishable changelog sections 2026-07-23 23:44:51 +00:00
codex-bot-andresmgsl
1d3e98497d Merge remote-tracking branch 'origin/main' into build/95-labels-blind-sweep-warning
# Conflicts:
#	CHANGELOG.md
#	test/labels-reconcile.test.sh
2026-07-23 23:15:08 +00:00
codex-bot-andresmgsl
970d58b2c6 test: prove blind sweeps leave PRs untouched 2026-07-23 23:13:24 +00:00
codex-bot-andresmgsl
2c57216a56 fix: surface wholly blind label sweeps 2026-07-23 23:12:30 +00:00
claude-bot-andresmgsl
d76d3b6136 test: keep the bootstrap probes shellcheck-clean
CI's shellcheck gate treats info findings as red. The gh() stubs paired
with bootstrap_labels are reached only through run's "$@", which
shellcheck cannot trace (the older probes stub reconcile_pr, which calls
gh directly), so they carry reasoned SC2317 directives; the LABELS.md
doctrine parse carries SC2016 for its literal backticks. Probes now live
in named functions, matching the house *_probe() pattern.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 21:18:46 +00:00
claude-bot-andresmgsl
019ed5b68e test: pin bootstrap retirement against absence, refusal and set -e
Registry-vs-LABELS.md identity, happy path, missing label, one-name 403,
DRY_RUN narration, and the executed-subprocess dispatch (#91's lesson: a
sourced probe cannot see set -e). Cron and pull_request_target delete
nothing. Verified red without the guard: the unguarded dispatch dies on
the FIRST absent label, one delete of six attempted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 21:13:07 +00:00
claude-bot-andresmgsl
c39b78959d fix: stand down with exit 0 on non-mint issue arrivals
reconcile_opened_issue's two early exits were bare returns, which carry
the failed guard's status into the executed script's set -e — every
triage-authored mint killed the labels run before one issue was
reconciled (#91, 4/4 observed). The stand-downs now say return 0; a
genuine failure on the arrival path still aborts loudly.

The suite sources the script and takes the set -u-only branch, so it
was blind to this by construction. The new arrival section executes the
script as a subprocess behind a fixture-serving gh stub (the house
pattern from test/release-chain.test.sh) and covers all three arrival
outcomes plus the preserved loud-failure path; it fails against
bb37c15 with the production signature — exit 1, empty output.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 20:16:20 +00:00
codex-bot-andresmgsl
bcee821153 test: annotate nested attention assertion 2026-07-23 17:29:23 +00:00
codex-bot-andresmgsl
cb5ae0a068 test: pin attention issueflow inertness 2026-07-23 17:28:02 +00:00
codex-bot-andresmgsl
f15cb8c0c9 feat: add attention core label row 2026-07-23 17:27:24 +00:00
claude-bot-andresmgsl
a4918a5a46 test: cover the shape check and the ladder's rungs
Pure decisions (shape presence, rung boundaries, Default: parse for wording
only), sweep probes for every AC path (malformed-once, conforming silence,
rungs despite activity, cron progression, missed-moment skip, re-flag
episode, unreadable comment list, malformed+rung same pass), and the
existing nudge fixtures updated to conforming escalations with pre-seeded
rung markers so each probe observes one behavior alone.

Part of #73.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:49:31 +00:00
codex-bot-andresmgsl
5216369e7e test: cover offsite nudge integration 2026-07-23 13:19:11 +00:00
codex-bot-andresmgsl
bc3c1bd5cf feat: nudge resolved offsite claims 2026-07-23 13:17:39 +00:00
codex-bot-andresmgsl
4b7747a2f5 test: keep offsite fixture shellcheck-clean 2026-07-23 12:48:59 +00:00
codex-bot-andresmgsl
6a9b501e05 feat: exempt offsite claims from reclaim clock 2026-07-23 12:48:04 +00:00
claude-bot-andresmgsl
8203f081ea test: missing-fixture gh stub applies the caller's --jq; pin LC_ALL=C
Real 'gh api --jq .[].created_at' on an empty collection emits no lines;
the stub printed a literal '[]', which under byte-wise collation sorts
after ISO-8601 timestamps and poisoned the PR-surface probe's
last_activity. Route the synthesized empty array through the same jq
projection as a present fixture, and pin the test's collation so the
verdict cannot flip with the runner's ambient locale.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:25:24 +00:00
claude-bot-andresmgsl
c4079ea37c test(labels): surface-level ruling contracts on both reconcilers
Issue side: invariant-1 composition, the reclaim clock stopping under a
pending ruling (with a flag-free reclaim control), the stale heal, label
churn invisible to the activity clock, the surface-level nudge reset, and
no edit anywhere naming the flag. PR side: the wired nudge riding the
stale sweep's activity computation, one nudge across two sweeps, #51's
stale skip intact.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:25:05 +00:00
claude-bot-andresmgsl
a40e42544e feat(labels): wire the ruling pass into both reconcilers + lib test suite
Issue side: the claim-reclaim clock stops under a pending ruling (the
decision still sees an unassigned claim), an already-applied stale heals
off, and reconcile_ruling runs for any flagged issue on any queue state.
PR side: reconcile_ruling rides the (#51) stale section's real-activity
computation. test/ruling.test.sh pins the window boundaries, newest-event
anchoring, per-event marker scoping, the markerless nudge reset, the
unreadable-timeline rule, and that no scenario writes a label.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 12:25:05 +00:00
Daniel Marin
cf69d8ce9e
Merge pull request #60 from claude-bot-andresmgsl/build/58-runner-isolated
feat(guards): actions/runner-isolated — no pull_request-triggered job on a self-hosted runner
2026-07-23 13:24:41 +01:00
claude-bot-andresmgsl
179cd0808b test(guards): runner-isolated fixture matrix — 12 spec rows plus the block-sequence cases (#58) 2026-07-23 12:03:55 +00:00
codex-bot-andresmgsl
3935bf82d9 test: pin cross-repo reconciliation contract 2026-07-23 11:40:55 +00:00
codex-bot-andresmgsl
bc099eb4e2 fix: guard cross-repo issue references 2026-07-23 11:38:14 +00:00
codex-bot-andresmgsl
43092576ef fix: harden issueflow reconciliation edges 2026-07-23 10:49:36 +00:00
codex-bot-andresmgsl
70db91fa1a fix: wire dogfood issue reconciliation 2026-07-23 10:47:30 +00:00
codex-bot-andresmgsl
d0f1a43064 test: pin injected staleness boundary 2026-07-23 10:31:15 +00:00
codex-bot-andresmgsl
1030634b09 test: inject issue-flow staleness clock 2026-07-23 10:31:15 +00:00
codex-bot-andresmgsl
1532f22eb7 fix: parse live issue dependency shapes 2026-07-23 10:31:15 +00:00
codex-bot-andresmgsl
a811da8b4f fix: enforce triage author only on issue arrival 2026-07-23 10:31:15 +00:00
codex-bot-andresmgsl
cbb0fb5eee test: cover stale unassigned claims 2026-07-23 10:31:15 +00:00
codex-bot-andresmgsl
8174080c9d feat: reconcile the issue work queue 2026-07-23 10:31:15 +00:00
claude-bot-andresmgsl
6db45587ed test(labels): needs-ruling contract — exclusion not latch, never a blocker, sweep-proof, stale-exempt (#51)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 00:47:59 +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
85d4eb3770 fix: refuse non-regular nodes everywhere; machine-verify the mirror README
Round 1 (PR #43): codex-bot + kimi-bot reproduced cp writing through a
committed symlink and cmp/find resolving through or skipping link nodes —
both modes now refuse any non-regular node (.ceremony itself, anything
under it, the root AGENTS.md incl. dangling links and non-file nodes)
before touching the tree. kimi-bot also found .ceremony/README.md was
machine-written but never machine-verified: --check now cmps it against
the generated text (missing or drifted -> red). 22 regression rows; every
symlink row asserts the victim untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 21:59:37 +00:00
claude-bot-andresmgsl
40fa216e8b test: docs-sync contract suite — 37 rows, offline via --source
Fake source trees (not the real five docs) so a hardcoded list fails;
consumer trees per pin shape, including the commented-pin row ceremony's
own release.yml header motivates. Also fixes the EXIT-trap exit-status
clobber the smoke run surfaced.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 21:40:49 +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
7424ef21bf test: changelog-monotonic contract suite — constructed git histories
Every case from #6's test list: the documented-flow passes (insert-above,
the stamp, prose-only), the box#122 deletion shape, the box#118 duplicate
(proven to run before every history gate, the box#143 ordering), rc
distinctness, both STRICT degradations, the file-first-added edge, the
vacuous push-to-main shape, and the action's env wiring.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 21:11:46 +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
Daniel Marin
1c8992f2fd
Merge pull request #33 from claude-bot-andresmgsl/build/5-changelog-armed
feat: actions/changelog-armed — the version-keyed arming guard
2026-07-22 20:31:15 +01: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
0699bed2a4
Merge pull request #31 from claude-bot-andresmgsl/build/8-decide-lib
feat: lib/decide.sh — the merge door's decision, pure and exhaustively tested
2026-07-22 20:17:57 +01:00
Daniel Marin
366d08e2d4
Merge pull request #29 from codex-bot-andresmgsl/build/4-changelog-section
feat: add canonical changelog section extractor
2026-07-22 20:12:01 +01:00
claude-bot-andresmgsl
87dc9d7728 feat: lib/decide.sh — the merge door's decision, pure and exhaustively tested
The six-row decision table from issue #8 as a pure script: the workflow
gathers facts (VER, BASE_VER, RELEASED, LABELED), this script decides.
Notices/refusals ported near-verbatim from box's decide step, de-repo-ified;
design lineage box#96 / rig#47 / cast#111.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 18:59:29 +00:00
codex-bot-andresmgsl
8b27cf61db fix: preserve changelog wrapper CLI contract 2026-07-22 18:56:25 +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
2b66ecb1ba feat: add canonical changelog section extractor 2026-07-22 18:38:35 +00:00