rcf-lite 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -1
- package/bin/rcf.js +3 -1
- package/bin/view-supervisor-child.mjs +0 -0
- package/blueprints/application-api-rest/docs/topics.md +1 -1
- package/blueprints/application-spa/README.md +3 -3
- package/blueprints/application-spa/contributions/adrs/adr-202-application-spa-theming.json +1 -1
- package/blueprints/application-spa/contributions/adrs/adr-206-application-spa-iconography.json +1 -1
- package/blueprints/application-spa/contributions/tacs/tac-207-application-spa-token-adherence-probe.json +7 -7
- package/blueprints/application-spa/contributions/tacs/tac-208-application-spa-icon-adherence-probe.json +7 -7
- package/blueprints/application-spa/contributions/tacs/tac-209-application-spa-csp-styled-adherence-probe.json +8 -8
- package/blueprints/application-spa/contributions/tacs/tac-210-application-spa-external-dependency-provisioning-probe.json +8 -8
- package/blueprints/application-spa/contributions/tacs/tac-211-application-spa-core-flow-e2e-probe.json +8 -8
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1129.json +2 -2
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1130.json +2 -2
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1131.json +2 -2
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1132.json +2 -2
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1133.json +3 -3
- package/blueprints/application-spa/docs/topics.md +1 -1
- package/blueprints/delivery-ci-workflows/CHANGELOG.md +39 -0
- package/blueprints/delivery-ci-workflows/README.md +61 -0
- package/blueprints/delivery-ci-workflows/assets/bootstrap/README.md +26 -0
- package/blueprints/delivery-ci-workflows/assets/bootstrap/adr-bootstrap-coverage-supersession.template.json +28 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/default-branch-checks.yml +61 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/pull-request-checks.yml +74 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/release.yml +75 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/scheduled-audit.yml +65 -0
- package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/notes.md +61 -0
- package/blueprints/{ci-pipeline → delivery-ci-workflows}/assets/report-samples/per-gate.json +3 -2
- package/blueprints/delivery-ci-workflows/blueprint.json +87 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-701-delivery-ci-workflows-ci-gates.json +30 -0
- package/blueprints/{ci-pipeline/contributions/adrs/adr-702-ci-pipeline-strict-coverage-gate.json → delivery-ci-workflows/contributions/adrs/adr-702-delivery-ci-workflows-strict-coverage-gate.json} +4 -4
- package/blueprints/{ci-pipeline/contributions/adrs/adr-703-ci-pipeline-node-only-runner.json → delivery-ci-workflows/contributions/adrs/adr-703-delivery-ci-workflows-node-only-runner.json} +1 -1
- package/blueprints/{ci-pipeline/contributions/adrs/adr-704-ci-pipeline-report-shape.json → delivery-ci-workflows/contributions/adrs/adr-704-delivery-ci-workflows-report-shape.json} +3 -3
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-705-delivery-ci-workflows-elicitation-surface.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-706-delivery-ci-workflows-branch-model-defaults.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-707-delivery-ci-workflows-release-workflow-shape.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-708-delivery-ci-workflows-provider-hint-shape.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-709-delivery-ci-workflows-release-artefacts.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-710-delivery-ci-workflows-scheduled-audit.json +25 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-001.json +18 -0
- package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-002.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-002.json} +2 -2
- package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-003.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-003.json} +2 -2
- package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-004.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-004.json} +2 -2
- package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-005.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-005.json} +4 -4
- package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-006.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-006.json} +2 -2
- package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-007.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-007.json} +2 -2
- package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-008.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-008.json} +2 -2
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-009.json +18 -0
- package/blueprints/{ci-pipeline/contributions/requirements/ci-pipeline-req-010.json → delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-010.json} +2 -2
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-011.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-012.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-013.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-014.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-015.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-016.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-017.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-018.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-019.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-020.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-021.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-022.json +18 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-023.json +18 -0
- package/blueprints/{ci-pipeline/contributions/tacs/tac-701-ci-pipeline-gate-runner.json → delivery-ci-workflows/contributions/tacs/tac-701-delivery-ci-workflows-gate-runner.json} +5 -5
- package/blueprints/{ci-pipeline/contributions/tacs/tac-702-ci-pipeline-gate-report.json → delivery-ci-workflows/contributions/tacs/tac-702-delivery-ci-workflows-gate-report.json} +1 -1
- package/blueprints/{ci-pipeline/contributions/tacs/tac-703-ci-pipeline-aggregate-report.json → delivery-ci-workflows/contributions/tacs/tac-703-delivery-ci-workflows-aggregate-report.json} +2 -2
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-704-delivery-ci-workflows-workflow-materialiser.json +67 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-705-delivery-ci-workflows-release-workflow.json +51 -0
- package/blueprints/delivery-ci-workflows/contributions/tacs/tac-706-delivery-ci-workflows-scheduled-audit.json +38 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6101.json +37 -0
- package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6102.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6102.json} +3 -3
- package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6103.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6103.json} +4 -4
- package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6104.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6104.json} +4 -4
- package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6105.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6105.json} +6 -6
- package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6106.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6106.json} +3 -3
- package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6107.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6107.json} +5 -5
- package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6108.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6108.json} +4 -4
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6109.json +36 -0
- package/blueprints/{ci-pipeline/contributions/user-stories/ci-pipeline-us-6110.json → delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6110.json} +3 -3
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6111.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6112.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6113.json +36 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6114.json +46 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6115.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6116.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6117.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6118.json +37 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6119.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6120.json +28 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6121.json +46 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6122.json +46 -0
- package/blueprints/delivery-ci-workflows/contributions/user-stories/delivery-ci-workflows-us-6123.json +37 -0
- package/blueprints/delivery-ci-workflows/docs/topics.md +61 -0
- package/blueprints/delivery-ci-workflows/guide/delivery-ci-workflows.md +174 -0
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +3 -3
- package/blueprints/email-smtp-resend/docs/topics.md +1 -1
- package/blueprints/observability-essentials/README.md +2 -2
- package/blueprints/observability-essentials/docs/topics.md +5 -5
- package/blueprints/observability-probe-endpoints/docs/topics.md +2 -2
- package/blueprints/persistence-data-d1/README.md +2 -2
- package/blueprints/persistence-data-d1/assets/facade-shape/facade-module-shape.md +1 -1
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1403-persistence-data-d1-deploy-gate.json +1 -1
- package/blueprints/persistence-data-d1/docs/topics.md +2 -2
- package/blueprints/persistence-data-d1/guide/persistence-data-d1.md +1 -1
- package/blueprints/persistence-data-sqlite/README.md +1 -1
- package/blueprints/persistence-data-sqlite/docs/topics.md +1 -1
- package/blueprints/security-auth-clerk/README.md +5 -3
- package/blueprints/security-auth-clerk/assets/middleware/workers-fetch-shape.md +123 -0
- package/blueprints/security-auth-clerk/assets/wiring/workers-wrangler-toml-shape.md +51 -0
- package/blueprints/security-auth-clerk/blueprint.json +1 -1
- package/blueprints/security-auth-clerk/docs/topics.md +2 -2
- package/blueprints/security-auth-clerk/guide/security-auth-clerk.md +9 -0
- package/blueprints/security-auth-keycloak/docs/topics.md +2 -2
- package/blueprints/security-auth-magic-link/README.md +1 -1
- package/blueprints/security-auth-magic-link/docs/topics.md +1 -1
- package/blueprints/security-auth-oauth2/README.md +1 -1
- package/blueprints/security-auth-oauth2/docs/topics.md +2 -2
- package/blueprints/security-secrets-management/README.md +1 -1
- package/blueprints/security-secrets-management/docs/topics.md +3 -3
- package/guidance/build-cycle-playbook.md +2 -2
- package/guidance/document-model.md +1 -1
- package/guidance/harness-template.md +13 -0
- package/guidance/managed/agent-instructions-block.hash +1 -1
- package/guidance/managed/agent-instructions-block.md +13 -0
- package/package.json +15 -14
- package/rcf/adrs/adr-001.json +1 -1
- package/rcf/adrs/adr-009.json +1 -1
- package/rcf/build-sequence.json +1 -1
- package/rcf/manifest.json +2 -2
- package/rcf/prd.json +2 -2
- package/releases/releases.yaml +126 -0
- package/src/blueprint/apply.js +60 -13
- package/src/blueprint/index.js +12 -0
- package/src/blueprint/library-loader.js +292 -0
- package/src/blueprint/library-registry.js +341 -0
- package/src/blueprint/list.js +38 -4
- package/src/blueprint/shelf-resolver.js +144 -31
- package/src/blueprint/supersede.js +56 -13
- package/src/cli/blueprint-library.js +447 -0
- package/src/cli/blueprint.js +50 -9
- package/src/cli/guidance.js +1 -1
- package/src/cli/help.js +27 -1
- package/src/cli/version.js +673 -0
- package/src/cli/view.js +282 -1
- package/src/server/index.js +3 -0
- package/src/server/routes.js +15 -1
- package/src/server/scope-endpoint.js +105 -0
- package/src/view/live-client.js +253 -6
- package/src/view/scope.js +231 -0
- package/src/view/style.css +42 -0
- package/blueprints/ci-pipeline/README.md +0 -49
- package/blueprints/ci-pipeline/assets/ci-provider-examples/github-actions.yml +0 -61
- package/blueprints/ci-pipeline/assets/ci-provider-examples/notes.md +0 -50
- package/blueprints/ci-pipeline/blueprint.json +0 -46
- package/blueprints/ci-pipeline/contributions/adrs/adr-701-ci-pipeline-ci-gates.json +0 -25
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-001.json +0 -18
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-009.json +0 -18
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6101.json +0 -37
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6109.json +0 -36
- package/blueprints/ci-pipeline/docs/topics.md +0 -49
- package/blueprints/ci-pipeline/guide/ci-pipeline.md +0 -79
- package/rcf/.identity/profile.md +0 -37
- package/rcf/knowledge/INDEX.md +0 -12
- package/rcf/knowledge/README.md +0 -41
- package/rcf/knowledge/docs/.gitkeep +0 -0
- package/rcf/knowledge/notes/.gitkeep +0 -0
- /package/blueprints/{ci-pipeline → delivery-ci-workflows}/assets/report-samples/pipeline.json +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Delivery-ci-workflows blueprint (v2.0.0)
|
|
2
|
+
|
|
3
|
+
The `delivery-ci-workflows` blueprint (renamed from `ci-pipeline` at v2.0.0) contributes the full workflow set an rcf-lite project runs on its CI provider: two commit-triggered workflows (pull-request-checks and default-branch-checks), an optional release workflow scaled across four modes, and an optional scheduled-audit workflow. The workflow set is a function of an operator-declared `workflowShape` covering four elicited dimensions plus one optional fifth: branch model (feature or trunk), check set (mandatory tier plus five elicited checks), release mode (none, tagOnly, tagPlusArtefact, or deployHandoff), provider hint (which CI provider's illustrative assets to seed from), and an optional scheduledAudit flag. The v1 RCF-gate suite is preserved verbatim as the mandatory tier inside a broader two-tier check catalogue.
|
|
4
|
+
|
|
5
|
+
## Apply
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
rcf define blueprint add <path-to>/blueprints/delivery-ci-workflows
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Phase 1 resolves local path sources only; registry and git-ref resolution is a mechanism follow-up. Apply is idempotent; `rcf define blueprint list` shows the applied entry; `rcf define blueprint remove delivery-ci-workflows` cleanly removes an unreferenced application.
|
|
12
|
+
|
|
13
|
+
Projects on the v1 `ci-pipeline` slug follow the migration path in the CHANGELOG: remove `ci-pipeline`, add `delivery-ci-workflows`, populate `.rcf/config/delivery-ci-workflows.json`, re-run the workflow-materialiser.
|
|
14
|
+
|
|
15
|
+
## Anatomy
|
|
16
|
+
|
|
17
|
+
| Piece | Where | What |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| Metadata | `blueprint.json` | Slug, version, and the 62 contributions with scope/topic on the three global ADRs |
|
|
20
|
+
| Doc set | `contributions/` | 23 REQs, 23 USs, 6 TACs, 10 ADRs, all schema-valid and namespaced (`delivery-ci-workflows-REQ-NNN` prefix family; `ADR-70N-delivery-ci-workflows-<tail>` suffix family) |
|
|
21
|
+
| GitHub Actions assets | `assets/ci-provider-examples/github-actions/` | One illustrative workflow file per workflow the matrix materialises (`pull-request-checks.yml`, `default-branch-checks.yml`, `release.yml`, `scheduled-audit.yml`) |
|
|
22
|
+
| Alternate-provider notes | `assets/ci-provider-examples/notes.md` | The four-point mapping (job trigger, Node setup, single-line entry-point invocation, artefact upload) applied per workflow for GitLab CI, CircleCI, Buildkite, and Jenkins |
|
|
23
|
+
| Report-shape samples | `assets/report-samples/per-gate.json`, `assets/report-samples/pipeline.json` | Worked examples of a per-gate report (with the v2 `checkKind` field) and an aggregate report at the ratified schemas |
|
|
24
|
+
| Guide | `guide/delivery-ci-workflows.md` | Operator-facing: workflow-shape declaration, elicited-check catalogue, the four release modes, the deploy handoff contract, the scheduled-audit cadence |
|
|
25
|
+
| Coordination vocabulary | `docs/topics.md` | The three global-topic strings this blueprint contributes and the shared id band registry |
|
|
26
|
+
|
|
27
|
+
The doc set is contributions (copied into the project tree by `rcf define blueprint add`); the guide, assets, and docs are package-resident references. Guide rendering into `rcf/knowledge/docs/blueprint-guides/` and asset ingestion are mechanism follow-ups; until they land, the working agent reads them from the applied blueprint's source path recorded in `manifest.blueprints[].source`.
|
|
28
|
+
|
|
29
|
+
## What it contributes, and what it deliberately does not
|
|
30
|
+
|
|
31
|
+
Contributed kinds: REQ, US (with inline ACs), TAC, ADR. Adherence is expressed as ACs; the blueprint ships no test files (ratified decision preserved from v1) and no code.
|
|
32
|
+
|
|
33
|
+
No FBS contributions, as a matter of principle (ratified policy 2026-08-19): FBSs are the work of the implementing agent, not the blueprint. The blueprint contributes the WHAT (the workflow-materialiser contract, the gate-runner contract, the release-workflow contract, the scheduled-audit contract, the check-catalogue AC contracts, the report shapes); the implementing agent derives the HOW-tasks in the host project against those contracts.
|
|
34
|
+
|
|
35
|
+
Deliberately not contributed: a matrix of provider-specific configuration files (v2.0.0 ships GHA only; alternate providers wire the same entry points per the guide's four-point mapping applied per workflow); provider-specific pipeline plugins or actions; the linter, formatter, typechecker, unit-test runner, or security scanner (the elicited checks name the kind; the project picks the tool); a code-formatting style guide or a security-scan severity threshold (project decisions); a release-mechanism (no `standard-version` invocation, no `release-please` config, no `changesets` schema; the workflow reacts to a tag or dispatch, does not create it); a merge-queue integration; a coverage-trend dashboard.
|
|
36
|
+
|
|
37
|
+
## The three global decisions
|
|
38
|
+
|
|
39
|
+
ADR-701-delivery-ci-workflows-ci-gates ships `scope: global` on topic `ciGates`. This is the project's required check set: the two mandatory tier gates (`validate` then `coverage-strict`) plus the elicited subset from `workflowShape.checkSet` (default: every catalogued elicited check on). A composing blueprint that ships its own required-check opinion (adherence packs, browser-verify smokes, observability probes) conflicts here by design and expects a project-level ADR that names the extended set.
|
|
40
|
+
|
|
41
|
+
ADR-702-delivery-ci-workflows-strict-coverage-gate ships `scope: global` on topic `strictCoverageGate`. This is the project's coverage-mode posture: per-AC strict, not shallow-any. Preserved verbatim from v1. A composing blueprint that holds a different coverage posture conflicts here by design.
|
|
42
|
+
|
|
43
|
+
ADR-709-delivery-ci-workflows-release-artefacts ships `scope: global` on topic `releaseArtefacts` (new at v2). This names the decision area of what the release workflow produces on a release trigger; the delivery-side answer is the four `releaseMode` values. A future `security-release-provenance` or `delivery-release-notes` blueprint that opines on the same decision area conflicts here and expects a project-level ADR that fixes the extended answer.
|
|
44
|
+
|
|
45
|
+
See `docs/topics.md` for the exact strings, the expected resolutions, the delineation from the application-api-rest blueprint's `logging` topic, and the AC id band allocation (delivery-ci-workflows owns 6101-6899).
|
|
46
|
+
|
|
47
|
+
## Bootstrap posture (loud)
|
|
48
|
+
|
|
49
|
+
A fresh apply of this blueprint alongside its usual companions contributes tens to hundreds of ACs and zero TCs. The mandatory tier's `coverage-strict` gate refuses when any AC lacks a resolving TC (ADR-702), so the FIRST commit-triggered workflow the materialiser produces is guaranteed to refuse until the project either authors every TC or ships a project-level ADR demoting the gate. The guide's "Bootstrap posture" section names the two ratified paths and points at the starting-point ADR at `assets/bootstrap/adr-bootstrap-coverage-supersession.template.json`. Choose a path at apply time; discovering the trap at the first PR is a real cost this warning exists to save.
|
|
50
|
+
|
|
51
|
+
## Quality bar
|
|
52
|
+
|
|
53
|
+
The workflow-materialiser reads `.rcf/config/delivery-ci-workflows.json` and refuses to run when the three required fields are missing or when any field carries an unrecognised value; the required check set runs on every commit-triggered workflow the branch model defines; the mandatory tier runs first in order (`validate` then `coverage-strict`); the elicited tier runs after the mandatory tier in stable but non-load-bearing order; per-gate JSON reports at stable paths carry the v1 fixed key set plus the v2 `checkKind` field; distinct workflows write to distinct aggregate paths (`.rcf/reports/ci/pipeline.json` for commit-triggered, `.rcf/reports/ci/release.json` for release, `.rcf/reports/ci/scheduled-audit.json` for scheduled); a missing required gate report is recorded as `outcome: missing` and flips the aggregate to `failed`; the release workflow shape scales across four discrete modes with the `none` semantic reached either by explicit value or by absent field; the `deployHandoff:<slug>` mode invokes the named deploy blueprint's `promote` workflow with the `versionId` input and refuses at boot when the deploy blueprint is absent; the applied blueprint's source path carries one illustrative GHA workflow file per workflow in the matrix and a notes file mapping four points to alternate providers. Every bar is carried by ACs in the doc set, not by this README.
|
|
54
|
+
|
|
55
|
+
## Known mechanism-reach gaps
|
|
56
|
+
|
|
57
|
+
None at v2.0.0. Every AC on every story is bound to at least one TAC that the host project must realise, and every AC's `then` clause is runtime-observable in the materialised workflow files, the aggregate report files at their stable paths, and the platform's own branch-protection or push-protection surface. The mechanism-reach principle from the authoring standard section 7 is satisfied at ship. The operational responsibility a project must own is the branch-protection or equivalent merge-policy configuration on the default or trunk branch that binds the aggregate exit to the merge criterion (AC-6101-2, AC-6114-3, AC-6115-1, AC-6115-2); that responsibility is stated as an AC observable on the platform's own configuration surface, not a smuggled runtime probe.
|
|
58
|
+
|
|
59
|
+
## Verification depth
|
|
60
|
+
|
|
61
|
+
The four illustrative GHA workflow files under `assets/ci-provider-examples/github-actions/` are YAML-shape-valid (parseable, `on:` trigger blocks well-formed, jobs and steps structurally complete) and serve as copy-paste starting points; they are NOT executed as part of this blueprint's ship gate. Every non-mandatory-tier check runner and every workflow behaviour (materialiser boot-check, gate-runner orchestration, release-workflow orchestration, scheduled-audit runner, deploy-handoff dispatch, aggregate-report writing) is project-realised against the TAC contracts (TAC-701..706); end-to-end workflow execution is verified in the consuming project's own CI at apply-time, per the mechanism-reach principle. The v1 mandatory-tier upload+promote path (per the v1 blueprint under the old `ci-pipeline` slug) remains dogfood-proven and is preserved verbatim as the mandatory tier here; the v2 elicited-tier catalogue, the new workflow-materialiser TAC, and the release/scheduled-audit workflows are new AC contracts whose runtime enforcement is the applying project's responsibility.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Bootstrap assets
|
|
2
|
+
|
|
3
|
+
Templates the operator copies into their project during the bootstrap window
|
|
4
|
+
of a fresh delivery-ci-workflows apply. Nothing here is imported automatically
|
|
5
|
+
by the blueprint; every file is a starting point the operator adapts and
|
|
6
|
+
registers on the project tree.
|
|
7
|
+
|
|
8
|
+
## `adr-bootstrap-coverage-supersession.template.json`
|
|
9
|
+
|
|
10
|
+
Project-level ADR template that demotes the mandatory-tier `coverage-strict`
|
|
11
|
+
gate to advisory-only during the bootstrap window (see the guide's "Bootstrap
|
|
12
|
+
posture" section for the problem statement).
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
|
|
16
|
+
1. Copy this file into the project's ADR directory (typically `rcf/adrs/`).
|
|
17
|
+
2. Rename the file and its `adrId` from the `ADR-XXX-...` placeholder to the
|
|
18
|
+
next free project-level ADR id.
|
|
19
|
+
3. Replace the two `TEMPLATE-*ISO8601` timestamps with the current wall-clock.
|
|
20
|
+
4. Register the ADR on the project as `scope: global` on topic
|
|
21
|
+
`strictCoverageGate` so it competes with ADR-702 through the resolutions
|
|
22
|
+
mechanism.
|
|
23
|
+
5. Amend the exit criterion in the `decision` section if `N = 5` consecutive
|
|
24
|
+
passes is not the right threshold for the project.
|
|
25
|
+
6. When the exit criterion is met, flip `status` to `superseded` and leave
|
|
26
|
+
the file in place for audit trail.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adrId": "ADR-XXX-bootstrap-coverage-supersession",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "accepted",
|
|
7
|
+
"title": "During bootstrap the coverage-strict gate runs advisory-only until a stated exit criterion is met",
|
|
8
|
+
"context": "A fresh apply of the delivery-ci-workflows blueprint set (application-*, persistence-*, delivery-ci-workflows) contributes tens to hundreds of REQs and ACs and zero test cases. The mandatory-tier coverage-strict gate runs `rcf audit coverage --strict` which refuses when any AC lacks a resolving TC (ADR-702). On a fresh apply the very first commit-triggered workflow is therefore guaranteed to refuse until the project has authored a TC for every AC the blueprint set contributed. That is a real cost the operator either accepts up-front (author every TC before turning CI green) or defers behind a project-level supersession of ADR-702. This project accepts the deferral posture and states the exit criterion here.",
|
|
9
|
+
"decision": "During bootstrap the required-gate coverage invocation is demoted to advisory-only: the coverage-strict gate still runs on every commit-triggered workflow, its per-gate report still lands at the stable path, and the aggregate still records its outcome; but a `failed` outcome on coverage-strict does NOT flip the aggregate verdict to `failed` and does NOT block merge. Every other required gate (validate, and the elicited tier the project turned on) retains its merge-blocking semantics. This ADR supersedes ADR-702-delivery-ci-workflows-strict-coverage-gate on the `strictCoverageGate` topic for this project only. The demotion is bounded by a stated exit criterion: this ADR is retired (status flipped to superseded) when the mandatory-tier coverage-strict outcome has been `passed` on the default branch for N consecutive commits (recommended: N = 5) OR when the project's own audit shows every AC in the applied blueprint set has a resolving TC, whichever comes first. On retirement the coverage-strict gate reverts to merge-blocking per ADR-702's default posture, and this ADR's file is left in place with `status: superseded` for audit trail.",
|
|
10
|
+
"consequences": "The bootstrap window is a knowingly-relaxed CI posture; a reviewer merging during it MUST inspect the aggregate's coverage-strict per-gate report themselves rather than trusting the aggregate verdict alone. Every AC the blueprint set contributed still owes a TC; the exit criterion enforces the debt is repaid rather than allowed to accrue silently. A composing blueprint that ships its own coverage-mode opinion (a hypothetical `delivery-ci-workflows-shallow` or `delivery-ci-workflows-grace-window`) conflicts with this ADR the same way it would with ADR-702; the project-level resolver still picks the winner. Retiring this ADR is a one-line status change; the exit criterion is a checklist the retiring commit records.",
|
|
11
|
+
"alternativesConsidered": [
|
|
12
|
+
{
|
|
13
|
+
"name": "Author every TC before turning CI green",
|
|
14
|
+
"summary": "Do not demote the gate; author the ~N hundred TCs before the first CI run.",
|
|
15
|
+
"reasonNotChosen": "The blueprint set is large and TC authoring is a real cost; front-loading it delays every other CI signal the project needs from day one. The demote-with-exit-criterion posture keeps every OTHER gate merge-blocking from day one and pays the coverage debt on a stated schedule."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Demote coverage-strict permanently to shallow-any",
|
|
19
|
+
"summary": "Retire ADR-702 without an exit criterion; run shallow-any as the project's coverage floor forever.",
|
|
20
|
+
"reasonNotChosen": "ADR-702's own consequences section names the failure mode shallow-any hides (an AC bound but no TC resolves it, REQ reads as covered because a sibling AC's TC resolves). The bootstrap posture is a stated deferral, not a permanent policy change; retiring the deferral is a one-line change the exit criterion drives."
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"relatedAdrs": [
|
|
24
|
+
"ADR-702-delivery-ci-workflows-strict-coverage-gate"
|
|
25
|
+
],
|
|
26
|
+
"createdAt": "TEMPLATE-createdAt-ISO8601",
|
|
27
|
+
"updatedAt": "TEMPLATE-updatedAt-ISO8601"
|
|
28
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Illustrative default-branch-checks workflow for the delivery-ci-workflows blueprint.
|
|
2
|
+
# Copy this file into the host project as `.github/workflows/default-branch-checks.yml`.
|
|
3
|
+
# The file below is the pnpm+main default the materialiser writes when
|
|
4
|
+
# workflowShape.packageManager, workflowShape.defaultBranch and
|
|
5
|
+
# workflowShape.trunkBranch are absent.
|
|
6
|
+
#
|
|
7
|
+
# The file carries paired RCF substitution markers the materialiser
|
|
8
|
+
# rewrites from workflowShape (see guide/delivery-ci-workflows.md for
|
|
9
|
+
# marker names, replacement blocks, and the substitution table).
|
|
10
|
+
#
|
|
11
|
+
# The workflow runs the same required check set as pull-request-checks and
|
|
12
|
+
# writes to the same aggregate report path `.rcf/reports/ci/pipeline.json`.
|
|
13
|
+
#
|
|
14
|
+
# See `guide/delivery-ci-workflows.md` (four-point mapping) for translating
|
|
15
|
+
# this workflow to GitLab CI, CircleCI, Buildkite, or Jenkins.
|
|
16
|
+
|
|
17
|
+
name: default-branch-checks
|
|
18
|
+
|
|
19
|
+
on:
|
|
20
|
+
push:
|
|
21
|
+
# @@RCF-SUB-BRANCH-NAME@@
|
|
22
|
+
branches: [main]
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
check-set:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
permissions:
|
|
28
|
+
contents: read
|
|
29
|
+
steps:
|
|
30
|
+
- name: checkout
|
|
31
|
+
uses: actions/checkout@v4
|
|
32
|
+
|
|
33
|
+
# @@RCF-SUB-PKG-MGR-SETUP-BEGIN@@
|
|
34
|
+
- name: setup pnpm
|
|
35
|
+
uses: pnpm/action-setup@v4
|
|
36
|
+
with:
|
|
37
|
+
version: 9
|
|
38
|
+
|
|
39
|
+
- name: setup node
|
|
40
|
+
uses: actions/setup-node@v4
|
|
41
|
+
with:
|
|
42
|
+
node-version: 24
|
|
43
|
+
cache: pnpm
|
|
44
|
+
# @@RCF-SUB-PKG-MGR-SETUP-END@@
|
|
45
|
+
|
|
46
|
+
# @@RCF-SUB-PKG-MGR-INSTALL-BEGIN@@
|
|
47
|
+
- name: install dependencies
|
|
48
|
+
run: pnpm install --frozen-lockfile
|
|
49
|
+
# @@RCF-SUB-PKG-MGR-INSTALL-END@@
|
|
50
|
+
|
|
51
|
+
- name: run rcf check set
|
|
52
|
+
run: node scripts/rcf-ci.js
|
|
53
|
+
|
|
54
|
+
- name: upload rcf ci reports
|
|
55
|
+
if: always()
|
|
56
|
+
uses: actions/upload-artifact@v4
|
|
57
|
+
with:
|
|
58
|
+
name: default-branch-checks-reports
|
|
59
|
+
path: .rcf/reports/ci/
|
|
60
|
+
if-no-files-found: warn
|
|
61
|
+
retention-days: 30
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Illustrative pull-request-checks workflow for the delivery-ci-workflows blueprint.
|
|
2
|
+
# Copy this file into the host project as `.github/workflows/pull-request-checks.yml`.
|
|
3
|
+
# The file below is the pnpm+main default the materialiser writes when
|
|
4
|
+
# workflowShape.packageManager and workflowShape.defaultBranch are absent.
|
|
5
|
+
#
|
|
6
|
+
# The file carries paired RCF substitution markers the materialiser rewrites
|
|
7
|
+
# from workflowShape (see guide/delivery-ci-workflows.md, "Within-provider
|
|
8
|
+
# package-manager substitution" and "Trigger branch-name substitution" for
|
|
9
|
+
# marker names, replacement blocks, and the substitution table). A
|
|
10
|
+
# hand-copier on the default (pnpm + main) keeps the file as-is; a project
|
|
11
|
+
# on npm/yarn/bun or a non-main branch either runs the materialiser or
|
|
12
|
+
# applies the substitution table from the guide by hand.
|
|
13
|
+
#
|
|
14
|
+
# The workflow runs one CI-provider-neutral Node entry point that invokes the
|
|
15
|
+
# required check set (the mandatory tier plus the elicited subset the project
|
|
16
|
+
# turned on in workflowShape.checkSet), writes per-gate and aggregate JSON
|
|
17
|
+
# reports under `.rcf/reports/ci/`, and uploads the report directory as a
|
|
18
|
+
# workflow artefact for downstream readers.
|
|
19
|
+
#
|
|
20
|
+
# See `guide/delivery-ci-workflows.md` (four-point mapping) for translating
|
|
21
|
+
# this workflow to GitLab CI, CircleCI, Buildkite, or Jenkins.
|
|
22
|
+
|
|
23
|
+
name: pull-request-checks
|
|
24
|
+
|
|
25
|
+
on:
|
|
26
|
+
pull_request:
|
|
27
|
+
# @@RCF-SUB-BRANCH-NAME@@
|
|
28
|
+
branches: [main]
|
|
29
|
+
|
|
30
|
+
jobs:
|
|
31
|
+
check-set:
|
|
32
|
+
runs-on: ubuntu-latest
|
|
33
|
+
permissions:
|
|
34
|
+
contents: read
|
|
35
|
+
steps:
|
|
36
|
+
- name: checkout
|
|
37
|
+
uses: actions/checkout@v4
|
|
38
|
+
|
|
39
|
+
# @@RCF-SUB-PKG-MGR-SETUP-BEGIN@@
|
|
40
|
+
- name: setup pnpm
|
|
41
|
+
uses: pnpm/action-setup@v4
|
|
42
|
+
with:
|
|
43
|
+
version: 9
|
|
44
|
+
|
|
45
|
+
- name: setup node
|
|
46
|
+
uses: actions/setup-node@v4
|
|
47
|
+
with:
|
|
48
|
+
node-version: 24
|
|
49
|
+
cache: pnpm
|
|
50
|
+
# @@RCF-SUB-PKG-MGR-SETUP-END@@
|
|
51
|
+
|
|
52
|
+
# @@RCF-SUB-PKG-MGR-INSTALL-BEGIN@@
|
|
53
|
+
- name: install dependencies
|
|
54
|
+
run: pnpm install --frozen-lockfile
|
|
55
|
+
# @@RCF-SUB-PKG-MGR-INSTALL-END@@
|
|
56
|
+
|
|
57
|
+
# Single-line invocation of the project's realised gate runner.
|
|
58
|
+
# The runner spawns the mandatory tier (`rcf define validate` then
|
|
59
|
+
# `rcf audit coverage --strict`) and then every elicited check the
|
|
60
|
+
# project turned on in workflowShape.checkSet, writes
|
|
61
|
+
# `.rcf/reports/ci/<gate>.json` per gate with the `checkKind` field,
|
|
62
|
+
# and writes `.rcf/reports/ci/pipeline.json` as the aggregate. Its
|
|
63
|
+
# exit code is the pipeline's aggregate exit code.
|
|
64
|
+
- name: run rcf check set
|
|
65
|
+
run: node scripts/rcf-ci.js
|
|
66
|
+
|
|
67
|
+
- name: upload rcf ci reports
|
|
68
|
+
if: always()
|
|
69
|
+
uses: actions/upload-artifact@v4
|
|
70
|
+
with:
|
|
71
|
+
name: pull-request-checks-reports
|
|
72
|
+
path: .rcf/reports/ci/
|
|
73
|
+
if-no-files-found: warn
|
|
74
|
+
retention-days: 30
|
package/blueprints/delivery-ci-workflows/assets/ci-provider-examples/github-actions/release.yml
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Illustrative release workflow for the delivery-ci-workflows blueprint.
|
|
2
|
+
# Copy this file into the host project as `.github/workflows/release.yml`
|
|
3
|
+
# and adjust the `node-version`, package-manager setup, and release
|
|
4
|
+
# orchestrator path to match the project's realised release runner (TAC-705).
|
|
5
|
+
#
|
|
6
|
+
# This file materialises when workflowShape.releaseMode is `tagOnly`,
|
|
7
|
+
# `tagPlusArtefact`, or `deployHandoff:<slug>`. When releaseMode is `none`
|
|
8
|
+
# or absent, the workflow does not ship at all (Q6-B ratification).
|
|
9
|
+
#
|
|
10
|
+
# The workflow does NOT run the required check set: that already ran on the
|
|
11
|
+
# default-branch-checks workflow at the commit the release points at.
|
|
12
|
+
#
|
|
13
|
+
# See `guide/delivery-ci-workflows.md` for the four release-mode shapes and
|
|
14
|
+
# the deploy handoff invocation contract (AC-6122-1..3).
|
|
15
|
+
|
|
16
|
+
name: release
|
|
17
|
+
|
|
18
|
+
on:
|
|
19
|
+
release:
|
|
20
|
+
types: [created]
|
|
21
|
+
workflow_dispatch:
|
|
22
|
+
inputs:
|
|
23
|
+
versionId:
|
|
24
|
+
description: 'Version identifier to release (optional; omitted defaults to the release event tag)'
|
|
25
|
+
required: false
|
|
26
|
+
type: string
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
release-flow:
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
permissions:
|
|
32
|
+
contents: write
|
|
33
|
+
packages: write
|
|
34
|
+
steps:
|
|
35
|
+
- name: checkout
|
|
36
|
+
uses: actions/checkout@v4
|
|
37
|
+
|
|
38
|
+
# @@RCF-SUB-PKG-MGR-SETUP-BEGIN@@
|
|
39
|
+
- name: setup pnpm
|
|
40
|
+
uses: pnpm/action-setup@v4
|
|
41
|
+
with:
|
|
42
|
+
version: 9
|
|
43
|
+
|
|
44
|
+
- name: setup node
|
|
45
|
+
uses: actions/setup-node@v4
|
|
46
|
+
with:
|
|
47
|
+
node-version: 24
|
|
48
|
+
cache: pnpm
|
|
49
|
+
# @@RCF-SUB-PKG-MGR-SETUP-END@@
|
|
50
|
+
|
|
51
|
+
# @@RCF-SUB-PKG-MGR-INSTALL-BEGIN@@
|
|
52
|
+
- name: install dependencies
|
|
53
|
+
run: pnpm install --frozen-lockfile
|
|
54
|
+
# @@RCF-SUB-PKG-MGR-INSTALL-END@@
|
|
55
|
+
|
|
56
|
+
# The release orchestrator reads the releaseMode from its environment
|
|
57
|
+
# (RCF_RELEASE_MODE) and runs the appropriate step sequence:
|
|
58
|
+
# tagOnly: create release entity only
|
|
59
|
+
# tagPlusArtefact: create release entity, run artefact-publish step
|
|
60
|
+
# deployHandoff:<slug>: create release entity, run artefact-publish
|
|
61
|
+
# step, dispatch <slug>'s promote workflow with versionId
|
|
62
|
+
# It writes .rcf/reports/ci/release.json as the aggregate.
|
|
63
|
+
- name: run release orchestrator
|
|
64
|
+
env:
|
|
65
|
+
RCF_RELEASE_MODE: tagPlusArtefact
|
|
66
|
+
run: node scripts/rcf-release.js
|
|
67
|
+
|
|
68
|
+
- name: upload release reports
|
|
69
|
+
if: always()
|
|
70
|
+
uses: actions/upload-artifact@v4
|
|
71
|
+
with:
|
|
72
|
+
name: release-reports
|
|
73
|
+
path: .rcf/reports/ci/
|
|
74
|
+
if-no-files-found: warn
|
|
75
|
+
retention-days: 90
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Illustrative scheduled-audit workflow for the delivery-ci-workflows blueprint.
|
|
2
|
+
# Copy this file into the host project as `.github/workflows/scheduled-audit.yml`
|
|
3
|
+
# and adjust the `node-version`, package-manager setup, and scheduled runner
|
|
4
|
+
# path to match the project's realised scheduled-audit runner (TAC-706).
|
|
5
|
+
#
|
|
6
|
+
# This file materialises when workflowShape.scheduledAudit is `true`. When
|
|
7
|
+
# `false` or absent, the workflow does not ship at all.
|
|
8
|
+
#
|
|
9
|
+
# The workflow runs the same required check set as the commit-triggered
|
|
10
|
+
# workflows and writes to a distinct aggregate report path
|
|
11
|
+
# (.rcf/reports/ci/scheduled-audit.json) so scheduled-run outcomes never
|
|
12
|
+
# overwrite the most recent commit-triggered outcome.
|
|
13
|
+
#
|
|
14
|
+
# See `guide/delivery-ci-workflows.md` for the cron cadence discussion and
|
|
15
|
+
# AC-6123-1/AC-6123-2 for the report-path property.
|
|
16
|
+
|
|
17
|
+
name: scheduled-audit
|
|
18
|
+
|
|
19
|
+
on:
|
|
20
|
+
schedule:
|
|
21
|
+
# Every day at 06:00 UTC. Adjust to your project's cadence.
|
|
22
|
+
- cron: '0 6 * * *'
|
|
23
|
+
workflow_dispatch: {}
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
scheduled-check-set:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
permissions:
|
|
29
|
+
contents: read
|
|
30
|
+
steps:
|
|
31
|
+
- name: checkout
|
|
32
|
+
uses: actions/checkout@v4
|
|
33
|
+
|
|
34
|
+
# @@RCF-SUB-PKG-MGR-SETUP-BEGIN@@
|
|
35
|
+
- name: setup pnpm
|
|
36
|
+
uses: pnpm/action-setup@v4
|
|
37
|
+
with:
|
|
38
|
+
version: 9
|
|
39
|
+
|
|
40
|
+
- name: setup node
|
|
41
|
+
uses: actions/setup-node@v4
|
|
42
|
+
with:
|
|
43
|
+
node-version: 24
|
|
44
|
+
cache: pnpm
|
|
45
|
+
# @@RCF-SUB-PKG-MGR-SETUP-END@@
|
|
46
|
+
|
|
47
|
+
# @@RCF-SUB-PKG-MGR-INSTALL-BEGIN@@
|
|
48
|
+
- name: install dependencies
|
|
49
|
+
run: pnpm install --frozen-lockfile
|
|
50
|
+
# @@RCF-SUB-PKG-MGR-INSTALL-END@@
|
|
51
|
+
|
|
52
|
+
# The scheduled runner is a thin wrapper around the gate-runner
|
|
53
|
+
# (TAC-701) that overrides the aggregate report path to the
|
|
54
|
+
# scheduled-audit path and forwards the elicited check set.
|
|
55
|
+
- name: run scheduled audit
|
|
56
|
+
run: node scripts/rcf-scheduled-audit.js --report-path .rcf/reports/ci/scheduled-audit.json
|
|
57
|
+
|
|
58
|
+
- name: upload scheduled audit reports
|
|
59
|
+
if: always()
|
|
60
|
+
uses: actions/upload-artifact@v4
|
|
61
|
+
with:
|
|
62
|
+
name: scheduled-audit-reports
|
|
63
|
+
path: .rcf/reports/ci/
|
|
64
|
+
if-no-files-found: warn
|
|
65
|
+
retention-days: 30
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Wiring the workflow set on alternate CI providers
|
|
2
|
+
|
|
3
|
+
The blueprint ships one illustrative provider example (GitHub Actions, four workflow files under `github-actions/`). Every mainstream provider hosts the same workflow set by translating four points per workflow and keeping the Node entry-point invocations unchanged. These notes are read alongside `guide/delivery-ci-workflows.md`, not instead of it.
|
|
4
|
+
|
|
5
|
+
## The workflow set the matrix materialises
|
|
6
|
+
|
|
7
|
+
Which workflow files exist depends on `workflowShape`:
|
|
8
|
+
|
|
9
|
+
- Always: `default-branch-checks` (pushes to the default or trunk branch).
|
|
10
|
+
- Feature-branch, or trunk-based with `trunkPullRequests: sometimes`: `pull-request-checks` (pull requests targeting the branch).
|
|
11
|
+
- `releaseMode` not `none` and not absent: `release` (release-trigger events; four shapes per mode).
|
|
12
|
+
- `scheduledAudit: true`: `scheduled-audit` (cron cadence).
|
|
13
|
+
|
|
14
|
+
## The four mapping points (applied per workflow)
|
|
15
|
+
|
|
16
|
+
1. Job trigger. Fire the workflow's job on the trigger set defined for that workflow (see the corresponding GHA file's `on:` block for the reference shape).
|
|
17
|
+
2. Node setup. Install Node 24 or later on the runner.
|
|
18
|
+
3. Package-manager setup and install. Install the project's dependencies with the frozen-lockfile discipline of whichever manager the project uses. The manager is a project decision recorded on `workflowShape.packageManager` (default `pnpm`; recognised set `pnpm`, `npm`, `yarn`, `bun`); the per-manager setup and install blocks are named in the guide's "Within-provider package-manager substitution" table. Alternate providers translate the block to the provider's own action/command; the manager choice stays project-controlled.
|
|
19
|
+
4. Node entry-point invocation and artefact upload. Run `node <path>` (or a package-manager script that resolves to the same) for the workflow's entry point (gate-runner for `pull-request-checks` and `default-branch-checks`, release orchestrator for `release`, scheduled-audit runner for `scheduled-audit`); upload the aggregate report directory as a run artefact for downstream readers.
|
|
20
|
+
|
|
21
|
+
The blueprint does not ship provider-specific configuration files for the providers below at v2.0.0. A project hand-authors the first three points in the provider's own runner language and keeps the fourth unchanged per the workflow's entry point.
|
|
22
|
+
|
|
23
|
+
## GitLab CI (`.gitlab-ci.yml`)
|
|
24
|
+
|
|
25
|
+
- Triggers: for `pull-request-checks` use `rules: { if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main" }`; for `default-branch-checks` use `rules: { if: $CI_COMMIT_BRANCH == "main" }`; for `release` use `rules: { if: $CI_COMMIT_TAG }` plus a `workflow_dispatch`-equivalent through GitLab's manual jobs; for `scheduled-audit` use a scheduled pipeline.
|
|
26
|
+
- Node setup: use a `node:24` image or install through the runner's setup hook.
|
|
27
|
+
- Install: the install line from the guide's substitution table for the project's `workflowShape.packageManager` (default `pnpm install --frozen-lockfile`).
|
|
28
|
+
- Invoke: `node scripts/rcf-ci.js` for check-set workflows; `node scripts/rcf-release.js` for release; `node scripts/rcf-scheduled-audit.js --report-path .rcf/reports/ci/scheduled-audit.json` for scheduled-audit.
|
|
29
|
+
- Artefact upload: `artifacts: { when: always, paths: [.rcf/reports/ci/] }`.
|
|
30
|
+
|
|
31
|
+
## CircleCI (`.circleci/config.yml`)
|
|
32
|
+
|
|
33
|
+
- Triggers: `workflows:` with branch and PR filters for the two check-set workflows; scheduled workflows for `scheduled-audit`; the release workflow fires from tag-triggered pipelines.
|
|
34
|
+
- Node setup: `cimg/node:24.19` or the `node/install` orb command.
|
|
35
|
+
- Install: the install line from the guide's substitution table for the project's `workflowShape.packageManager`.
|
|
36
|
+
- Invoke: as above.
|
|
37
|
+
- Artefact upload: `store_artifacts: { path: .rcf/reports/ci }`.
|
|
38
|
+
|
|
39
|
+
## Buildkite (`.buildkite/pipeline.yml`)
|
|
40
|
+
|
|
41
|
+
- Triggers: pipeline-level branch conditions or per-step `branches: main` for check-set workflows; separate pipelines for release (tag-triggered) and scheduled-audit (Buildkite scheduled builds).
|
|
42
|
+
- Node setup: install Node 24 in the queue's setup hook or use a Docker plugin (`docker#v5.0.0`).
|
|
43
|
+
- Install: the install line from the guide's substitution table for the project's `workflowShape.packageManager`.
|
|
44
|
+
- Invoke: as above.
|
|
45
|
+
- Artefact upload: `artifact_paths: [".rcf/reports/ci/**"]`.
|
|
46
|
+
|
|
47
|
+
## Jenkins (declarative pipeline)
|
|
48
|
+
|
|
49
|
+
- Triggers: `triggers { githubPush() }` plus a multibranch pipeline configured to build pull requests against the default branch; a separate tag-triggered pipeline for release; `triggers { cron('H 6 * * *') }` for scheduled-audit.
|
|
50
|
+
- Node setup: install Node 24 via `tools { nodejs '24' }` or provision the agent with Node preinstalled.
|
|
51
|
+
- Install: `sh` invocation of the install line from the guide's substitution table for the project's `workflowShape.packageManager`.
|
|
52
|
+
- Invoke: `sh 'node scripts/rcf-ci.js'` (or the appropriate script per workflow).
|
|
53
|
+
- Artefact upload: `archiveArtifacts artifacts: '.rcf/reports/ci/**', allowEmptyArchive: true`.
|
|
54
|
+
|
|
55
|
+
## Cross-provider notes
|
|
56
|
+
|
|
57
|
+
- The Node entry-point paths are the same on every provider. A project that changes providers rewrites its trigger, setup, install, and artefact-upload steps; the entry-point step is unchanged.
|
|
58
|
+
- The report directory (default `.rcf/reports/ci/`) is the same on every provider. Downstream readers do not need per-provider knowledge to pick up the aggregate reports.
|
|
59
|
+
- The tool-version pin (which `rcf` version to run) is the project's decision. The runner records the installed version on every per-gate report's `toolVersion` field; a mismatch across two runs is visible in the reports without re-running the gate.
|
|
60
|
+
- The release workflow's `deployHandoff:<slug>` mode dispatches the named deploy blueprint's `promote` workflow. On GHA that means a `workflow_dispatch` call to the deploy blueprint's workflow file; on other providers, translate to the equivalent workflow-dispatch primitive (GitLab's pipeline API trigger, CircleCI's trigger-pipeline API, Buildkite's Trigger step, Jenkins parameterised build). The `versionId` input contract is unchanged across providers.
|
|
61
|
+
- Sibling asset packs (a v2.1 candidate) that ship per-provider full asset sets from the same `workflowShape` are the natural way to skip this hand-translation work for projects that live on one provider.
|
package/blueprints/{ci-pipeline → delivery-ci-workflows}/assets/report-samples/per-gate.json
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"gate": "validate",
|
|
3
|
-
"command": ["rcf", "validate"],
|
|
3
|
+
"command": ["rcf", "define", "validate"],
|
|
4
4
|
"toolVersion": "0.7.4",
|
|
5
5
|
"startedAt": "2026-08-24T10:15:03.221Z",
|
|
6
6
|
"endedAt": "2026-08-24T10:15:04.891Z",
|
|
@@ -8,5 +8,6 @@
|
|
|
8
8
|
"exitCode": 0,
|
|
9
9
|
"outcome": "passed",
|
|
10
10
|
"stdout": "[rcf] validate: 0 issue(s) across 47 document(s)\n",
|
|
11
|
-
"stderr": ""
|
|
11
|
+
"stderr": "",
|
|
12
|
+
"checkKind": "validate"
|
|
12
13
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "delivery-ci-workflows",
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"category": "delivery",
|
|
5
|
+
"contributions": [
|
|
6
|
+
{ "id": "delivery-ci-workflows-REQ-001", "kind": "req", "path": "requirements/delivery-ci-workflows-req-001.json" },
|
|
7
|
+
{ "id": "delivery-ci-workflows-REQ-002", "kind": "req", "path": "requirements/delivery-ci-workflows-req-002.json" },
|
|
8
|
+
{ "id": "delivery-ci-workflows-REQ-003", "kind": "req", "path": "requirements/delivery-ci-workflows-req-003.json" },
|
|
9
|
+
{ "id": "delivery-ci-workflows-REQ-004", "kind": "req", "path": "requirements/delivery-ci-workflows-req-004.json" },
|
|
10
|
+
{ "id": "delivery-ci-workflows-REQ-005", "kind": "req", "path": "requirements/delivery-ci-workflows-req-005.json" },
|
|
11
|
+
{ "id": "delivery-ci-workflows-REQ-006", "kind": "req", "path": "requirements/delivery-ci-workflows-req-006.json" },
|
|
12
|
+
{ "id": "delivery-ci-workflows-REQ-007", "kind": "req", "path": "requirements/delivery-ci-workflows-req-007.json" },
|
|
13
|
+
{ "id": "delivery-ci-workflows-REQ-008", "kind": "req", "path": "requirements/delivery-ci-workflows-req-008.json" },
|
|
14
|
+
{ "id": "delivery-ci-workflows-REQ-009", "kind": "req", "path": "requirements/delivery-ci-workflows-req-009.json" },
|
|
15
|
+
{ "id": "delivery-ci-workflows-REQ-010", "kind": "req", "path": "requirements/delivery-ci-workflows-req-010.json" },
|
|
16
|
+
{ "id": "delivery-ci-workflows-REQ-011", "kind": "req", "path": "requirements/delivery-ci-workflows-req-011.json" },
|
|
17
|
+
{ "id": "delivery-ci-workflows-REQ-012", "kind": "req", "path": "requirements/delivery-ci-workflows-req-012.json" },
|
|
18
|
+
{ "id": "delivery-ci-workflows-REQ-013", "kind": "req", "path": "requirements/delivery-ci-workflows-req-013.json" },
|
|
19
|
+
{ "id": "delivery-ci-workflows-REQ-014", "kind": "req", "path": "requirements/delivery-ci-workflows-req-014.json" },
|
|
20
|
+
{ "id": "delivery-ci-workflows-REQ-015", "kind": "req", "path": "requirements/delivery-ci-workflows-req-015.json" },
|
|
21
|
+
{ "id": "delivery-ci-workflows-REQ-016", "kind": "req", "path": "requirements/delivery-ci-workflows-req-016.json" },
|
|
22
|
+
{ "id": "delivery-ci-workflows-REQ-017", "kind": "req", "path": "requirements/delivery-ci-workflows-req-017.json" },
|
|
23
|
+
{ "id": "delivery-ci-workflows-REQ-018", "kind": "req", "path": "requirements/delivery-ci-workflows-req-018.json" },
|
|
24
|
+
{ "id": "delivery-ci-workflows-REQ-019", "kind": "req", "path": "requirements/delivery-ci-workflows-req-019.json" },
|
|
25
|
+
{ "id": "delivery-ci-workflows-REQ-020", "kind": "req", "path": "requirements/delivery-ci-workflows-req-020.json" },
|
|
26
|
+
{ "id": "delivery-ci-workflows-REQ-021", "kind": "req", "path": "requirements/delivery-ci-workflows-req-021.json" },
|
|
27
|
+
{ "id": "delivery-ci-workflows-REQ-022", "kind": "req", "path": "requirements/delivery-ci-workflows-req-022.json" },
|
|
28
|
+
{ "id": "delivery-ci-workflows-REQ-023", "kind": "req", "path": "requirements/delivery-ci-workflows-req-023.json" },
|
|
29
|
+
{ "id": "delivery-ci-workflows-US-6101", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6101.json" },
|
|
30
|
+
{ "id": "delivery-ci-workflows-US-6102", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6102.json" },
|
|
31
|
+
{ "id": "delivery-ci-workflows-US-6103", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6103.json" },
|
|
32
|
+
{ "id": "delivery-ci-workflows-US-6104", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6104.json" },
|
|
33
|
+
{ "id": "delivery-ci-workflows-US-6105", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6105.json" },
|
|
34
|
+
{ "id": "delivery-ci-workflows-US-6106", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6106.json" },
|
|
35
|
+
{ "id": "delivery-ci-workflows-US-6107", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6107.json" },
|
|
36
|
+
{ "id": "delivery-ci-workflows-US-6108", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6108.json" },
|
|
37
|
+
{ "id": "delivery-ci-workflows-US-6109", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6109.json" },
|
|
38
|
+
{ "id": "delivery-ci-workflows-US-6110", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6110.json" },
|
|
39
|
+
{ "id": "delivery-ci-workflows-US-6111", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6111.json" },
|
|
40
|
+
{ "id": "delivery-ci-workflows-US-6112", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6112.json" },
|
|
41
|
+
{ "id": "delivery-ci-workflows-US-6113", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6113.json" },
|
|
42
|
+
{ "id": "delivery-ci-workflows-US-6114", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6114.json" },
|
|
43
|
+
{ "id": "delivery-ci-workflows-US-6115", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6115.json" },
|
|
44
|
+
{ "id": "delivery-ci-workflows-US-6116", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6116.json" },
|
|
45
|
+
{ "id": "delivery-ci-workflows-US-6117", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6117.json" },
|
|
46
|
+
{ "id": "delivery-ci-workflows-US-6118", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6118.json" },
|
|
47
|
+
{ "id": "delivery-ci-workflows-US-6119", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6119.json" },
|
|
48
|
+
{ "id": "delivery-ci-workflows-US-6120", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6120.json" },
|
|
49
|
+
{ "id": "delivery-ci-workflows-US-6121", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6121.json" },
|
|
50
|
+
{ "id": "delivery-ci-workflows-US-6122", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6122.json" },
|
|
51
|
+
{ "id": "delivery-ci-workflows-US-6123", "kind": "us", "path": "user-stories/delivery-ci-workflows-us-6123.json" },
|
|
52
|
+
{ "id": "TAC-701-delivery-ci-workflows-gate-runner", "kind": "tac", "path": "tacs/tac-701-delivery-ci-workflows-gate-runner.json" },
|
|
53
|
+
{ "id": "TAC-702-delivery-ci-workflows-gate-report", "kind": "tac", "path": "tacs/tac-702-delivery-ci-workflows-gate-report.json" },
|
|
54
|
+
{ "id": "TAC-703-delivery-ci-workflows-aggregate-report", "kind": "tac", "path": "tacs/tac-703-delivery-ci-workflows-aggregate-report.json" },
|
|
55
|
+
{ "id": "TAC-704-delivery-ci-workflows-workflow-materialiser", "kind": "tac", "path": "tacs/tac-704-delivery-ci-workflows-workflow-materialiser.json" },
|
|
56
|
+
{ "id": "TAC-705-delivery-ci-workflows-release-workflow", "kind": "tac", "path": "tacs/tac-705-delivery-ci-workflows-release-workflow.json" },
|
|
57
|
+
{ "id": "TAC-706-delivery-ci-workflows-scheduled-audit", "kind": "tac", "path": "tacs/tac-706-delivery-ci-workflows-scheduled-audit.json" },
|
|
58
|
+
{
|
|
59
|
+
"id": "ADR-701-delivery-ci-workflows-ci-gates",
|
|
60
|
+
"kind": "adr",
|
|
61
|
+
"path": "adrs/adr-701-delivery-ci-workflows-ci-gates.json",
|
|
62
|
+
"scope": "global",
|
|
63
|
+
"topic": "ciGates"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"id": "ADR-702-delivery-ci-workflows-strict-coverage-gate",
|
|
67
|
+
"kind": "adr",
|
|
68
|
+
"path": "adrs/adr-702-delivery-ci-workflows-strict-coverage-gate.json",
|
|
69
|
+
"scope": "global",
|
|
70
|
+
"topic": "strictCoverageGate"
|
|
71
|
+
},
|
|
72
|
+
{ "id": "ADR-703-delivery-ci-workflows-node-only-runner", "kind": "adr", "path": "adrs/adr-703-delivery-ci-workflows-node-only-runner.json" },
|
|
73
|
+
{ "id": "ADR-704-delivery-ci-workflows-report-shape", "kind": "adr", "path": "adrs/adr-704-delivery-ci-workflows-report-shape.json" },
|
|
74
|
+
{ "id": "ADR-705-delivery-ci-workflows-elicitation-surface", "kind": "adr", "path": "adrs/adr-705-delivery-ci-workflows-elicitation-surface.json" },
|
|
75
|
+
{ "id": "ADR-706-delivery-ci-workflows-branch-model-defaults", "kind": "adr", "path": "adrs/adr-706-delivery-ci-workflows-branch-model-defaults.json" },
|
|
76
|
+
{ "id": "ADR-707-delivery-ci-workflows-release-workflow-shape", "kind": "adr", "path": "adrs/adr-707-delivery-ci-workflows-release-workflow-shape.json" },
|
|
77
|
+
{ "id": "ADR-708-delivery-ci-workflows-provider-hint-shape", "kind": "adr", "path": "adrs/adr-708-delivery-ci-workflows-provider-hint-shape.json" },
|
|
78
|
+
{
|
|
79
|
+
"id": "ADR-709-delivery-ci-workflows-release-artefacts",
|
|
80
|
+
"kind": "adr",
|
|
81
|
+
"path": "adrs/adr-709-delivery-ci-workflows-release-artefacts.json",
|
|
82
|
+
"scope": "global",
|
|
83
|
+
"topic": "releaseArtefacts"
|
|
84
|
+
},
|
|
85
|
+
{ "id": "ADR-710-delivery-ci-workflows-scheduled-audit", "kind": "adr", "path": "adrs/adr-710-delivery-ci-workflows-scheduled-audit.json" }
|
|
86
|
+
]
|
|
87
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adrId": "ADR-701-delivery-ci-workflows-ci-gates",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "2.0.0",
|
|
6
|
+
"status": "accepted",
|
|
7
|
+
"title": "The project's CI runs a fixed ordered required check set (mandatory tier plus the elicited subset from workflowShape.checkSet) whose completeness is the merge criterion",
|
|
8
|
+
"context": "Continuous integration surfaces are a matrix of trigger events, runner definitions, and gates. The interesting decision area is not the runner or the trigger (a small dial with obvious answers) but the check set: which checks run, in which order, and what does 'the pipeline passed' mean. A project that changes its check set silently loses the property that the pipeline meant the same thing across two runs. Naming the check set as a decision area (not a runtime knob) is what makes the pipeline a stable contract. v2 broadens the answer surface from the fixed v1.0.0 two-gate set to a two-tier catalogue: a mandatory tier (the two v1 gates, preserved verbatim) plus an elicited tier (linter, formatter, typecheck, unitTest, securityScan) the project turns on and off through `workflowShape.checkSet`.",
|
|
9
|
+
"decision": "The project's CI runs a fixed ordered required check set at every workflow that carries one. The mandatory tier runs first, in order, on every check-set workflow: `validate` (running `rcf define validate`) followed by `coverage-strict` (running `rcf audit coverage --strict`). The elicited tier runs after the mandatory tier: the checks the project turned on in `workflowShape.checkSet` (default: every catalogued check on) run in a stable but non-load-bearing order documented in the guide. The pipeline passes if and only if every required check's outcome is `passed`; a `failed` or `missing` outcome on any required check fails the pipeline. Adding a check kind the catalogue does not name (mutation-testing, contract-test, accessibility scan) is a project-level or blueprint-level ADR: a project that wants an extra required check supersedes this ADR with a project-level ADR listing the extended catalogue; a future blueprint that ships a new required check (a browser-verify pack, an observability probe pack) contributes its own scope:global ADR on the `ciGates` topic and lets composition surface the pairing.",
|
|
10
|
+
"consequences": "The pipeline's verdict is stable across runs of the same commit under the same rcf CLI version and the same `workflowShape`. Adding a check is a visible decision (either a `workflowShape.checkSet` flag flip or a project-level ADR); changing the check catalogue itself is a v2.x major bump. A project that wants a check the catalogue does not name owes a project-level ADR that supersedes this one and names the extended catalogue; the aggregate report's `gates[]` array then reflects the extended catalogue on every run. Composing blueprints that hold an opinion on the required-check set conflict on the `ciGates` topic: an observability-essentials blueprint that ships health-probe gates as required conflicts here by design and expects a project-level ADR to resolve the pairing (or the operator adopts one of the two blueprints).",
|
|
11
|
+
"alternativesConsidered": [
|
|
12
|
+
{
|
|
13
|
+
"name": "Ship the gate set as a runtime configuration knob rather than as an ADR",
|
|
14
|
+
"summary": "The runner reads the gate set from a config file or environment variable, and any project reconfigures without a decision record.",
|
|
15
|
+
"reasonNotChosen": "A gate set that can silently change is one whose meaning drifts. The value of the aggregate report as a stable contract collapses if two runs of the same commit can have different gate sets. Making the gate set an ADR forces the reasoning to be recorded and forces a composing blueprint to conflict explicitly."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Ship a maximal required-check set at v2.0.0 (mandatory tier plus every plausible elicited check plus adherence packs plus browser-verify)",
|
|
19
|
+
"summary": "The pipeline runs every check the mechanism offers as required by default, with no elicitation surface.",
|
|
20
|
+
"reasonNotChosen": "The mechanism-reach principle for blueprints (authoring standard, section 7) says a blueprint should not compel a check the project has no reasonable path to satisfy. Adherence packs and browser-verify probes belong in future blueprints that ship the surface they enforce; requiring them here would leave every fresh project failing its pipeline until it realises those surfaces. The mandatory tier plus the five elicited checks the project turns on and off is the right v2.0.0 floor."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "Keep the v1.0.0 fixed two-gate set at v2",
|
|
24
|
+
"summary": "The check set stays at `validate` + `coverage-strict`; the elicited tier does not ship.",
|
|
25
|
+
"reasonNotChosen": "Lint, formatter, typecheck, unit-test, and security-scan are checks a project engineer expects to find in a general-purpose CI floor; leaving v2 at the v1 two-gate set does not close that gap and leaves every consuming project reinventing the elicited tier as a project-level ADR."
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"createdAt": "2026-08-24T00:00:00Z",
|
|
29
|
+
"updatedAt": "2026-08-24T00:00:00Z"
|
|
30
|
+
}
|