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,51 @@
|
|
|
1
|
+
# Workers wrangler.toml integration note
|
|
2
|
+
|
|
3
|
+
The wrangler-side configuration a project needs when the Clerk middleware runs inside a Cloudflare Worker. This is a composition boundary between this blueprint (owns the middleware and session-verifier contracts) and `deploy-cloudflare-workers` (owns the wrangler shape); the notes below are the Clerk-specific overlay a Workers deployer applies on top of that blueprint's wrangler-toml sample.
|
|
4
|
+
|
|
5
|
+
## The Clerk-specific overlay
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
# wrangler.toml - Clerk-specific overlay
|
|
9
|
+
compatibility_flags = ["nodejs_compat"]
|
|
10
|
+
|
|
11
|
+
[vars]
|
|
12
|
+
# Public URL of the Clerk-hosted sign-in surface. Not a secret; safe to
|
|
13
|
+
# commit. The middleware's HTML refusal path redirects here.
|
|
14
|
+
CLERK_SIGN_IN_URL = "https://<clerk-subdomain>.accounts.dev/sign-in"
|
|
15
|
+
|
|
16
|
+
[assets]
|
|
17
|
+
directory = "./public"
|
|
18
|
+
binding = "ASSETS"
|
|
19
|
+
# Every auth-gated route that could collide with a static file must appear
|
|
20
|
+
# here, or the assets binding serves the static file BEFORE the fetch
|
|
21
|
+
# handler runs and the middleware is silently bypassed. See the composition
|
|
22
|
+
# note below.
|
|
23
|
+
run_worker_first = ["/api/*", "/sign-in"]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Secrets are declared by name only, in the deploy blueprint's discipline: no `[secrets]` block in wrangler.toml (that block is decorative and not honoured by wrangler at 4.x, per the deploy blueprint's F-009 fix), and no value in any committed file. The two names the Clerk middleware reads are:
|
|
27
|
+
|
|
28
|
+
- `CLERK_SECRET_KEY` - server-side Clerk API key, read as `env.CLERK_SECRET_KEY` by `session-verifier.mjs`.
|
|
29
|
+
- `CLERK_PUBLISHABLE_KEY` - Clerk publishable key, read as `env.CLERK_PUBLISHABLE_KEY` by `session-verifier.mjs`.
|
|
30
|
+
|
|
31
|
+
Bootstrap-and-steady-state guidance for setting the values lives on the deploy blueprint's `bootstrap-vs-steady-state.md` asset; the shape is the same for both Clerk secrets.
|
|
32
|
+
|
|
33
|
+
## The auth-gate bypass finding
|
|
34
|
+
|
|
35
|
+
The default `[assets]` binding on a Cloudflare Worker serves any file in the assets directory at its path before the Worker's `fetch` handler runs. If an auth-gated route (`/notes` for a UI page, `/api/notes` for an API surface) collides with a static file at the same path, the static file is served without ever hitting the middleware. This is a silent auth bypass at ship time; a project ships assuming the middleware protects `/notes` and only finds out on the first live probe that `/notes` returned the HTML shell to an unauthenticated request.
|
|
36
|
+
|
|
37
|
+
The `run_worker_first` array is the wrangler-side fix: every path listed there is routed through the fetch handler before the assets binding gets a chance. A project on the middleware boundary shape should list every auth-gated route class on the list.
|
|
38
|
+
|
|
39
|
+
The composition responsibility is shared: `deploy-cloudflare-workers` teaches the mechanism (`run_worker_first` in wrangler-toml-shape.md, its US-12101 AC-12101-4 is the runtime-observable acceptance), and this blueprint teaches which routes need it (every auth-gated one on the project's HTTP surface). Neither blueprint carries the project's route list; that emerges from the project's own routing surface.
|
|
40
|
+
|
|
41
|
+
## What is NOT taught here
|
|
42
|
+
|
|
43
|
+
- **Which routes are gated.** The blueprint fixes the middleware boundary shape and the auth model. The concrete route list is a project decision the wrangler.toml integrates against.
|
|
44
|
+
- **How the assets binding composes with static-first vs worker-first per-path routing.** The rules and mechanism belong to the deploy blueprint.
|
|
45
|
+
- **Custom-domain vs workers.dev-only production URL.** Same: deploy blueprint concern. The Clerk overlay above is identical either way.
|
|
46
|
+
|
|
47
|
+
## Notes
|
|
48
|
+
|
|
49
|
+
- The `CLERK_SIGN_IN_URL` var is not a secret. Committing it in `wrangler.toml [vars]` is the default; a project that wants the value to differ across environments moves it to an environment-specific `[env.<name>.vars]` block per wrangler's standard shape.
|
|
50
|
+
- The `nodejs_compat` flag is required because `@clerk/backend` relies on Node built-ins. Without it, the Worker fails to start with a runtime error naming the missing built-in.
|
|
51
|
+
- Reading the secret at request time from `env` (not at module top-level from `process.env`) is what the workers-fetch-shape sample's `createVerify` factory does; the two files together are the enabling shape.
|
|
@@ -10,7 +10,7 @@ This file is the security-auth-clerk half of the cross-blueprint contract. The P
|
|
|
10
10
|
|
|
11
11
|
The security-auth-clerk blueprint claims one global topic. Every other contribution is scope-local (ADR-1002 through ADR-1005 name the middleware-boundary shape, the authorisation-adapter contract, the claims-mapping discipline, and the session-lifecycle posture without contributing global topics; a composing blueprint that holds a different opinion on any of them authors its own project-level ADR if it wants to override).
|
|
12
12
|
|
|
13
|
-
Rules for new topics (inherited from the application-spa, application-api-rest, security-auth-magic-link, persistence-data-sqlite, ci-
|
|
13
|
+
Rules for new topics (inherited from the application-spa, application-api-rest, security-auth-magic-link, persistence-data-sqlite, delivery-ci-workflows, observability-essentials, and security-secrets-management vocabularies, restated as law): lower camel case, one concept per topic, no version suffixes. A topic names the decision area, not the chosen answer. Do not mint variants of existing strings (`identity`, `identityProvider`, `authVendor`, `signIn` are all wrong when `authModel` already exists).
|
|
14
14
|
|
|
15
15
|
## Id number bands (registry bootstrap)
|
|
16
16
|
|
|
@@ -26,7 +26,7 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
26
26
|
| email-smtp-resend | 4101-4899 | 4xx | shipped v1.0.0 | none |
|
|
27
27
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
28
28
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
29
|
-
| ci-
|
|
29
|
+
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
30
30
|
| observability-essentials | 7101-7899 | 8xx | shipped v1.0.0 | `healthProbes`, `readinessSemantics`, `statusPageContract` |
|
|
31
31
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
32
32
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
@@ -66,6 +66,15 @@ A project applies the blueprint on a fresh tree, provisions a Clerk development
|
|
|
66
66
|
- Provisioning-script directory location (`scripts/provisioning/` by convention on AC-9110-1, or a project-declared equivalent). Blueprint owns that provisioning is not a request handler; project owns where the scripts live.
|
|
67
67
|
- Whether to layer a project-authored Clerk-webhook consumer (for user-created, session-ended, or organisation-membership-changed events). Blueprint's default omits it; a project that adds one authors one TAC and one ADR alongside this blueprint's contributions.
|
|
68
68
|
|
|
69
|
+
## Runtime coverage
|
|
70
|
+
|
|
71
|
+
The middleware boundary contract (TAC-1001's `verify(request) -> { authenticated, principal?, reason? }`) is framework-agnostic and runs unchanged on Node HTTP servers (Express, Fastify) and on the Cloudflare Workers fetch handler. Two sample sets ship in `assets/`:
|
|
72
|
+
|
|
73
|
+
- `assets/middleware/node-middleware-shape.md` for Express and Fastify: adapter wrappers around `verify(request)` that attach the reduced `Principal` to `request.auth`.
|
|
74
|
+
- `assets/middleware/workers-fetch-shape.md` and `assets/wiring/workers-wrangler-toml-shape.md` for Cloudflare Workers: a fetch-handler adapter that carries the same `verify(request)` contract onto the Fetch API `Request` shape, plus the wrangler.toml overlay (`nodejs_compat`, the two Clerk secret names, the `CLERK_SIGN_IN_URL` var, and the `run_worker_first` posture on auth-gated routes that the assets binding would otherwise silently bypass).
|
|
75
|
+
|
|
76
|
+
A project on a single framework picks up one adapter and pays nothing for the others; a project that hosts multiple runtimes (a Node main app plus a Workers edge function against the same Clerk instance) picks up both sample sets and shares one session verifier and one claims mapper across them.
|
|
77
|
+
|
|
69
78
|
## Cost-honesty paragraph
|
|
70
79
|
|
|
71
80
|
Shipping this doc set costs the project the following. Clerk is a paid vendor beyond the development tier; the operator budgets for it. The `accountBound` runtime-verify posture means the CI runner needs Clerk reachability to actually verify the runtime-verify ACs; a CI runner without outbound network for that vendor either skips those ACs (which the ship gate flags) or the operator wires a preview Clerk instance for CI to reach. The middleware boundary discipline (`request.auth` and `can`/`assert` everywhere) is a code-review load on every new handler; a project that lets the discipline slip loses the vendor-swap-safety the blueprint is buying. The `revocationCheckIntervalMs` window is a stated trade between per-request cost and sign-out prompt-ness; the operator picks a number that reflects the project's actual policy, not the blueprint's default forever. The read-only provisioning posture forces the operator to run Clerk mutations outside the request lifecycle; a project that wants a per-request user-create call is on a different pattern and should think again. The blueprint says nothing about MFA policy, about pricing, about SLA, or about vendor-lock exit; a project that needs any of those spends its own build cycles on them and this blueprint does not save it any work there.
|
|
@@ -10,7 +10,7 @@ This file is the security-auth-keycloak half of the cross-blueprint contract. Th
|
|
|
10
10
|
|
|
11
11
|
The security-auth-keycloak blueprint claims one global topic. Every other contribution is scope-local (ADR-1202 through ADR-1206 name the verification-mode choice, the provider-routing seam, the session-vs-token contract, the JWKS rotation-cache lifetime, and the refresh-and-sign-out posture without contributing global topics; a composing blueprint that holds a different opinion on any of them authors its own project-level ADR if it wants to override).
|
|
12
12
|
|
|
13
|
-
Rules for new topics (inherited from the application-spa, application-api-rest, security-auth-magic-link, security-auth-clerk, security-auth-oauth2, persistence-data-sqlite, ci-
|
|
13
|
+
Rules for new topics (inherited from the application-spa, application-api-rest, security-auth-magic-link, security-auth-clerk, security-auth-oauth2, persistence-data-sqlite, delivery-ci-workflows, observability-essentials, and security-secrets-management vocabularies, restated as law): lower camelCase, one concept per topic, no version suffixes. A topic names the decision area, not the chosen answer. Do not mint variants of existing strings (`auth`, `authentication`, `identityProvider`, `keycloakProvider` are all wrong when `authModel` already exists).
|
|
14
14
|
|
|
15
15
|
## The deliberate authModel conflict, restated
|
|
16
16
|
|
|
@@ -37,7 +37,7 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
37
37
|
| email-smtp-resend | 4101-4899 | 4xx | shipped v1.0.0 | none |
|
|
38
38
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
39
39
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
40
|
-
| ci-
|
|
40
|
+
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
41
41
|
| observability-essentials | 7101-7899 | 8xx | shipped v1.0.0 | `healthProbes`, `readinessSemantics`, `statusPageContract` |
|
|
42
42
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
43
43
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
@@ -21,7 +21,7 @@ Phase 1 resolves local path sources only; registry and git-ref resolution is a m
|
|
|
21
21
|
| Principal registry samples | `assets/principal-registry-samples/single-address.md` | The single-address registry implementation for solo-operator deployments |
|
|
22
22
|
| Principal registry samples | `assets/principal-registry-samples/allow-list-file.md` | An allow-list file registry pattern for small teams |
|
|
23
23
|
| Guide | `guide/security-auth-magic-link.md` | Operator-facing: when to use it, when not, what stays your call, and the promotion signal for the future auth-oidc blueprint |
|
|
24
|
-
| Coordination vocabulary | `docs/topics.md` | The one global-topic string this blueprint contributes, the shared id band registry (application-spa, application-api-rest, security-auth-magic-link, hello-panel, persistence-data-sqlite, ci-
|
|
24
|
+
| Coordination vocabulary | `docs/topics.md` | The one global-topic string this blueprint contributes, the shared id band registry (application-spa, application-api-rest, security-auth-magic-link, hello-panel, persistence-data-sqlite, delivery-ci-workflows, observability-essentials) |
|
|
25
25
|
|
|
26
26
|
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`.
|
|
27
27
|
|
|
@@ -26,7 +26,7 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
26
26
|
| email-smtp-resend | 4101-4899 | 4xx | shipped v1.0.0 | none |
|
|
27
27
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
28
28
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
29
|
-
| ci-
|
|
29
|
+
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
30
30
|
| observability-essentials | 7101-7899 | 8xx | shipped v1.0.0 | `healthProbes`, `readinessSemantics`, `statusPageContract` |
|
|
31
31
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
32
32
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
@@ -23,7 +23,7 @@ Composing with `security-auth-magic-link`, `security-auth-clerk`, or any other b
|
|
|
23
23
|
| Mock provider bootstrap | `assets/mock-provider/mock-oidc-shape.md` | The shape of a local mock OIDC provider stood up per REQ-010's acceptance-bar AC; the file names the endpoints, the JWKS shape, and the token minting shape without committing a specific library version |
|
|
24
24
|
| Provider selector sample | `assets/provider-selector/list-shape.md` | The rendering shape the reference selector emits and the query-parameter contract a bespoke replacement honours |
|
|
25
25
|
| Guide | `guide/security-auth-oauth2.md` | Operator-facing: when to use it, when not, the promotion signals for the Clerk and Keycloak siblings, the operator decisions that remain open, the cost-honesty paragraph |
|
|
26
|
-
| Coordination vocabulary | `docs/topics.md` | The one global-topic string this blueprint contributes and the shared id band registry (application-spa, application-api-rest, security-auth-magic-link, email-smtp-resend, persistence-data-sqlite, ci-
|
|
26
|
+
| Coordination vocabulary | `docs/topics.md` | The one global-topic string this blueprint contributes and the shared id band registry (application-spa, application-api-rest, security-auth-magic-link, email-smtp-resend, persistence-data-sqlite, delivery-ci-workflows, observability-essentials, security-secrets-management, security-auth-clerk, security-auth-oauth2) |
|
|
27
27
|
|
|
28
28
|
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`.
|
|
29
29
|
|
|
@@ -10,7 +10,7 @@ This file is the security-auth-oauth2 half of the cross-blueprint contract. The
|
|
|
10
10
|
|
|
11
11
|
The security-auth-oauth2 blueprint claims one global topic. Every other contribution is scope-local (ADR-1102 through ADR-1106 name the provider-abstraction contract shape, the PKCE discipline, the session-bridge shape, the refresh-token posture, and the multi-provider routing without contributing global topics; a composing blueprint that holds a different opinion on any of them authors its own project-level ADR if it wants to override).
|
|
12
12
|
|
|
13
|
-
Rules for new topics (inherited from the application-spa, application-api-rest, security-auth-magic-link, security-auth-clerk, persistence-data-sqlite, ci-
|
|
13
|
+
Rules for new topics (inherited from the application-spa, application-api-rest, security-auth-magic-link, security-auth-clerk, persistence-data-sqlite, delivery-ci-workflows, observability-essentials, and security-secrets-management vocabularies, restated as law): lower camelCase, one concept per topic, no version suffixes. A topic names the decision area, not the chosen answer. Do not mint variants of existing strings (`auth`, `authentication`, `identityProvider`, `oauthProvider` are all wrong when `authModel` already exists).
|
|
14
14
|
|
|
15
15
|
## The deliberate authModel conflict, restated
|
|
16
16
|
|
|
@@ -37,7 +37,7 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
37
37
|
| email-smtp-resend | 4101-4899 | 4xx | shipped v1.0.0 | none |
|
|
38
38
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
39
39
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
40
|
-
| ci-
|
|
40
|
+
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
41
41
|
| observability-essentials | 7101-7899 | 8xx | shipped v1.0.0 | `healthProbes`, `readinessSemantics`, `statusPageContract` |
|
|
42
42
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
43
43
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
@@ -21,7 +21,7 @@ Phase 1 resolves local path sources only; registry and git-ref resolution is a m
|
|
|
21
21
|
| Agent access pattern | `assets/cli-usage/agent-access-pattern.md` | The piped-stdin pattern for `secrets read` and `secrets put`, including a Node.js spawn wrapper that keeps the value off argv and off any log line |
|
|
22
22
|
| UI three-way choice | `assets/ui-integration/three-way-choice.md` | The elicitation script for the admin-UI choice with the shape of each outcome and the field contract for the `integrate` variant |
|
|
23
23
|
| Guide | `guide/security-secrets-management.md` | Operator-facing: when to use it, when not, what stays your call, and the promotion signals for the hosted-vendor and admin-SPA companion blueprints |
|
|
24
|
-
| Coordination vocabulary | `docs/topics.md` | The one global-topic string this blueprint contributes and the shared id band registry (application-spa, application-api-rest, security-auth-magic-link, hello-panel, persistence-data-sqlite, ci-
|
|
24
|
+
| Coordination vocabulary | `docs/topics.md` | The one global-topic string this blueprint contributes and the shared id band registry (application-spa, application-api-rest, security-auth-magic-link, hello-panel, persistence-data-sqlite, delivery-ci-workflows, observability-essentials, security-secrets-management) |
|
|
25
25
|
|
|
26
26
|
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`.
|
|
27
27
|
|
|
@@ -6,11 +6,11 @@ This file is the security-secrets-management half of the cross-blueprint contrac
|
|
|
6
6
|
|
|
7
7
|
| Topic string | security-secrets-management contribution | Origin | Composition note |
|
|
8
8
|
|---|---|---|---|
|
|
9
|
-
| `secretsSource` | ADR-901-security-secrets-management-secrets-source | Minted here; pre-cleared as unclaimed against application-spa (`clientRouting`, `theming`, `clientState`, `errorEnvelope`, `authModel`), application-api-rest (`errorEnvelope`, `authModel`, `apiVersioning`, `logging`), security-auth-magic-link (`authModel`), persistence-data-sqlite (`persistenceStore`, `migrationDiscipline`), ci-
|
|
9
|
+
| `secretsSource` | ADR-901-security-secrets-management-secrets-source | Minted here; pre-cleared as unclaimed against application-spa (`clientRouting`, `theming`, `clientState`, `errorEnvelope`, `authModel`), application-api-rest (`errorEnvelope`, `authModel`, `apiVersioning`, `logging`), security-auth-magic-link (`authModel`), persistence-data-sqlite (`persistenceStore`, `migrationDiscipline`), delivery-ci-workflows (`ciGates`, `strictCoverageGate`), observability-essentials (`healthProbes`, `readinessSemantics`, `statusPageContract`), and the hello-panel walkthrough exemplar (`operatorPanel`) | The one project-wide source of truth for secret material: a repo-root `secrets.yaml` manifest plus a vendor-agnostic Secrets Manager client. A composing blueprint that holds a different opinion on the secrets source (a vendor-committed opinionated blueprint, a config-server pattern, a plaintext-committed pattern for a public reference project) contributes its own scope:global ADR on this exact string and lets composition surface the pairing. Expected resolution: one project-level ADR that fixes the source shape and the vendor selection |
|
|
10
10
|
|
|
11
11
|
The security-secrets-management blueprint claims one global topic. Every other contribution is scope-local (ADR-902 through ADR-905 name the default vendor, the agent access discipline, the `.env` reflection posture, and the rotation-and-audit posture without contributing global topics; a composing blueprint that holds a different opinion on any of them authors its own project-level ADR if it wants to override).
|
|
12
12
|
|
|
13
|
-
Rules for new topics (inherited from the application-spa, application-api-rest, security-auth-magic-link, persistence-data-sqlite, ci-
|
|
13
|
+
Rules for new topics (inherited from the application-spa, application-api-rest, security-auth-magic-link, persistence-data-sqlite, delivery-ci-workflows, and observability vocabularies, restated as law): lower camel case, one concept per topic, no version suffixes. A topic names the decision area, not the chosen answer. Do not mint variants of existing strings (`secrets`, `secretsStore`, `vault`, `secretsVendor`, `credentialsSource` are all wrong when `secretsSource` already exists).
|
|
14
14
|
|
|
15
15
|
## Id number bands (registry bootstrap)
|
|
16
16
|
|
|
@@ -26,7 +26,7 @@ This table is maintained shelf-wide across every blueprint's `docs/topics.md`. R
|
|
|
26
26
|
| email-smtp-resend | 4101-4899 | 4xx | shipped v1.0.0 | none |
|
|
27
27
|
| hello-panel (walkthrough exemplar) | 4101-4899 | 4xx | doc-reserved; teaching exemplar in `packages/rcf-lite/docs/blueprint-authoring-walkthrough.md`, not shipped as a blueprint directory | `operatorPanel` |
|
|
28
28
|
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
29
|
-
| ci-
|
|
29
|
+
| delivery-ci-workflows | 6101-6899 | 7xx | shipped v2.0.0 (renamed from ci-pipeline) | `ciGates`, `strictCoverageGate`, `releaseArtefacts` |
|
|
30
30
|
| observability-essentials | 7101-7899 | 8xx | shipped v1.0.0 | `healthProbes`, `readinessSemantics`, `statusPageContract` |
|
|
31
31
|
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
32
32
|
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
@@ -264,7 +264,7 @@ One condensed pass against this repository's own tree, captured at build time. Q
|
|
|
264
264
|
|
|
265
265
|
```
|
|
266
266
|
$ rcf build
|
|
267
|
-
# Build queue: BS-001 - RCF
|
|
267
|
+
# Build queue: BS-001 - RCF Lite initial delivery
|
|
268
268
|
|
|
269
269
|
Generation strategy: dependencyFirst
|
|
270
270
|
|
|
@@ -311,7 +311,7 @@ Two actionable items, and the tier column says how they relate: FBS-013 and FBS-
|
|
|
311
311
|
- Estimated hours: 7
|
|
312
312
|
- Risk level: medium
|
|
313
313
|
- Domain: guidance
|
|
314
|
-
- Parent chain: BS-001 -> PRD-001 (RCF
|
|
314
|
+
- Parent chain: BS-001 -> PRD-001 (RCF Lite)
|
|
315
315
|
```
|
|
316
316
|
|
|
317
317
|
Mark pickup, and the cycle is running:
|
|
@@ -26,7 +26,7 @@ One page per document type, the reference rule that keeps the tree drift-proof,
|
|
|
26
26
|
|
|
27
27
|
**TC (Test Case).** One test: which AC it verifies, where the executable test lives (its test pointer), and its status.
|
|
28
28
|
|
|
29
|
-
**CN (Code Node).** The spec-to-code bridge: a working-tree source path, optionally `#symbol`-suffixed, that implements one or more acceptance criteria (`implementsAcIds`, which may be empty - an orphan CN is a legitimate state for utilities and glue code). `rcf define validate` checks every CN's path/symbol against the working tree, so a rename or deletion that leaves the pointer dangling is caught the same way a broken spec-side reference is. Author CNs during Stage 2 of the build cycle (see below), not after: `rcf build mark <fbs-id> complete` refuses when an in-scope acceptance criterion has none. Full detail, including the honest limits, is `docs/code-nodes.md` in the rcf-
|
|
29
|
+
**CN (Code Node).** The spec-to-code bridge: a working-tree source path, optionally `#symbol`-suffixed, that implements one or more acceptance criteria (`implementsAcIds`, which may be empty - an orphan CN is a legitimate state for utilities and glue code). `rcf define validate` checks every CN's path/symbol against the working tree, so a rename or deletion that leaves the pointer dangling is caught the same way a broken spec-side reference is. Author CNs during Stage 2 of the build cycle (see below), not after: `rcf build mark <fbs-id> complete` refuses when an in-scope acceptance criterion has none. Full detail, including the honest limits, is `docs/code-nodes.md` in the rcf-lite repo.
|
|
30
30
|
|
|
31
31
|
## Edges live on the child
|
|
32
32
|
|
|
@@ -222,6 +222,19 @@ ask for. A failure the operator has to point out is a failure you did
|
|
|
222
222
|
not check for. The depth for each stage's self-check lives in the
|
|
223
223
|
build-cycle playbook.
|
|
224
224
|
|
|
225
|
+
### RULE 14: Check freshness at session start; offer, never install.
|
|
226
|
+
|
|
227
|
+
At the start of a new session on this project, run `rcf version --check`
|
|
228
|
+
(one call, silent on network trouble) and note the result. If a newer
|
|
229
|
+
release is available, tell the operator in one line what changed and
|
|
230
|
+
OFFER the upgrade. The exact command to run depends on how rcf-lite is
|
|
231
|
+
installed here (global npm, per-repo dep, npx pin); propose the command
|
|
232
|
+
that matches this repo's setup and wait for the operator's yes before
|
|
233
|
+
running it. If the check reports `status: "unknown"` (offline, cache
|
|
234
|
+
miss, feed unreachable) say nothing to the operator; freshness is a
|
|
235
|
+
convenience, not a gate. Never run the upgrade without the operator's
|
|
236
|
+
explicit go.
|
|
237
|
+
|
|
225
238
|
### Session start
|
|
226
239
|
|
|
227
240
|
Run `rcf define validate`. A broken tree is fixed or reported before anything
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
a36dfe0d47c57bafa2ace121e7390fac95c7fff70ee362e864adf75c07be190a
|
|
@@ -209,6 +209,19 @@ ask for. A failure the operator has to point out is a failure you did
|
|
|
209
209
|
not check for. The depth for each stage's self-check lives in the
|
|
210
210
|
build-cycle playbook.
|
|
211
211
|
|
|
212
|
+
### RULE 14: Check freshness at session start; offer, never install.
|
|
213
|
+
|
|
214
|
+
At the start of a new session on this project, run `rcf version --check`
|
|
215
|
+
(one call, silent on network trouble) and note the result. If a newer
|
|
216
|
+
release is available, tell the operator in one line what changed and
|
|
217
|
+
OFFER the upgrade. The exact command to run depends on how rcf-lite is
|
|
218
|
+
installed here (global npm, per-repo dep, npx pin); propose the command
|
|
219
|
+
that matches this repo's setup and wait for the operator's yes before
|
|
220
|
+
running it. If the check reports `status: "unknown"` (offline, cache
|
|
221
|
+
miss, feed unreachable) say nothing to the operator; freshness is a
|
|
222
|
+
convenience, not a gate. Never run the upgrade without the operator's
|
|
223
|
+
explicit go.
|
|
224
|
+
|
|
212
225
|
### Session start
|
|
213
226
|
|
|
214
227
|
Run `rcf define validate`. A broken tree is fixed or reported before anything
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rcf-lite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "One-install tooling for the Requirements Confidence Framework (RCF): the unified `rcf` CLI grouped into the five RCF tool groups (discover, define, build, verify, audit) plus a small core set (init, doctor, guidance, mcp), an MCP server, the live tree viewer and the fresh-context adversarial ship-gate verifier. Consumes @stravica-ai/rcf-schemas.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"src",
|
|
28
28
|
"guidance",
|
|
29
29
|
"rcf",
|
|
30
|
+
"releases",
|
|
30
31
|
"fixtures",
|
|
31
32
|
"blueprints",
|
|
32
33
|
"scripts/preinstall-node-check.mjs",
|
|
@@ -38,17 +39,6 @@
|
|
|
38
39
|
"registry": "https://registry.npmjs.org/",
|
|
39
40
|
"access": "public"
|
|
40
41
|
},
|
|
41
|
-
"scripts": {
|
|
42
|
-
"test": "node --test --test-concurrency=1 'test/**/*.test.js'",
|
|
43
|
-
"vendor": "node scripts/vendor-mermaid.mjs",
|
|
44
|
-
"build:managed": "node scripts/gen-managed-artefacts.mjs",
|
|
45
|
-
"canary:register": "node scripts/canary-register.mjs",
|
|
46
|
-
"stage:blueprints": "node scripts/stage-blueprint-shelf.mjs",
|
|
47
|
-
"preinstall": "node scripts/preinstall-node-check.mjs",
|
|
48
|
-
"prepack": "node scripts/stage-blueprint-shelf.mjs",
|
|
49
|
-
"prepublishOnly": "node scripts/gen-managed-artefacts.mjs && node scripts/stage-blueprint-shelf.mjs",
|
|
50
|
-
"rcf": "node bin/rcf.js"
|
|
51
|
-
},
|
|
52
42
|
"repository": {
|
|
53
43
|
"type": "git",
|
|
54
44
|
"url": "git+https://github.com/Stravica/rcf-lite.git",
|
|
@@ -70,12 +60,23 @@
|
|
|
70
60
|
"#admissibility": "./src/admissibility/index.js"
|
|
71
61
|
},
|
|
72
62
|
"dependencies": {
|
|
73
|
-
"@stravica-ai/rcf-schemas": "0.5.
|
|
63
|
+
"@stravica-ai/rcf-schemas": "0.5.1",
|
|
74
64
|
"ajv": "^8.20.0",
|
|
75
65
|
"ajv-formats": "^3.0.1"
|
|
76
66
|
},
|
|
77
67
|
"devDependencies": {
|
|
78
68
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
69
|
+
"js-yaml": "^4.1.0",
|
|
79
70
|
"mermaid": "11.6.0"
|
|
71
|
+
},
|
|
72
|
+
"scripts": {
|
|
73
|
+
"test": "node --test --test-concurrency=1 'test/**/*.test.js'",
|
|
74
|
+
"vendor": "node scripts/vendor-mermaid.mjs",
|
|
75
|
+
"build:managed": "node scripts/gen-managed-artefacts.mjs",
|
|
76
|
+
"canary:register": "node scripts/canary-register.mjs",
|
|
77
|
+
"validate:releases": "node scripts/validate-releases.mjs",
|
|
78
|
+
"stage:blueprints": "node scripts/stage-blueprint-shelf.mjs",
|
|
79
|
+
"preinstall": "node scripts/preinstall-node-check.mjs",
|
|
80
|
+
"rcf": "node bin/rcf.js"
|
|
80
81
|
}
|
|
81
|
-
}
|
|
82
|
+
}
|
package/rcf/adrs/adr-001.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"version": "0.1.0",
|
|
6
6
|
"status": "accepted",
|
|
7
7
|
"title": "Local filesystem is the single source of truth",
|
|
8
|
-
"context": "RCF
|
|
8
|
+
"context": "RCF Lite must guarantee that a project's RCF documents live in the source repository, beside the code. v1 tooling operated over the GitHub API rather than the local repo, which broke the in-repository differentiator and tied the tool to a network surface.",
|
|
9
9
|
"decision": "Every read and write targets the local rcf tree directly. No external service, cache or database mirrors the documents. The CLI, the MCP server and the build loop all reach the filesystem only through the document store.",
|
|
10
10
|
"consequences": "The tool works offline and stays harness-agnostic. There is no sync problem and no second source to drift. The cost is that any multi-user or hosted scenario is out of scope by construction, which matches the product boundaries.",
|
|
11
11
|
"alternativesConsidered": [
|
package/rcf/adrs/adr-009.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"name": "Build an independent-gate subsystem now",
|
|
15
|
-
"summary": "Solve the independent-verification problem inside rcf-
|
|
15
|
+
"summary": "Solve the independent-verification problem inside rcf-lite immediately.",
|
|
16
16
|
"reasonNotChosen": "That is a separate product being scoped at HQ; duplicating it here pre-empts a repo reshape and over-builds the lite tier. The Tier-1 scope is guidance, not a gate."
|
|
17
17
|
}
|
|
18
18
|
],
|
package/rcf/build-sequence.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"prdId": "PRD-001",
|
|
4
4
|
"version": "0.1.0",
|
|
5
5
|
"status": "draft",
|
|
6
|
-
"title": "RCF
|
|
6
|
+
"title": "RCF Lite initial delivery",
|
|
7
7
|
"buildPhilosophy": "Dependency-first. Build the document store, then the read-only view surface, then mutating CRUD, then the query layer, then the build loop, then the MCP surface over everything below. Each layer is usable on its own before the next is added.",
|
|
8
8
|
"generationStrategy": "dependencyFirst",
|
|
9
9
|
"createdAt": "2026-06-25T00:00:00Z",
|
package/rcf/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "2.0.0",
|
|
3
|
-
"projectName": "RCF
|
|
4
|
-
"description": "RCF tree for the RCF
|
|
3
|
+
"projectName": "RCF Lite",
|
|
4
|
+
"description": "RCF tree for the RCF Lite product. Manifest declares the three root documents; every other document is discovered by walking from the roots.",
|
|
5
5
|
"prd": {
|
|
6
6
|
"id": "PRD-001",
|
|
7
7
|
"path": "prd.json"
|
package/rcf/prd.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"prdId": "PRD-001",
|
|
3
|
-
"productName": "RCF
|
|
3
|
+
"productName": "RCF Lite",
|
|
4
4
|
"version": "0.1.0",
|
|
5
5
|
"status": "draft",
|
|
6
|
-
"executiveSummary": "RCF
|
|
6
|
+
"executiveSummary": "RCF Lite is the tooling product of the RCF suite. It runs the full Requirements Confidence Framework over a project whose RCF documents live in the source repository, alongside the code. It gives a non-engineering product owner deterministic create, read, update and delete operations on every RCF document type, a visual review surface, traceability and query, a build loop that turns build specifications into implementation prompts, and a local MCP surface that exposes all of this to AI tooling.",
|
|
7
7
|
"problemStatement": "Power vibe-coders build real applications without engineering teams. They cannot read code, so they cannot judge whether what an AI tool produces is trustworthy. The full RCF chain makes output trustworthy without reading code, but authoring that chain by hand is the very effort these users lack the time and discipline for. There is no tool that runs the full RCF method over in-repository documents and surfaces it through structured, deterministic operations.",
|
|
8
8
|
"targetUsers": [
|
|
9
9
|
"Power vibe-coders: product owners, founders and business voices building applications without engineering teams",
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# rcf-lite release feed source of truth.
|
|
2
|
+
#
|
|
3
|
+
# This file is the single source that the docs site (stravica.ai) reads
|
|
4
|
+
# at build time to publish the machine-readable feed at
|
|
5
|
+
# https://stravica.ai/docs/rcf/releases.json
|
|
6
|
+
# and that the rcf-lite package's prepublishOnly step validates against
|
|
7
|
+
# `package.json:version` so a release cannot ship without its own entry.
|
|
8
|
+
#
|
|
9
|
+
# Contract lives in
|
|
10
|
+
# projects/rcf-lite-wsd/specs/update-awareness-spec-2026-08-28.md
|
|
11
|
+
# section 1 (ratified 2026-08-30).
|
|
12
|
+
#
|
|
13
|
+
# Editing rules at release time:
|
|
14
|
+
# 1. Add the new release as the top entry under `releases:` (newest
|
|
15
|
+
# first).
|
|
16
|
+
# 2. Update `latest:` to match the new top entry's `version`.
|
|
17
|
+
# 3. Keep `headlines[]` operator-facing: one to three sentences, plain
|
|
18
|
+
# language, sentence case, terminal period, no method vocabulary
|
|
19
|
+
# shortcuts.
|
|
20
|
+
# 4. Set `breaking: true` only when the release is a semver-breaking
|
|
21
|
+
# change per the pre-1.0 breaking-is-minor convention (see
|
|
22
|
+
# CHANGELOG.md preamble).
|
|
23
|
+
# 5. `minAgentAction` names the extra work the agent needs to do beyond
|
|
24
|
+
# running the install command. `null` means no extra action. The
|
|
25
|
+
# enumerated values are listed in the spec section 1.5:
|
|
26
|
+
# - rewrite-shell-invocations
|
|
27
|
+
# - rerun-init
|
|
28
|
+
# - regenerate-chain
|
|
29
|
+
# - schema-migration
|
|
30
|
+
# 6. `notesUrl` is optional. It currently points at the top of the
|
|
31
|
+
# human changelog; per-release deep links are a follow-up once the
|
|
32
|
+
# docs pipeline gives /docs/ headings stable anchor ids.
|
|
33
|
+
# 7. Do not delete or rewrite historical entries; the feed is append-only.
|
|
34
|
+
#
|
|
35
|
+
# Every published release under the `rcf-lite` npm name is listed here.
|
|
36
|
+
# The pre-rename history (packages published under
|
|
37
|
+
# `@stravica-ai/rcf-build-lite`, `@stravica-ai/rcf-lite-core`, and
|
|
38
|
+
# `@stravica-ai/rcf-verify-lite`) lives in CHANGELOG.md but is not part of
|
|
39
|
+
# this feed; the feed is scoped to what an operator can install today as
|
|
40
|
+
# `npm install rcf-lite`.
|
|
41
|
+
|
|
42
|
+
feedVersion: 1
|
|
43
|
+
latest: "0.15.0"
|
|
44
|
+
releases:
|
|
45
|
+
- version: "0.15.0"
|
|
46
|
+
date: "2026-08-31"
|
|
47
|
+
breaking: false
|
|
48
|
+
headlines:
|
|
49
|
+
- "Library-applied blueprints now carry a durable ownership stamp so re-registering a library under a different prefix no longer orphans records that came from it."
|
|
50
|
+
- "The review-on-add card gained a global-topics section and a prefix-check line so a library's cross-topic surface is visible before the operator commits."
|
|
51
|
+
- "The delivery-ci-workflows blueprint gained optional package-manager and branch-name shape fields, taught the coverage-strict bootstrap trap in the guide, and shipped a starting-point supersession ADR."
|
|
52
|
+
minAgentAction: null
|
|
53
|
+
notesUrl: "https://stravica.ai/docs/rcf/changelog/"
|
|
54
|
+
|
|
55
|
+
- version: "0.14.0"
|
|
56
|
+
date: "2026-08-31"
|
|
57
|
+
breaking: true
|
|
58
|
+
headlines:
|
|
59
|
+
- "The ci-pipeline blueprint is renamed to delivery-ci-workflows and gains a broader set of CI workflows and optional checks."
|
|
60
|
+
- "A new rcf version command reports the installed version, with --check comparing against the release feed."
|
|
61
|
+
- "Rerun rcf init to refresh the agent guidance block with the new session-start freshness check."
|
|
62
|
+
minAgentAction: "rerun-init"
|
|
63
|
+
notesUrl: "https://stravica.ai/docs/rcf/changelog/"
|
|
64
|
+
|
|
65
|
+
- version: "0.13.0"
|
|
66
|
+
date: "2026-08-31"
|
|
67
|
+
breaking: false
|
|
68
|
+
headlines:
|
|
69
|
+
- "The 14 first-party blueprints now ship inside the installed package, so any doc pointing at a blueprint slug works on a fresh install."
|
|
70
|
+
- "rcf define blueprint add resolves bare slugs and @stock slugs against the packaged shelf, matching how the docs write the commands."
|
|
71
|
+
- "Installing on Node earlier than 24 now refuses outright instead of silently resolving an old placeholder release."
|
|
72
|
+
minAgentAction: null
|
|
73
|
+
notesUrl: "https://stravica.ai/docs/rcf/changelog/"
|
|
74
|
+
|
|
75
|
+
- version: "0.12.0"
|
|
76
|
+
date: "2026-08-28"
|
|
77
|
+
breaking: true
|
|
78
|
+
headlines:
|
|
79
|
+
- "Tests that claim to pass or fail must now point at a real test file, enforced by the shared schema."
|
|
80
|
+
- "Tests marked pending or skipped no longer need a pointer, matching how in-progress coverage really looks."
|
|
81
|
+
minAgentAction: "schema-migration"
|
|
82
|
+
notesUrl: "https://stravica.ai/docs/rcf/changelog/"
|
|
83
|
+
|
|
84
|
+
- version: "0.11.0"
|
|
85
|
+
date: "2026-08-27"
|
|
86
|
+
breaking: false
|
|
87
|
+
headlines:
|
|
88
|
+
- "The shipped agent guidance gained three new rules for how the agent drives the method loop."
|
|
89
|
+
- "Re-run rcf init to refresh the managed block in your project's agent instructions file."
|
|
90
|
+
minAgentAction: "rerun-init"
|
|
91
|
+
notesUrl: "https://stravica.ai/docs/rcf/changelog/"
|
|
92
|
+
|
|
93
|
+
- version: "0.10.0"
|
|
94
|
+
date: "2026-08-26"
|
|
95
|
+
breaking: true
|
|
96
|
+
headlines:
|
|
97
|
+
- "The command-line interface is reorganised: every command now sits under one of five groups."
|
|
98
|
+
- "Old flat command forms fail with a message that names the new form."
|
|
99
|
+
minAgentAction: "rewrite-shell-invocations"
|
|
100
|
+
notesUrl: "https://stravica.ai/docs/rcf/changelog/"
|
|
101
|
+
|
|
102
|
+
- version: "0.9.0"
|
|
103
|
+
date: "2026-08-25"
|
|
104
|
+
breaking: false
|
|
105
|
+
headlines:
|
|
106
|
+
- "Blueprints landed: compose pre-built implementation patterns onto your project instead of inventing them from a blank page."
|
|
107
|
+
- "Six starter blueprints ship in the same release, covering web app, REST API, auth, persistence, CI pipeline and observability."
|
|
108
|
+
minAgentAction: null
|
|
109
|
+
notesUrl: "https://stravica.ai/docs/rcf/changelog/"
|
|
110
|
+
|
|
111
|
+
- version: "0.8.0"
|
|
112
|
+
date: "2026-08-12"
|
|
113
|
+
breaking: false
|
|
114
|
+
headlines:
|
|
115
|
+
- "A shared standards ruleset ships bundled with the package and now feeds refuse-first admissibility checks on the chain."
|
|
116
|
+
- "The verifier catches a subtle dishonesty: a test that is narrower in scope than the check it claims to prove."
|
|
117
|
+
minAgentAction: null
|
|
118
|
+
notesUrl: "https://stravica.ai/docs/rcf/changelog/"
|
|
119
|
+
|
|
120
|
+
- version: "0.7.1"
|
|
121
|
+
date: "2026-08-12"
|
|
122
|
+
breaking: false
|
|
123
|
+
headlines:
|
|
124
|
+
- "The first release under the unified rcf-lite name, bringing the previously separate tools together as one package on the public npm registry."
|
|
125
|
+
minAgentAction: null
|
|
126
|
+
notesUrl: "https://stravica.ai/docs/rcf/changelog/"
|