Skip to content

feat(b6-7-harness): promote event-driven-eu to stable/scaffoldable#46

Merged
Bogala merged 1 commit into
mainfrom
b6-7-harness
Jul 12, 2026
Merged

feat(b6-7-harness): promote event-driven-eu to stable/scaffoldable#46
Bogala merged 1 commit into
mainfrom
b6-7-harness

Conversation

@Bogala

@Bogala Bogala commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Summary

The B.6.7 promotion gate for the event-driven-eu archetype — 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-eu refused with exit 3 because the 1.0.0 schema was stage: 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 to stable / 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.
  • The flip (final, suite-gated): schema candidate→stable / false→true + header reword; dispatch-table status: candidate→stable; sibling held-guards inverted in lockstep (b6-1 T-005/006/L2, b6-2 T-006/009/010, b6-6 T-013 — a schema guard with no event-driven-eu literal that a name-grep blast-radius scan misses); new cli/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).
  • CI: b6-7.test.sh --level 1 registered in the harness array; its live legs reuse the existing harness-rust job as a --level 1,2 step (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 across g1/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 generate is not a gate: the neoeinstein-tonic remote plugin can't read prost's sibling events.v1.rs in 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 on buf 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's buf.gen.yaml.tmpl is 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,236/36 (Tier C live: buf build ✓, cargo test --workspace ✓)
  • Full forge-ci harness sweep (75 entries, mirror of the CI loop) → 75 PASS / 0 FAIL
  • Inverted siblings: b6-1 --level 1,2 19/0, b6-2 --level 1 10/0, b6-6 --level 1 13/0
  • Budget/shape lockstep: g1 14/0, c1 30/0, t5-1 17/0, t5-otel-live-run 8/0 (forge-ci.yml 384 lines < 400)
  • verify.sh 556 / 0 / 1 pre-existing WARN → PASS; constitution-linter.sh 82 / 0 → PASS; validate-foundations.sh PASS (schema stage=stable)
  • Live forge init --archetype event-driven-eurc 0 (renders; no exit 3); vitest archetypes-smokescaffolds event-driven-eu + file matrix + task --list-all
  • No constitution / standard-version / other-archetype edit; frozen full-stack trees + archetype.schema.json + the event-driven-eu template tree byte-unchanged

CI budget change

NFR-CI-002 workflow line budget 380 → 400 (b6-7 harness entry + the harness-rust --level 1,2 step). Job count unchanged (7).

🤖 Generated with Claude Code

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>
@Bogala Bogala merged commit a6cff90 into main Jul 12, 2026
7 checks passed
@Bogala Bogala deleted the b6-7-harness branch July 12, 2026 13:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant