Skip to content

chore: release main - #4833

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main
Open

chore: release main#4833
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

🤖 I have created a release beep boop

pipeline-cli: 0.3.0

0.3.0 (2026-08-13)

Features

  • pipeline: a held child is born assigned, and the plan gate verifies the barrier it cannot flip away (#4693) (#4991) (4f49c62)
  • publish: resolve the release tag to a published package (#4801) (#4817) (ec8a00a)
  • roadmap: declare the campaign in exclusive focus as a guarded ## Focus section (#5012) (#5084) (e2f877d)

Bug Fixes

  • ci: skill-gh-lint walks every plugin dir, and reds when it does not (#5004) (#5037) (240d10f)
  • hooks: dispatch the worktree sweep instead of running it on SessionStart (#4998) (#5065) (e7474ab)
  • pipeline-cli: a refused invocation is not a verdict — bad flags exit 4, not stop (#5072) (#5091) (b757a65)
  • pipeline-cli: the subprocess-budget guard scans every workspace member, not just its own package (#4858) (#5014) (5e1259d)
  • pipeline: a banked §CP PR with no ticking approval-watcher now reds (#4754) (#4983) (724eea7)
  • scratchpad: publish the owner stamp atomically so a lost race is exit 4, not exit 6 (#4864) (#4877) (7d58890)
fabrika-cli: 0.2.0

0.2.0 (2026-08-13)

Features

  • fabrika-cli: fabrika spend read — the token meter gets a CLI surface (#5007) (#5044) (9cce5d4)
  • fabrika-cli: build claim learns a purpose axis — plan/gate claims skip the audience fence (#5218) (90f3ceb)
  • fabrika-cli: build the epic verb group the build-epic contract specifies (#5092) (#5110) (f945f96)
  • fabrika-cli: carry a run's pinned model and arm onto the capture manifest (#4996) (#5145) (1f8e83b)
  • fabrika-cli: generate the wire-formats index from the registry, and red when it drifts (#4968) (#5124) (5842cd4)
  • fabrika-cli: implement the wayfinding contract's map verbs (#5342) (9dd113d)
  • fabrika-cli: let ship gate require the governance namespace (#5206) (ef3e090)
  • fabrika-cli: make the governance verdict a floor ship gate raises from the diff (#5036) (#5231) (8686d64)
  • fabrika-cli: normalize the eval --model value to one canonical id (#5158) (#5210) (8bd0a81)
  • fabrika-cli: one review eval stage, discriminated and graded per surface (#4979) (#5045) (39f108b)
  • fabrika-cli: one command answers what fabrika's runs cost, from the durable ledger (#5010) (#5114) (b2a8b81)
  • fabrika-cli: persist every completed run's spend to a durable append-only ledger (#5106) (4157921)
  • fabrika-cli: publish the ruled KEEP corpus as an enumeration (#4823) (#4837) (c84046e)
  • fabrika-cli: record each completed eval run's spend, attributed to the run (#5008) (#5055) (b2cd2c1)
  • fabrika-cli: the ship verb group — thirteen verbs the merge path stands on (#5029) (#5064) (eff3464)
  • fabrika-cli: the wire verb group + the acceptance-criteria schema module (#4942) (#4953) (03135b9)
  • fabrika-cli: the eight review verbs the /review contract specifies (#4989) (cbcdf05)
  • fabrika-cli: the fourteen build verbs the /build contract specifies (#4988) (#5047) (61d8b60)
  • fabrika-cli: the report's cell key carries the review surface (#4980) (#5062) (d3e3af5)
  • fabrika-cli: the review stage's third surface — a skill entry graded per rigor check (#5038) (#5095) (59616db)
  • fabrika-cli: the review-ui verb group — render, post, note (#5147) (60d21c3)
  • fabrika-cli: the scope-admission test — two named axes, one shared core (#5015) (#5115) (4b2866e)
  • fabrika-cli: the six plan-epic ledger verbs (#5179) (#5221) (08407ef)
  • fabrika-cli: the verdict-marker wire format, on the registry seam (#4943) (#4955) (298663c)
  • fabrika-cli: triage apply + park over one owned-facet reconcile (#4831) (#4876) (a7daf71)
  • fabrika-cli: triage claim — a race protocol where won requires positive proof (#4831) (#4871) (cc1ad85)
  • fabrika-cli: triage enrich — the verb-written marker settles re-enrichment (slice 5 of #4831) (#4922) (4dd8b2b)
  • fabrika-cli: wire the admission test into the build pool and claim seams (#5125) (1567264)
  • fabrika-cli: write the stage-admission rule and enforce it as a data test (#4981) (#5105) (3b830c9)
  • fabrika: build the six status verbs the front-door contract derives (#5214) (#5299) (c3c58af)
  • fabrika: committed scorecards, the trend co-gate and the model-churn re-run (#4680) (#5415) (19d0aa0)
  • fabrika: declare the hook surface, proven end to end by one real hook (#5074) (#5173) (e851508)
  • fabrika: implement the governance contract's seven verbs (#5199) (#5351) (5d6ee12)
  • fabrika: implement the grilling contract's five verbs (#5023) (#5341) (988c373)
  • fabrika: implement the handoff contract's four verbs (#5025) (#5350) (33680e0)
  • fabrika: implement the prototyping contract's spike verbs (#5024) (#5349) (1baa7d0)
  • fabrika: implement the six glossary verbs and register the group (#5322) (#5357) (4a22a1b)
  • fabrika: implement the write-pattern contract's five pattern verbs (#5332) (#5356) (0478bdb)
  • fabrika: port the spawn-model allowlist defence onto the fabrika hook surface (#5075) (#5201) (18690ca)
  • fabrika: the eval post verb — one record, one PR comment per (head, cell) (#5411) (#5425) (0ce40b8)
  • fabrika: the four plan verbs the check-epic-plan contract specifies (#5107) (#5134) (b6334b0)
  • fabrika: the graded axis at five runs, a median, and a head-bound eval record (#4678) (#5401) (c1ec393)
  • fabrika: the ruled bar as a fail-closed merge gate (#4681) (#5432) (3b17aea)
  • fabrika: the triage group's shared substrate (slice 1a of #4831) (#4867) (c3cc34c)
  • fabrika: the triage split verb — create-once on (back-reference AND title) (#4873) (74897d5)
  • fabrika: the ui verb group — manifest, law, render, golden, evidence (#5061) (#5149) (d1dcd75)
  • fabrika: the v1 cost baseline on the incident corpus — measured, committed, comparable (#5404) (bd01abf)
  • fabrika: triage kill — close an agent-filed issue not-planned over four gated writes (slice 6 of #4831) (#4870) (764ef70)
  • fabrika: triage queue/provenance/homes + report dedup --exclude (slice 1b of #4831) (#4872) (f3f965e)

Bug Fixes

  • fabrika-cli: bind review deviations and review post to the commit they name (#5142) (4ddae22)
  • fabrika-cli: build eligible names every open edge, and every unreadable input is UNKNOWN (#4920) (#5135) (a1e0be1)
  • fabrika-cli: cut the excess-operand CLI suite to 5 spawns and take the network out of it (#4857) (36d96c5)
  • fabrika-cli: derive a wire row's brand witnesses from its value type (#4969) (#5053) (e5edb8a)
  • fabrika-cli: drop the unreachable cycle-doc trigger from plan read's exit-11 help (#5136) (#5152) (7a65c3f)
  • fabrika-cli: emit the committed scorecard the way biome formats it (#5428) (#5433) (34ec58b)
  • fabrika-cli: give every leaf verb a scannable help list row (#5208) (#5368) (c14e233)
  • fabrika-cli: give every verb group a scannable root help row (#5449) (9ba56b6)
  • fabrika-cli: key review post's upsert on the carrier, so an advisory re-post edits (#4992) (#5035) (668d352)
  • fabrika-cli: make a LEDGER_ROW_VERSION bump red the below-current guard (#5116) (#5128) (eb49f76)
  • fabrika-cli: provenance.json publishes 66, not the discredited 74 (#4838) (#4852) (edb0639)
  • fabrika-cli: read the pattern fixture bytes from the fixtures, never copy them (#5362) (#5392) (bfd12d6)
  • fabrika-cli: record which session produced which graded run (#5439) (#5445) (d40473d)
  • fabrika-cli: refuse an operand a leaf verb never declared (#4828) (#4839) (8919513)
  • fabrika-cli: refuse an unresolvable command path instead of answering it with help (#4822) (#4827) (4e3adf2)
  • fabrika-cli: refuse to delegate when the invoked copy is in another checkout (#4956) (#4963) (41ee5c0)
  • fabrika-cli: scope the exit-code alignment guard to the shipped verb registry (#5213) (#5295) (830b041)
  • fabrika-cli: seat a truncated paginated read as UNKNOWN, never a short list (#5127) (#5146) (2c00707)
  • fabrika-cli: stage a per-run working directory for each graded candidate (#5441) (754e629)
  • fabrika-cli: stop refusing review scope on GitHub's declared file count (#5154) (#5163) (d82aa69)
  • fabrika-cli: take review deviations' completeness denominator from git, not GitHub (#5157) (#5168) (adcdef8)
  • fabrika-cli: take review diff's completeness denominator from git, not GitHub (#5139) (#5153) (15a5277)
  • fabrika-cli: teach the diff parser git's quoted file headers (#5167) (d5592a9), closes #5159
  • fabrika: a readable-but-empty .decisions/ mints 0001 instead of exiting 5 (#5254) (#5297) (0dab074)
  • fabrika: build check's green tells the truth about what it read (#5304) (#5325) (0f9fe61)
  • fabrika: decouple a status config row's presence from its id token (#5298) (#5395) (eb53442)
  • fabrika: delete the browser-provisioning CI skip and cache the browser instead (#5169) (#5336) (b2d33e6)
  • fabrika: derive every published KEEP-corpus figure from the enumeration (#4823) (#5177) (662a430)
  • fabrika: give the adr and spend verb groups one exit table each (#5309) (a100d93)
  • fabrika: make the ship contract and src agree with the eight ruled clauses (#5161) (#5185) (066b9c4)
  • fabrika: plan-epic claims the epic with --purpose plan (#5217) (#5291) (491147c)
  • fabrika: prove push containment on the force path, never on the lease alone (#5289) (2d78b05), closes #5222
  • fabrika: read review scope and review diff out of the commit they name (#5117) (#5123) (b545ea0)
  • fabrika: read the operator set as a second agent signal in triage provenance (#5112) (#5130) (cd0dd19)
  • fabrika: refuse a build check diff no surface validates, never green it (#5229) (#5287) (114e6a5)
  • fabrika: refuse a catalog this reader cannot read, instead of answering (#5361) (#5390) (6c77f76)
  • fabrika: review post stamps its write time and upserts the newest comment (#5048) (#5058) (a6bf6c5)
  • fabrika: scope build check's unvalidated list to the surface that ran (#5288) (#5300) (5f57fcf)
  • fabrika: seat adr next/resolve's five proven refusals in the group table (#5340) (#5396) (292b1b9)
  • fabrika: seat report dedup's two exit codes in the group table (#5296) (#5382) (9c0e905)
  • fabrika: the surface anchor refuses an absent class, not a present other one (#5301) (#5321) (ee4b97f)
  • pipeline-cli: the subprocess-budget guard scans every workspace member, not just its own package (#4858) (#5014) (5e1259d)

Reverts


This PR was generated with Release Please. See documentation.

@usirin

usirin commented Aug 3, 2026

Copy link
Copy Markdown
Member

FOUNDER RULING — this PR stays open and accumulates. DO NOT MERGE. (2026-08-03, engineering-manager)

Recording the ruling on the PR itself so any lane, shipper, engine or future session that reads this PR sees it here rather than needing session context.

Do not merge this PR. More fabrika work is still to land; the standing Release PR is left to grow, and the first release is cut when the founder says so. That decision is tracked on #4804 (ready-for:human), not here.

This is designed behaviour, not a queue backing up

Verified against the committed config:

  • .github/workflows/release-please.yml runs on push to main, and its job is literally named "derive versions and groom the standing Release PR" — so every merge to main re-runs it and re-grooms this same PR.
  • release-please-config.json sets separate-pull-requests: false, so one PR carries both packages.
  • The PR carries release-please's own autorelease: pending label, which is the marker for exactly this state.

The consequence that matters for anyone reading this PR

The versions currently proposed are NOT the versions that will ship.

Right now it proposes pipeline-cli 0.2.1 → 0.3.0 and fabrika-cli 0.1.0 → 0.1.1. The fabrika bump is fix-level only because only fixes have landed so far — the first feat: that merges moves it to 0.2.0, and the changelog grows with every merge.

Do not quote these numbers from an earlier read. Re-read them at merge time.

Two hazards that bind at cut time, not now

  1. Trusted Publisher must be confirmed for BOTH packages on npmjs.com, with the environment field empty. This is a web-UI-only fact — it is not readable from the npm CLI (npm view --json exposes no trusted-publisher or provenance key), so it must be eyeballed rather than asserted by any agent. Note there is a live disagreement on whether @kampus/fabrika-cli is registered; it is flagged for a human to check and no agent should treat either side as settled.
  2. Expect TWO publish runs, since the single PR carries both tags. If @kampus/fabrika-cli is not registered, its run will 403 at OIDC after install+build — a late-looking failure that is correct fail-closed behaviour, not a defect.

What is already proven good about this PR

It created per-package packages/*/CHANGELOG.md files and left the root CHANGELOG.md untouched — the ADR 0069 boundary (release-please owns per-package changelogs, changelog.yml owns the root) held on its very first fire. That is the strongest available evidence the wiring from #4803/#4821 is correct.

npm versions are immutable, which is why nothing here is merged on an agent's judgment.

@usirin

usirin commented Aug 3, 2026

Copy link
Copy Markdown
Member

CORRECTION to my ruling comment above — the Trusted Publisher dispute is SETTLED, and I was wrong (2026-08-03, engineering-manager)

My comment above records the @kampus/fabrika-cli Trusted Publisher registration as disputed and unresolved, and warns to expect a 403. That is wrong. The registration exists. Amending rather than rewriting, per the append-only convention.

The evidence, which was on the board the whole time — issue #4800, comment at 2026-08-03T04:22:42Z, pasting npm's own confirmation string "Successfully added new Trusted Publisher connection":

Field Value
Publisher GitHub Actions
Repository kamp-us/phoenix
Workflow filename publish.yml
Environment name empty — deliberately
Permissions npm publish, npm stage publish

#4800 is closed / completed, closed 04:35:00Z, with all four acceptance criteria discharged against pasted evidence.

What this changes

  • Hazard 1 in my comment above is discharged, not pending. Both @kampus/pipeline-cli and @kampus/fabrika-cli are registered against this repo and the exact filename publish.yml, environment empty — which is what the workflow requires, since publish.yml declares no environment: key.
  • There is no expected 403. My earlier claim that the fabrika half would 403 at OIDC after install+build was false. Both publish runs should succeed. Hazard 2 (two publish runs, since one PR carries both tags) still stands — but expect two GREEN runs, not one green and one red.

Where the error came from, since it propagated

A review gate inferred the registration was absent — reasoning that Trusted Publisher binds per package to (repo, workflow filename) and fabrika was newly published. It could not read npmjs.com, because Trusted Publisher status is not exposed by the npm CLI (npm view --json carries no trusted-publisher or provenance key). I relayed that inference onward as an observed fact, and it reached three separate artifacts before another gate caught it by reading #4800.

The standing constraint that still binds: the environment field is empty deliberately. If a future change adds an environment: key to publish.yml, the registration must be edited in the same change or publishing silently breaks with a 403 that looks like nothing is wrong.

Unchanged: do not merge this PR. The founder ruling above stands — it accumulates until the first cut is called on #4804.

@usirin

usirin commented Aug 3, 2026

Copy link
Copy Markdown
Member

SECOND CORRECTION — "expect two green runs" was an over-correction. REGISTERED IS NOT EXERCISED. (2026-08-03, engineering-manager)

My correction above swung too far. It said "Both publish runs should succeed" — asserting an outcome nobody has observed. Amending again rather than rewriting; the two comments above stand as the record.

The precise state, verified from npm view --json (no web UI needed)

An OIDC / Trusted-Publishing publish stamps attestations on the artifact. A manual token publish does not. Comparing the two packages is what answers the question:

@kampus/pipeline-cli  dist: [attestations, fileCount, integrity, shasum, signatures, tarball, unpackedSize]
@kampus/fabrika-cli   dist: [              fileCount, integrity, shasum, signatures, tarball, unpackedSize]

Corroborated by run history: publish.yml has two green release runs — pipeline-cli v0.2.0 (2026-07-23) and v0.2.1 (2026-07-24) — and zero for fabrika, because fabrika-cli@0.1.0 was a manual bootstrap publish under a granular token, exactly as #4800 step 3 describes.

Package Trusted Publisher Evidence
@kampus/pipeline-cli registered and PROVEN BY EXERCISE two successful OIDC runs + attestations on the artifact
@kampus/fabrika-cli registered but NEVER EXERCISED npm's confirmation message on #4800; no run has used it

The first fabrika release will be the first time that registration is actually used. Its success is expected, not observed.

Why the distinction is worth the words

A registration is a configuration claim; an attestation is an observed result. Every error on this thread has been one mistaken for the other — first a gate inferring the registration was absent, then me asserting it would 403, then me asserting both runs would be green. Three claims about an outcome, none of them observed.

Not alarming, and here is the honest risk shape: the failure mode is fail-closed. A 403 publishes nothing, so no version number is burned, and re-running the workflow after fixing the registration recovers cleanly. The immutability hazard does not apply to a failed publish.

Standing hazard, unchanged and still real

The environment field is empty deliberately, because .github/workflows/publish.yml declares no environment: key. If a future change adds one, the registration must be edited in the same change or publishing silently breaks with a 403 that looks like nothing is wrong.

Unchanged: do not merge this PR. The founder ruling stands; it accumulates until the cut is called on #4804.

usirin added a commit that referenced this pull request Aug 9, 2026
…-path pattern doc (#4805)

Cutting a release stopped being knowledge held in an issue thread. Two surfaces,
each with its own job per the repo doc contract:

- `DEVELOPMENT.md` gains a `## Releasing` section for a builder who has never cut
  one: what derives a version (path routing, not commit scope), what the standing
  Release PR is, what to check before merging it, what the merge does (tags →
  publish.yml → registry), and how to read a red publish run.
- `.patterns/release-path.md` records the shape of the path and each constraint a
  future change must not break, with its enforcement site or ruling — and says so
  plainly where a constraint has no live ADR home.
- `.patterns/index.md` lists the new doc under CI / pipeline.

Both point at ADR 0239 for the reasoning rather than restating it. Grounded
against the landed artifacts (release-please.yml, publish.yml, the config and
manifest, PR #4833), not against the epic's prose.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 18 times, most recently from dbc89c4 to f5113de Compare August 10, 2026 00:58
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 5 times, most recently from 5945374 to e4c0648 Compare August 10, 2026 06:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

1 participant