feat(b6-5): per-layer CI templates for event-driven-eu (forge-events/forge-workflows/forge-infra)#40
Merged
Merged
Conversation
Spec pipeline for the event-driven-eu per-layer CI templates (B.6.5, docs/new-archetypes-plan.md §6.1). FR-B6-CI-* / NFR-B6-CI-* / ADR-B6-CI-*. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Asserts the three workflow templates exist, parse as YAML, reference the archetype's Task targets, scope paths-filter correctly, keep the temporal-sdk leg opt-in/non-blocking, end in the Forge gates, and are registered in the scaffold-plan. L2 renders via overlay.sh and checks no .tmpl/<placeholder> survives. RED before the templates exist. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
forge-events.yml (events+eventstore crates, task backend:lint + crate-scoped cargo test -p), forge-workflows.yml (saga crate, default features; opt-in non-blocking saga-temporal-sdk job gated on workflow_dispatch), forge-infra.yml (NATS config lint via nats-server -t, task asyncapi:validate, Postgres migration applied twice against postgres:17-alpine). dorny/paths-filter@v3 per layer; Forge gates last; no continue-on-error; images pinned to the archetype's nats:2.10 / postgres:17. Registered in scaffold-plan.yaml (substitute:true) so b6-2.test.sh plan-to-tree coverage stays green. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…s merge Register b6-5.test.sh (--level 1,2) in forge-ci.yml; CHANGELOG [Unreleased] entry; append the B.6.5 archived section to .forge/specs/event-driven-eu.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… + b6-4-hermes-async) Two sibling B.6 bricks merged first (#39 standards, #42 Hermes-Async) and touched the same shared files this lane also touches. Conflicts in: - .forge/specs/event-driven-eu.md (both sides appended an archived-brick section at the same point) — kept both sections, B.6.4 before B.6.5. - .github/workflows/forge-ci.yml (harness registration insertion point) — merged into one consolidated b6-1..b6-5 block. - CHANGELOG.md ([Unreleased] entries) — kept both bullets, B.6.4 before B.6.5. Re-ran b6-5 (10/10), b6-4 (19/19), b6-3 (7/7), t5-1.test.sh CI line-budget (17/17, 377/380 lines), verify.sh (531/0), constitution-linter.sh (PASS 78/0) — all green post-merge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bogala
added a commit
that referenced
this pull request
Jul 12, 2026
… CI line budget Three sibling B.6 bricks merged first (#39 standards, #42 Hermes-Async, #40 CI templates) and touched the same shared files. Conflicts in: - .github/workflows/forge-ci.yml (harness registration insertion point) — merged into one consolidated b6-1..b6-6 block. - CHANGELOG.md ([Unreleased] entries) — kept all bullets, B.6.4/B.6.5/B.6.6 in module order. The merged forge-ci.yml landed at 381 lines, one over the NFR-CI-002/ NFR-T51-005 380-line budget (t5-1.test.sh caught it) — condensed the b6-6 harness comment from 3 to 2 lines to land exactly at 380. Re-ran b6-6 (13/13), b6-5 (9/9), t5-1.test.sh CI line-budget (17/17, 380/380 lines), verify.sh (537/0), constitution-linter.sh (PASS 79/0) — all green post-merge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bogala
added a commit
that referenced
this pull request
Jul 12, 2026
…6-6) + trim CI line budget Four sibling B.6 bricks merged first (#39, #42, #40, #41) and touched the same shared files. Conflicts in: - .forge/specs/event-driven-eu.md (both sides appended an archived-brick section at the same point) — kept both sections, reordered numerically (B.6.4, B.6.5, B.6.9). Note: B.6.3 and B.6.6 never added their own section to this consolidated spec doc (pre-existing gap, not introduced here — flagging for awareness, not fixing on their behalf). - .forge/standards/REVIEW.md (ledger entries at the same insertion point) — kept both, ordered by actual landing order (b6-3 merged before b6-9). - .forge/standards/index.yml (both sides appended entries at the same point) — kept both blocks, B.6.3 before B.6.9. - CHANGELOG.md ([Unreleased] entries) — kept all four bullets in module order (B.6.4, B.6.5, B.6.6, B.6.9). .github/workflows/forge-ci.yml auto-merged cleanly but landed at 384 lines (4 over the 380 budget, t5-1.test.sh caught it) — condensed the b7-5/b6-9 harness-registration comments from 2x3 lines to 2 lines total. Re-ran b6-9 (20/20), b7-5 (19/19), i6 (16/16), b6-3 (7/7), t5-1.test.sh CI line-budget (17/17, 380/380 lines), verify.sh (544/0), constitution-linter.sh (PASS 80/0) — all green post-merge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bogala
added a commit
that referenced
this pull request
Jul 12, 2026
… trim CI line budget Final B.6 fan-out brick. Five sibling bricks merged first (#39, #42, #40, #41, #44) and touched the same shared files. Conflicts in: - .forge/standards/REVIEW.md (ledger entries at the same insertion point) — kept all three, reordered by actual landing order (b6-3, b6-9, then b6-10 last). - .github/workflows/forge-ci.yml (harness registration insertion point) — merged into one consolidated b6-1..b6-10 block. - CHANGELOG.md ([Unreleased] entries) — kept all five bullets in module order (B.6.4, B.6.5, B.6.6, B.6.9, B.6.10). The merged forge-ci.yml landed at 382 lines (2 over the 380 budget, t5-1.test.sh caught it) — condensed two harness-registration comment blocks to free 4 lines, landing at 378/380. Re-ran b6-10 (12/12), b7-9 (15/15), i3 (18/18), i2 (14/14), t5-1.test.sh CI line-budget (17/17, 378/380 lines), verify.sh (551/0), constitution-linter.sh (PASS 81/0) — all green post-merge. This is the last of the 6 step-2 B.6 fan-out bricks (B.6.3/4/5/6/9/10). 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
Ships B.6.5 (docs/new-archetypes-plan.md §6.1): three per-layer GitHub Actions workflow templates for the
event-driven-euarchetype, scaffolded into an adopter's.github/workflows/. Mirrors thefull-stack-monorepoper-layer convention (dorny/paths-filter@v3,concurrency,permissions: contents: read, Forge gates last) adapted to the event-driven layer decomposition. Additive — the archetype schema stayscandidate/scaffoldable:false(promotion rides B.6.7); these templates are validated by rendering viaoverlay.shdirectly.forge-events.yml— gates theevents+eventstorecrates. paths-filter onbackend/events/**,backend/eventstore/**,backend/Cargo.*,shared/protos/**→task backend:lint(workspace clippy-D warnings+fmt --check) → crate-scopedcargo build/test -p events -p eventstore→ Forge gates.forge-workflows.yml— gates thesagacrate. Blocking job runstask backend:lint+cargo build/test -p sagawith default features (the pre-alphatemporal-sdkstays OFF, per ADR-B6-2-004). A separatesaga-temporal-sdkjob runscargo test -p saga --features temporal-sdkonly onworkflow_dispatch— clearly non-blocking, nocontinue-on-error.forge-infra.yml— NATS JetStream config lint (nats-server -c infra/nats/jetstream.conf -t), AsyncAPI 3.1 validation (task asyncapi:validate→ official schema), Postgres migration check (applyinit-eventstore.sqltwice againstpostgres:17-alpine— validity + idempotency) → Forge gates.Each workflow invokes the archetype's own Taskfile targets (CI == local dev), pins all actions and reuses the archetype's
nats:2.10-alpine/postgres:17-alpineimage pins, and ends inverify.sh→constitution-linter.sh. Registered inscaffold-plan.yaml(substitute: true) sob6-2.test.shplan↔tree coverage stays green. Gated by a new.forge/scripts/tests/b6-5.test.sh(9 L1 + 1 L2), registered inforge-ci.yml.Follows the Forge spec pipeline (proposal → specs → design → tasks under
.forge/changes/b6-5-ci-templates/, TDD RED→GREEN on the harness, archived with the specs merged into.forge/specs/event-driven-eu.md).Test plan
b6-5.test.sh --level 1,2→ 10/10 (9 L1 structural + 1 L2overlay.shrender-clean, valid YAML,<project-name>substituted,${{ … }}preserved).b6-2.test.sh --level 1,2→ 13/13 (plan↔tree coverage stays green after the three new.tmplentries; rendered backendcargo check).b6-1.test.sh --level 1,2→ 19/19.delivery.test.sh --level 1→ 24/24 (full-stack CI sibling unaffected).verify.sh→ 518/0 PASS;constitution-linter.sh→ OVERALL PASS (76/0, 4 pre-existing T.5 warns).forge-ci.ymlre-parses as valid YAML.🤖 Generated with Claude Code