feat(b6-7-harness): promote event-driven-eu to stable/scaffoldable#46
Merged
Conversation
The event-driven-eu archetype has been fully scaffolded but inert since B.6.2 — `forge init --archetype event-driven-eu` refused with exit 3 because its 1.0.0 schema was stage:candidate / scaffoldable:false, gated on this promotion brick (ADR-B6-1-002, mirroring the B.7.6 ai-native-rag and B.8.14-C2 flips). This change ships the promotion gate and performs the suite-gated flip. The new suite `.forge/scripts/tests/b6-7.test.sh` (36 tests) proves the assembled archetype end-to-end before the flip: Tier A re-runs every sibling B.6 harness (b6-1/2/3/4/5/6/9/10) as a superset gate; Tier B adds the cross-brick coherence the per-brick siblings do not check (the EventService Publish/ReadStream proto with events.v1 versioning and idempotency, the buf.gen Rust and TS codegen targets, buf.yaml lint and breaking governance, the AsyncAPI 3.1 contract, full scaffold-plan to tree coverage, the NATS-idempotency / inbox / append-only event-store / Temporal activity-only / saga-compensation conformance markers, pin discipline, the gated wrapper and dispatch entry, and the bin-server axum surface with its dependency-injection wiring); Tier C runs the live build path; Tier D guards the promoted state and the committed snapshot. The live legs were run genuinely live on a buf 1.70.0 + cargo 1.97.0 host and recorded honestly in .forge/research/b6-7-live-codegen.md: `cargo test --workspace` passes on the rendered event-driven-eu backend, verifying the B.6.2 verify-then-pin pins (async-nats 0.49.1, sqlx 0.9, temporalio-sdk/client 0.5.0) resolve and build, and `buf build` compiles the EventService contract. Full `buf generate` plugin codegen is deliberately not a gate: the neoeinstein-tonic remote plugin cannot read prost's sibling output in buf's isolated remote-plugin sandbox (a systemic issue shared with the flagship and ai-native-rag), and the harness does not green-wash that failure. The flip — performed last, only after the suite was green — sets the schema stage candidate to stable and scaffoldable false to true, flips the dispatch-table status to stable, and inverts the sibling held-guards in lockstep (b6-1 T-005/T-006/T-L2-001, b6-2 T-006/T-009/T-010, and b6-6 T-013 which asserts the schema state without an event-driven-eu literal). It adds the cli-trust scaffold-matrix fixture required once the archetype is non-candidate, and a committed deterministic snapshot for `forge upgrade` BASE recovery. CI: b6-7 is registered in the harness array at --level 1; its live legs reuse the existing harness-rust job as a --level 1,2 step (no new job, so no job-count cascade). The forge-ci line budget is bumped 380 to 400 in lockstep across g1, c1, t5-1, t5-otel-live-run, forge-ci.md and forge-self-ci.md. Verified: b6-7 36/36 (Tier C live), the full 75-harness forge-ci sweep 75/0, verify.sh 556/0, constitution-linter 82/0, validate-foundations PASS, a live `forge init --archetype event-driven-eu` renders (rc 0, no exit 3), and the vitest archetypes-smoke scaffold matrix passes. No constitution, standard-version, or other-archetype edit; the frozen full-stack trees and archetype.schema.json are byte-unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The B.6.7 promotion gate for the
event-driven-euarchetype — a structural clone of the merged B.7.6 (ai-native-rag) promotion, adapted to the NATS JetStream + Temporal saga + AsyncAPI + Postgres event-store stack.Since B.6.2 the archetype has been fully scaffolded but inert:
forge init --archetype event-driven-eurefused with exit 3 because the1.0.0schema wasstage: candidate/scaffoldable: false, gated on this brick (ADR-B6-1-002). This PR ships the ≥35-test promotion suite that proves the assembled archetype end-to-end, then performs the suite-gated flip tostable/scaffoldable: true.What landed
.forge/scripts/tests/b6-7.test.sh(36 tests) — Tier A aggregation of the 8 sibling B.6 harnesses (b6-1/2/3/4/5/6/9/10); Tier B net-new L1 e2e coherence (EventService proto, buf.gen Rust+TS targets, buf.yaml governance, AsyncAPI 3.1, scaffold-plan↔tree coverage, NATS/eventstore/saga conformance, pins, wrapper/dispatch, bin-server axum+wiring); Tier C live build (buf build+cargo test --workspace); Tier D promotion guard + committed snapshot.candidate→stable/false→true+ header reword; dispatch-tablestatus: candidate→stable; sibling held-guards inverted in lockstep (b6-1T-005/006/L2,b6-2T-006/009/010,b6-6T-013 — a schema guard with noevent-driven-euliteral that a name-grep blast-radius scan misses); newcli/test/e2e/archetype-fixtures/event-driven-eu.yml; committed deterministic snapshot.forge/scaffold-snapshots/event-driven-eu/1.0.0.tar.gz(~1.0 MB).b6-7.test.sh --level 1registered in the harness array; its live legs reuse the existingharness-rustjob as a--level 1,2step (no new job → no job-count cascade; diverges from b7-6's dedicated job — ADR-B6-7-005). forge-ci line budget 380→400 bumped in lockstep acrossg1/c1/t5-1/t5-otel-live-run+forge-ci.md+forge-self-ci.md.Honest note on live codegen (ADR-B6-7-008)
Full
buf generateis not a gate: theneoeinstein-tonicremote plugin can't read prost's siblingevents.v1.rsin buf's isolated remote-plugin sandbox (systemic — shared with the flagship, whose proto tree is empty, and with ai-native-rag, whose b7-6 C02 green-washes it via a loose offline-grep). b6-7 gates onbuf build(contract compiles) +cargo test(the real build proof — the workspace doesn't compile the generated stubs) and does not green-wash the tonic failure. The archetype'sbuf.gen.yaml.tmplis left pristine (out of a promotion-gate brick's scope). See.forge/research/b6-7-live-codegen.md.Test plan (all run locally, buf 1.70.0 + cargo 1.97.0 present)
b6-7.test.sh --level 1,2→ 36/36 (Tier C live:buf build✓,cargo test --workspace✓)b6-1 --level 1,219/0,b6-2 --level 110/0,b6-6 --level 113/0g114/0,c130/0,t5-117/0,t5-otel-live-run8/0 (forge-ci.yml 384 lines < 400)verify.sh556 / 0 / 1 pre-existing WARN → PASS;constitution-linter.sh82 / 0 → PASS;validate-foundations.shPASS (schema stage=stable)forge init --archetype event-driven-eu→ rc 0 (renders; no exit 3); vitestarchetypes-smoke→ scaffolds event-driven-eu + file matrix + task --list-all ✓archetype.schema.json+ theevent-driven-eutemplate tree byte-unchangedCI budget change
NFR-CI-002workflow line budget 380 → 400 (b6-7 harness entry + the harness-rust--level 1,2step). Job count unchanged (7).🤖 Generated with Claude Code