Skip to content

feat(b6-5): per-layer CI templates for event-driven-eu (forge-events/forge-workflows/forge-infra)#40

Merged
Bogala merged 5 commits into
mainfrom
b6-5-ci-templates
Jul 12, 2026
Merged

feat(b6-5): per-layer CI templates for event-driven-eu (forge-events/forge-workflows/forge-infra)#40
Bogala merged 5 commits into
mainfrom
b6-5-ci-templates

Conversation

@Bogala

@Bogala Bogala commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Ships B.6.5 (docs/new-archetypes-plan.md §6.1): three per-layer GitHub Actions workflow templates for the event-driven-eu archetype, scaffolded into an adopter's .github/workflows/. Mirrors the full-stack-monorepo per-layer convention (dorny/paths-filter@v3, concurrency, permissions: contents: read, Forge gates last) adapted to the event-driven layer decomposition. Additive — the archetype schema stays candidate/scaffoldable:false (promotion rides B.6.7); these templates are validated by rendering via overlay.sh directly.

  • forge-events.yml — gates the events + eventstore crates. paths-filter on backend/events/**, backend/eventstore/**, backend/Cargo.*, shared/protos/**task backend:lint (workspace clippy -D warnings + fmt --check) → crate-scoped cargo build/test -p events -p eventstore → Forge gates.
  • forge-workflows.yml — gates the saga crate. Blocking job runs task backend:lint + cargo build/test -p saga with default features (the pre-alpha temporal-sdk stays OFF, per ADR-B6-2-004). A separate saga-temporal-sdk job runs cargo test -p saga --features temporal-sdk only on workflow_dispatch — clearly non-blocking, no continue-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 (apply init-eventstore.sql twice against postgres: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-alpine image pins, and ends in verify.shconstitution-linter.sh. Registered in scaffold-plan.yaml (substitute: true) so b6-2.test.sh plan↔tree coverage stays green. Gated by a new .forge/scripts/tests/b6-5.test.sh (9 L1 + 1 L2), registered in forge-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,210/10 (9 L1 structural + 1 L2 overlay.sh render-clean, valid YAML, <project-name> substituted, ${{ … }} preserved).
  • b6-2.test.sh --level 1,213/13 (plan↔tree coverage stays green after the three new .tmpl entries; rendered backend cargo check).
  • b6-1.test.sh --level 1,219/19.
  • delivery.test.sh --level 124/24 (full-stack CI sibling unaffected).
  • verify.sh518/0 PASS; constitution-linter.shOVERALL PASS (76/0, 4 pre-existing T.5 warns).
  • forge-ci.yml re-parses as valid YAML.

Note (Article V): authored + implemented by a single executor in one session; an independent reviewer/maintainer ratification pass is the honest deferred gate (mirroring b6-2-scaffolder).

🤖 Generated with Claude Code

Bogala and others added 5 commits July 10, 2026 13:27
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 Bogala merged commit f584646 into main Jul 12, 2026
7 checks passed
@Bogala Bogala deleted the b6-5-ci-templates branch July 12, 2026 10:43
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>
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