rcf-lite 0.12.0 → 0.13.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 +11 -0
- package/README.md +2 -0
- package/bin/view-supervisor-child.mjs +0 -0
- package/blueprints/application-api-rest/README.md +40 -0
- package/blueprints/application-api-rest/assets/middleware/auth-classes.md +45 -0
- package/blueprints/application-api-rest/assets/openapi/openapi-skeleton.yaml +322 -0
- package/blueprints/application-api-rest/assets/sample-data/sample-resources.json +53 -0
- package/blueprints/application-api-rest/assets/samples/request-response-pairs.md +204 -0
- package/blueprints/application-api-rest/blueprint.json +265 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-301-application-api-rest-error-envelope.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-302-application-api-rest-auth-model.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-303-application-api-rest-api-versioning.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-304-application-api-rest-logging.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-305-application-api-rest-pagination.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-306-application-api-rest-idempotency.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-307-application-api-rest-openapi-generation.json +25 -0
- package/blueprints/application-api-rest/contributions/adrs/adr-308-application-api-rest-rate-limiting.json +25 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-001.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-002.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-003.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-004.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-005.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-006.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-007.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-008.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-009.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-010.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-011.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-012.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-013.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-014.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-015.json +18 -0
- package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-016.json +18 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-301-application-api-rest-request-pipeline.json +48 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-302-application-api-rest-auth-middleware.json +41 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-303-application-api-rest-contract-surface.json +46 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-304-application-api-rest-resource-layer.json +46 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-305-application-api-rest-observability.json +40 -0
- package/blueprints/application-api-rest/contributions/tacs/tac-306-application-api-rest-operability.json +46 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2101.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2102.json +73 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2103.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2104.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2105.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2106.json +73 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2107.json +90 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2108.json +90 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2109.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2110.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2111.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2112.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2113.json +73 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2114.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2115.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2116.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2117.json +64 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2118.json +72 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2119.json +63 -0
- package/blueprints/application-api-rest/contributions/user-stories/application-api-rest-us-2120.json +73 -0
- package/blueprints/application-api-rest/docs/topics.md +46 -0
- package/blueprints/application-api-rest/guide/application-api-rest.md +41 -0
- package/blueprints/application-spa/README.md +90 -0
- package/blueprints/application-spa/assets/component-specs/actions-and-text-inputs.md +36 -0
- package/blueprints/application-spa/assets/component-specs/data-display.md +19 -0
- package/blueprints/application-spa/assets/component-specs/feedback-and-status.md +27 -0
- package/blueprints/application-spa/assets/component-specs/overlays.md +23 -0
- package/blueprints/application-spa/assets/component-specs/selection-controls.md +23 -0
- package/blueprints/application-spa/assets/sample-data/sample-entities.json +41 -0
- package/blueprints/application-spa/assets/tokens/design-tokens.json +140 -0
- package/blueprints/application-spa/assets/tokens/theme.css +169 -0
- package/blueprints/application-spa/assets/viewports.md +18 -0
- package/blueprints/application-spa/assets/wireframes/dashboard.md +48 -0
- package/blueprints/application-spa/assets/wireframes/detail.md +40 -0
- package/blueprints/application-spa/assets/wireframes/empty.md +31 -0
- package/blueprints/application-spa/assets/wireframes/error.md +46 -0
- package/blueprints/application-spa/assets/wireframes/form.md +50 -0
- package/blueprints/application-spa/assets/wireframes/list.md +45 -0
- package/blueprints/application-spa/assets/wireframes/session-expired.md +35 -0
- package/blueprints/application-spa/assets/wireframes/sign-in.md +41 -0
- package/blueprints/application-spa/assets/wireframes/sign-out.md +32 -0
- package/blueprints/application-spa/blueprint.json +387 -0
- package/blueprints/application-spa/contributions/adrs/adr-201-application-spa-routing.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-202-application-spa-theming.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-203-application-spa-client-state.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-204-application-spa-error-envelope.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-205-application-spa-auth-model.json +25 -0
- package/blueprints/application-spa/contributions/adrs/adr-206-application-spa-iconography.json +13 -0
- package/blueprints/application-spa/contributions/adrs/adr-207-application-spa-motion.json +13 -0
- package/blueprints/application-spa/contributions/adrs/adr-208-application-spa-i18n.json +13 -0
- package/blueprints/application-spa/contributions/adrs/adr-209-application-spa-telemetry-naming.json +13 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-001.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-002.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-003.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-004.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-005.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-006.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-007.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-008.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-009.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-010.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-011.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-012.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-013.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-014.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-015.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-016.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-017.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-018.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-019.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-020.json +18 -0
- package/blueprints/application-spa/contributions/requirements/application-spa-req-021.json +18 -0
- package/blueprints/application-spa/contributions/tacs/tac-201-application-spa-app-shell.json +45 -0
- package/blueprints/application-spa/contributions/tacs/tac-202-application-spa-theme-system.json +32 -0
- package/blueprints/application-spa/contributions/tacs/tac-203-application-spa-component-library.json +32 -0
- package/blueprints/application-spa/contributions/tacs/tac-204-application-spa-client-data-layer.json +27 -0
- package/blueprints/application-spa/contributions/tacs/tac-205-application-spa-forms-engine.json +27 -0
- package/blueprints/application-spa/contributions/tacs/tac-206-application-spa-telemetry.json +19 -0
- package/blueprints/application-spa/contributions/tacs/tac-207-application-spa-token-adherence-probe.json +57 -0
- package/blueprints/application-spa/contributions/tacs/tac-208-application-spa-icon-adherence-probe.json +56 -0
- package/blueprints/application-spa/contributions/tacs/tac-209-application-spa-csp-styled-adherence-probe.json +61 -0
- package/blueprints/application-spa/contributions/tacs/tac-210-application-spa-external-dependency-provisioning-probe.json +70 -0
- package/blueprints/application-spa/contributions/tacs/tac-211-application-spa-core-flow-e2e-probe.json +70 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1101.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1102.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1103.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1104.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1105.json +69 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1106.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1107.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1108.json +90 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1109.json +90 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1110.json +100 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1111.json +90 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1112.json +81 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1113.json +82 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1114.json +60 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1115.json +73 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1116.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1117.json +73 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1118.json +54 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1119.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1120.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1121.json +73 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1122.json +69 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1123.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1124.json +60 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1125.json +69 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1126.json +78 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1127.json +63 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1128.json +51 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1129.json +54 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1130.json +54 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1131.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1132.json +72 -0
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1133.json +72 -0
- package/blueprints/application-spa/docs/topics.md +57 -0
- package/blueprints/application-spa/guide/application-spa.md +40 -0
- package/blueprints/ci-pipeline/README.md +49 -0
- package/blueprints/ci-pipeline/assets/ci-provider-examples/github-actions.yml +61 -0
- package/blueprints/ci-pipeline/assets/ci-provider-examples/notes.md +50 -0
- package/blueprints/ci-pipeline/assets/report-samples/per-gate.json +12 -0
- package/blueprints/ci-pipeline/assets/report-samples/pipeline.json +28 -0
- package/blueprints/ci-pipeline/blueprint.json +46 -0
- package/blueprints/ci-pipeline/contributions/adrs/adr-701-ci-pipeline-ci-gates.json +25 -0
- package/blueprints/ci-pipeline/contributions/adrs/adr-702-ci-pipeline-strict-coverage-gate.json +25 -0
- package/blueprints/ci-pipeline/contributions/adrs/adr-703-ci-pipeline-node-only-runner.json +25 -0
- package/blueprints/ci-pipeline/contributions/adrs/adr-704-ci-pipeline-report-shape.json +25 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-001.json +18 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-002.json +18 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-003.json +18 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-004.json +18 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-005.json +18 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-006.json +18 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-007.json +18 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-008.json +18 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-009.json +18 -0
- package/blueprints/ci-pipeline/contributions/requirements/ci-pipeline-req-010.json +18 -0
- package/blueprints/ci-pipeline/contributions/tacs/tac-701-ci-pipeline-gate-runner.json +59 -0
- package/blueprints/ci-pipeline/contributions/tacs/tac-702-ci-pipeline-gate-report.json +32 -0
- package/blueprints/ci-pipeline/contributions/tacs/tac-703-ci-pipeline-aggregate-report.json +41 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6101.json +37 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6102.json +36 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6103.json +37 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6104.json +37 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6105.json +36 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6106.json +36 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6107.json +37 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6108.json +37 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6109.json +36 -0
- package/blueprints/ci-pipeline/contributions/user-stories/ci-pipeline-us-6110.json +36 -0
- package/blueprints/ci-pipeline/docs/topics.md +49 -0
- package/blueprints/ci-pipeline/guide/ci-pipeline.md +79 -0
- package/blueprints/deploy-cloudflare-workers/README.md +63 -0
- package/blueprints/deploy-cloudflare-workers/assets/ci-workflows/build-and-upload.yml.md +109 -0
- package/blueprints/deploy-cloudflare-workers/assets/ci-workflows/promote.yml.md +120 -0
- package/blueprints/deploy-cloudflare-workers/assets/verification/served-surface-probes.md +90 -0
- package/blueprints/deploy-cloudflare-workers/assets/wrangler-samples/bootstrap-vs-steady-state.md +87 -0
- package/blueprints/deploy-cloudflare-workers/assets/wrangler-samples/preview-alias-shape.md +86 -0
- package/blueprints/deploy-cloudflare-workers/assets/wrangler-samples/wrangler-toml-shape.md +85 -0
- package/blueprints/deploy-cloudflare-workers/blueprint.json +48 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1301-deploy-cloudflare-workers-deployment-target.json +30 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1302-deploy-cloudflare-workers-default-vendor.json +35 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1303-deploy-cloudflare-workers-preview-vs-production.json +30 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1304-deploy-cloudflare-workers-rollback-is-promote.json +25 -0
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1305-deploy-cloudflare-workers-dev-mode-drift.json +25 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-001.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-002.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-003.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-004.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-005.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-006.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-007.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-008.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-009.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-010.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-011.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/requirements/deploy-cloudflare-workers-req-012.json +18 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1301-deploy-cloudflare-workers-deploy-adapter.json +54 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1302-deploy-cloudflare-workers-wrangler-manifest.json +45 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1303-deploy-cloudflare-workers-preview-url-resolver.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1304-deploy-cloudflare-workers-promote-gate.json +57 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1305-deploy-cloudflare-workers-served-surface-verifier.json +51 -0
- package/blueprints/deploy-cloudflare-workers/contributions/tacs/tac-1306-deploy-cloudflare-workers-deploy-ci-workflows.json +64 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12101.json +54 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12102.json +45 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12103.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12104.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12105.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12106.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12107.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12108.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12109.json +47 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12110.json +46 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12111.json +45 -0
- package/blueprints/deploy-cloudflare-workers/contributions/user-stories/deploy-cloudflare-workers-us-12112.json +46 -0
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +46 -0
- package/blueprints/deploy-cloudflare-workers/guide/deploy-cloudflare-workers.md +74 -0
- package/blueprints/email-smtp-resend/README.md +45 -0
- package/blueprints/email-smtp-resend/assets/from-address-rotation-pattern.md +44 -0
- package/blueprints/email-smtp-resend/assets/resend-verification-pointer.md +25 -0
- package/blueprints/email-smtp-resend/assets/stub-adapter.md +65 -0
- package/blueprints/email-smtp-resend/blueprint.json +23 -0
- package/blueprints/email-smtp-resend/contributions/adrs/adr-401-email-smtp-resend-transport-choice.json +30 -0
- package/blueprints/email-smtp-resend/contributions/adrs/adr-402-email-smtp-resend-retry-and-backoff-posture.json +30 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-001.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-002.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-003.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-004.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-005.json +18 -0
- package/blueprints/email-smtp-resend/contributions/requirements/email-smtp-resend-req-006.json +18 -0
- package/blueprints/email-smtp-resend/contributions/tacs/tac-401-email-smtp-resend-send-adapter.json +53 -0
- package/blueprints/email-smtp-resend/contributions/tacs/tac-402-email-smtp-resend-webhook-verifier.json +56 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4101.json +45 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4102.json +36 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4103.json +45 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4104.json +45 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4105.json +36 -0
- package/blueprints/email-smtp-resend/contributions/user-stories/email-smtp-resend-us-4106.json +37 -0
- package/blueprints/email-smtp-resend/docs/topics.md +44 -0
- package/blueprints/email-smtp-resend/guide/email-smtp-resend.md +71 -0
- package/blueprints/observability-essentials/README.md +53 -0
- package/blueprints/observability-essentials/assets/probe-samples/liveness-body.json +4 -0
- package/blueprints/observability-essentials/assets/probe-samples/readiness-body.json +18 -0
- package/blueprints/observability-essentials/assets/status-page-samples/status-page-clean.html +22 -0
- package/blueprints/observability-essentials/assets/status-page-samples/status-page-with-notice.html +25 -0
- package/blueprints/observability-essentials/blueprint.json +54 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-801-observability-essentials-health-probes.json +30 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-802-observability-essentials-readiness-semantics.json +30 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-803-observability-essentials-status-page-contract.json +30 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-804-observability-essentials-probe-secrecy.json +25 -0
- package/blueprints/observability-essentials/contributions/adrs/adr-805-observability-essentials-notification-outcome-model.json +25 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-001.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-002.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-003.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-004.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-005.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-006.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-007.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-008.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-009.json +18 -0
- package/blueprints/observability-essentials/contributions/requirements/observability-essentials-req-010.json +18 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-801-observability-essentials-liveness-probe.json +32 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-802-observability-essentials-readiness-probe.json +43 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-803-observability-essentials-status-page.json +37 -0
- package/blueprints/observability-essentials/contributions/tacs/tac-804-observability-essentials-notification-outcome.json +42 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7101.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7102.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7103.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7104.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7105.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7106.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7107.json +46 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7108.json +47 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7109.json +45 -0
- package/blueprints/observability-essentials/contributions/user-stories/observability-essentials-us-7110.json +46 -0
- package/blueprints/observability-essentials/docs/topics.md +57 -0
- package/blueprints/observability-essentials/guide/observability-essentials.md +68 -0
- package/blueprints/observability-probe-endpoints/README.md +53 -0
- package/blueprints/observability-probe-endpoints/assets/docker/dockerfile-healthcheck.md +19 -0
- package/blueprints/observability-probe-endpoints/assets/kubernetes/podspec-probes-separate-port.md +54 -0
- package/blueprints/observability-probe-endpoints/assets/kubernetes/podspec-probes.md +36 -0
- package/blueprints/observability-probe-endpoints/assets/load-balancer/health-check-config.md +23 -0
- package/blueprints/observability-probe-endpoints/assets/systemd/notify-service.md +30 -0
- package/blueprints/observability-probe-endpoints/assets/uptime-monitor/monitor-config.md +22 -0
- package/blueprints/observability-probe-endpoints/blueprint.json +44 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1501-observability-probe-endpoints-health-probes.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1502-observability-probe-endpoints-readiness-semantics.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1503-observability-probe-endpoints-kubernetes-default.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1504-observability-probe-endpoints-separate-port-option.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/adrs/adr-1505-observability-probe-endpoints-external-response-secrecy.json +30 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-001.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-002.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-003.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-004.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-005.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-006.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-007.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/requirements/observability-probe-endpoints-req-008.json +18 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1501-observability-probe-endpoints-profile-resolver.json +39 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1502-observability-probe-endpoints-handler-set.json +40 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1503-observability-probe-endpoints-listener-topology.json +51 -0
- package/blueprints/observability-probe-endpoints/contributions/tacs/tac-1504-observability-probe-endpoints-non-http-adapters.json +39 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14101.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14102.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14103.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14104.json +45 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14105.json +46 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14106.json +45 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14107.json +45 -0
- package/blueprints/observability-probe-endpoints/contributions/user-stories/observability-probe-endpoints-us-14108.json +46 -0
- package/blueprints/observability-probe-endpoints/docs/topics.md +51 -0
- package/blueprints/observability-probe-endpoints/guide/observability-probe-endpoints.md +83 -0
- package/blueprints/persistence-data-d1/README.md +50 -0
- package/blueprints/persistence-data-d1/assets/batch-usage/batch-atomicity-example.md +72 -0
- package/blueprints/persistence-data-d1/assets/facade-shape/facade-module-shape.md +115 -0
- package/blueprints/persistence-data-d1/assets/migration-shape/migration-file-shape.md +119 -0
- package/blueprints/persistence-data-d1/assets/wrangler-config/d1-binding-shape.md +93 -0
- package/blueprints/persistence-data-d1/blueprint.json +42 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1401-persistence-data-d1-store-model.json +30 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1402-persistence-data-d1-migration-discipline.json +30 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1403-persistence-data-d1-event-secrecy.json +25 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1404-persistence-data-d1-store-boundary.json +25 -0
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1405-persistence-data-d1-recovery-model.json +30 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-001.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-002.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-003.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-004.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-005.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-006.json +18 -0
- package/blueprints/persistence-data-d1/contributions/requirements/persistence-data-d1-req-007.json +18 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1401-persistence-data-d1-facade.json +51 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1402-persistence-data-d1-migration-catalog.json +31 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1403-persistence-data-d1-deploy-gate.json +38 -0
- package/blueprints/persistence-data-d1/contributions/tacs/tac-1404-persistence-data-d1-recovery-runner.json +39 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13101.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13102.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13103.json +46 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13104.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13105.json +45 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13106.json +46 -0
- package/blueprints/persistence-data-d1/contributions/user-stories/persistence-data-d1-us-13107.json +38 -0
- package/blueprints/persistence-data-d1/docs/topics.md +59 -0
- package/blueprints/persistence-data-d1/guide/persistence-data-d1.md +77 -0
- package/blueprints/persistence-data-sqlite/README.md +50 -0
- package/blueprints/persistence-data-sqlite/assets/backup-procedures/hot-checkpoint-note.md +22 -0
- package/blueprints/persistence-data-sqlite/assets/backup-procedures/sqlite-file-copy.md +70 -0
- package/blueprints/persistence-data-sqlite/assets/schema-samples/catalog-file-layout.md +73 -0
- package/blueprints/persistence-data-sqlite/assets/schema-samples/migration-shape.md +76 -0
- package/blueprints/persistence-data-sqlite/blueprint.json +50 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-601-persistence-data-sqlite-store-model.json +30 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-602-persistence-data-sqlite-migration-discipline.json +30 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-603-persistence-data-sqlite-event-secrecy.json +25 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-604-persistence-data-sqlite-store-boundary.json +25 -0
- package/blueprints/persistence-data-sqlite/contributions/adrs/adr-605-persistence-data-sqlite-backup-model.json +25 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-001.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-002.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-003.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-004.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-005.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-006.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-007.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-008.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-009.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-010.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/requirements/persistence-data-sqlite-req-011.json +18 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-601-persistence-data-sqlite-store.json +57 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-602-persistence-data-sqlite-migration-runner.json +34 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-603-persistence-data-sqlite-migration-catalog.json +31 -0
- package/blueprints/persistence-data-sqlite/contributions/tacs/tac-604-persistence-data-sqlite-backup-runner.json +33 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5101.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5102.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5103.json +37 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5104.json +45 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5105.json +45 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5106.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5107.json +45 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5108.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5109.json +46 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5110.json +37 -0
- package/blueprints/persistence-data-sqlite/contributions/user-stories/persistence-data-sqlite-us-5111.json +37 -0
- package/blueprints/persistence-data-sqlite/docs/topics.md +49 -0
- package/blueprints/persistence-data-sqlite/guide/persistence-data-sqlite.md +69 -0
- package/blueprints/security-auth-clerk/README.md +50 -0
- package/blueprints/security-auth-clerk/assets/authorisation/role-claim-mapping-sample.md +99 -0
- package/blueprints/security-auth-clerk/assets/middleware/node-middleware-shape.md +86 -0
- package/blueprints/security-auth-clerk/assets/wiring/clerk-provider-react.md +48 -0
- package/blueprints/security-auth-clerk/assets/wiring/clerk-provider-vue.md +41 -0
- package/blueprints/security-auth-clerk/blueprint.json +42 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1001-security-auth-clerk-auth-model.json +30 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1002-security-auth-clerk-middleware-boundary.json +25 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1003-security-auth-clerk-authorisation-adapter-contract.json +25 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1004-security-auth-clerk-claims-mapping-discipline.json +25 -0
- package/blueprints/security-auth-clerk/contributions/adrs/adr-1005-security-auth-clerk-session-lifecycle.json +25 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-001.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-002.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-003.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-004.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-005.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-006.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-007.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-008.json +18 -0
- package/blueprints/security-auth-clerk/contributions/requirements/security-auth-clerk-req-009.json +18 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1001-security-auth-clerk-middleware.json +42 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1002-security-auth-clerk-authorisation-adapter.json +30 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1003-security-auth-clerk-session-verifier.json +38 -0
- package/blueprints/security-auth-clerk/contributions/tacs/tac-1004-security-auth-clerk-claims-mapper.json +22 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9101.json +46 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9102.json +38 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9103.json +46 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9104.json +46 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9105.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9106.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9107.json +37 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9108.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9109.json +36 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9110.json +37 -0
- package/blueprints/security-auth-clerk/contributions/user-stories/security-auth-clerk-us-9111.json +36 -0
- package/blueprints/security-auth-clerk/docs/topics.md +56 -0
- package/blueprints/security-auth-clerk/guide/security-auth-clerk.md +71 -0
- package/blueprints/security-auth-keycloak/README.md +56 -0
- package/blueprints/security-auth-keycloak/assets/local-container/keycloak-bootstrap.md +54 -0
- package/blueprints/security-auth-keycloak/assets/middleware/verifier-wiring.md +93 -0
- package/blueprints/security-auth-keycloak/assets/mock-introspection/mock-introspection-shape.md +62 -0
- package/blueprints/security-auth-keycloak/assets/provider-router/router-shape.md +71 -0
- package/blueprints/security-auth-keycloak/assets/realm-skeleton/realm-config-shape.md +55 -0
- package/blueprints/security-auth-keycloak/blueprint.json +49 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1201-security-auth-keycloak-auth-model.json +35 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1202-security-auth-keycloak-verification-mode-choice.json +30 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1203-security-auth-keycloak-provider-routing-seam.json +30 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1204-security-auth-keycloak-session-vs-token-contract.json +25 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1205-security-auth-keycloak-jwks-rotation-cache-lifetime.json +30 -0
- package/blueprints/security-auth-keycloak/contributions/adrs/adr-1206-security-auth-keycloak-refresh-and-sign-out-posture.json +25 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-001.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-002.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-003.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-004.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-005.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-006.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-007.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-008.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-009.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-010.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-011.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/requirements/security-auth-keycloak-req-012.json +18 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1201-security-auth-keycloak-discovery-client.json +51 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1202-security-auth-keycloak-jwt-verifier.json +46 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1203-security-auth-keycloak-introspection-client.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1204-security-auth-keycloak-provider-router.json +37 -0
- package/blueprints/security-auth-keycloak/contributions/tacs/tac-1205-security-auth-keycloak-role-adapter.json +32 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11101.json +47 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11102.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11103.json +36 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11104.json +36 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11105.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11106.json +46 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11107.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11108.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11109.json +37 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11110.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11111.json +45 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11112.json +37 -0
- package/blueprints/security-auth-keycloak/contributions/user-stories/security-auth-keycloak-us-11113.json +36 -0
- package/blueprints/security-auth-keycloak/docs/topics.md +74 -0
- package/blueprints/security-auth-keycloak/guide/security-auth-keycloak.md +81 -0
- package/blueprints/security-auth-magic-link/README.md +46 -0
- package/blueprints/security-auth-magic-link/assets/email-templates/magic-link-email.md +44 -0
- package/blueprints/security-auth-magic-link/assets/email-templates/stub-adapter.md +55 -0
- package/blueprints/security-auth-magic-link/assets/principal-registry-samples/allow-list-file.md +46 -0
- package/blueprints/security-auth-magic-link/assets/principal-registry-samples/single-address.md +35 -0
- package/blueprints/security-auth-magic-link/blueprint.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-501-security-auth-magic-link-model.json +30 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-502-security-auth-magic-link-token-secrecy.json +25 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-503-security-auth-magic-link-anti-enumeration-budget.json +25 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-504-security-auth-magic-link-session-lifecycle.json +30 -0
- package/blueprints/security-auth-magic-link/contributions/adrs/adr-505-security-auth-magic-link-rate-limiting.json +25 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-001.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-002.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-003.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-004.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-005.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-006.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-007.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-008.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-009.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-010.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/requirements/security-auth-magic-link-req-011.json +18 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-501-security-auth-magic-link-manager.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-502-security-auth-magic-link-session-manager.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-503-security-auth-magic-link-login-routes.json +76 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-504-security-auth-magic-link-email-delivery-adapter.json +26 -0
- package/blueprints/security-auth-magic-link/contributions/tacs/tac-505-security-auth-magic-link-principal-registry.json +26 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3101.json +64 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3102.json +54 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3103.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3104.json +55 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3105.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3106.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3107.json +54 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3108.json +46 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3109.json +48 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3110.json +45 -0
- package/blueprints/security-auth-magic-link/contributions/user-stories/security-auth-magic-link-us-3111.json +45 -0
- package/blueprints/security-auth-magic-link/docs/topics.md +45 -0
- package/blueprints/security-auth-magic-link/guide/security-auth-magic-link.md +65 -0
- package/blueprints/security-auth-oauth2/README.md +50 -0
- package/blueprints/security-auth-oauth2/assets/mock-provider/mock-oidc-shape.md +55 -0
- package/blueprints/security-auth-oauth2/assets/provider-selector/list-shape.md +27 -0
- package/blueprints/security-auth-oauth2/assets/providers/generic-oidc-discovery.md +31 -0
- package/blueprints/security-auth-oauth2/assets/providers/github-oauth2-only.md +31 -0
- package/blueprints/security-auth-oauth2/assets/providers/google-oidc.md +31 -0
- package/blueprints/security-auth-oauth2/assets/session-bridge/opaque-handle-shape.md +59 -0
- package/blueprints/security-auth-oauth2/blueprint.json +44 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1101-security-auth-oauth2-auth-model.json +35 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1102-security-auth-oauth2-provider-abstraction-contract.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1103-security-auth-oauth2-pkce-discipline.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1104-security-auth-oauth2-session-bridge-shape.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1105-security-auth-oauth2-refresh-token-posture.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/adrs/adr-1106-security-auth-oauth2-multi-provider-routing.json +25 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-001.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-002.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-003.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-004.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-005.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-006.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-007.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-008.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-009.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/requirements/security-auth-oauth2-req-010.json +18 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1101-security-auth-oauth2-flow-controller.json +61 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1102-security-auth-oauth2-provider-adapter.json +33 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1103-security-auth-oauth2-session-bridge.json +51 -0
- package/blueprints/security-auth-oauth2/contributions/tacs/tac-1104-security-auth-oauth2-provider-selector.json +29 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10101.json +47 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10102.json +45 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10103.json +36 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10104.json +36 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10105.json +55 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10106.json +45 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10107.json +46 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10108.json +46 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10109.json +37 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10110.json +37 -0
- package/blueprints/security-auth-oauth2/contributions/user-stories/security-auth-oauth2-us-10111.json +28 -0
- package/blueprints/security-auth-oauth2/docs/topics.md +58 -0
- package/blueprints/security-auth-oauth2/guide/security-auth-oauth2.md +65 -0
- package/blueprints/security-secrets-management/README.md +48 -0
- package/blueprints/security-secrets-management/assets/cli-usage/agent-access-pattern.md +69 -0
- package/blueprints/security-secrets-management/assets/manifest-samples/environment-aware-example.md +33 -0
- package/blueprints/security-secrets-management/assets/manifest-samples/secrets-yaml-shape.md +74 -0
- package/blueprints/security-secrets-management/assets/ui-integration/three-way-choice.md +44 -0
- package/blueprints/security-secrets-management/blueprint.json +43 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-901-security-secrets-management-secrets-source.json +30 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-902-security-secrets-management-default-vendor.json +35 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-903-security-secrets-management-agent-access-discipline.json +25 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-904-security-secrets-management-dotenv-reflection.json +25 -0
- package/blueprints/security-secrets-management/contributions/adrs/adr-905-security-secrets-management-rotation-and-audit.json +30 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-001.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-002.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-003.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-004.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-005.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-006.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-007.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-008.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-009.json +18 -0
- package/blueprints/security-secrets-management/contributions/requirements/security-secrets-management-req-010.json +18 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-901-security-secrets-management-manager-client.json +52 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-902-security-secrets-management-manifest.json +34 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-903-security-secrets-management-env-reflector.json +46 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-904-security-secrets-management-rotation-gate.json +57 -0
- package/blueprints/security-secrets-management/contributions/tacs/tac-905-security-secrets-management-agent-cli.json +59 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8101.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8102.json +45 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8103.json +37 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8104.json +45 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8105.json +55 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8106.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8107.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8108.json +45 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8109.json +46 -0
- package/blueprints/security-secrets-management/contributions/user-stories/security-secrets-management-us-8110.json +45 -0
- package/blueprints/security-secrets-management/docs/topics.md +46 -0
- package/blueprints/security-secrets-management/guide/security-secrets-management.md +68 -0
- package/fixtures/canary-manifest.json +1 -101
- package/package.json +15 -9
- package/rcf/.identity/profile.md +37 -0
- package/rcf/knowledge/INDEX.md +12 -0
- package/rcf/knowledge/README.md +41 -0
- package/rcf/knowledge/docs/.gitkeep +0 -0
- package/rcf/knowledge/notes/.gitkeep +0 -0
- package/scripts/preinstall-node-check.mjs +61 -0
- package/src/blueprint/apply.js +12 -6
- package/src/blueprint/conflicts.js +8 -8
- package/src/blueprint/index.js +2 -1
- package/src/blueprint/list.js +60 -0
- package/src/blueprint/loader.js +26 -1
- package/src/blueprint/namespace.js +20 -16
- package/src/blueprint/shelf-resolver.js +173 -0
- package/src/blueprint/supersede.js +3 -2
- package/src/browser-verify/invariants.js +40 -0
- package/src/browser-verify/runner.js +2 -0
- package/src/cli/blueprint.js +53 -9
- package/src/cli/init.js +2 -0
- package/src/core/store/writer.js +64 -2
- package/src/setup/agent-setup.js +28 -10
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"usId": "security-auth-oauth2-US-10108",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"reqId": "security-auth-oauth2-REQ-008",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"title": "Sign-out invalidates the project session; the provider redirect is a configured option",
|
|
8
|
+
"asA": "operator who has signed in through the project's OAuth2 sign-in surface",
|
|
9
|
+
"iWant": "a sign-out request to clear my project session on the server and in the browser",
|
|
10
|
+
"soThat": "the next request from this browser is unauthenticated regardless of what the provider still holds",
|
|
11
|
+
"acceptanceCriteria": [
|
|
12
|
+
{
|
|
13
|
+
"id": "AC-10108-1",
|
|
14
|
+
"description": "A POST to the sign-out route invalidates the session handle server-side and clears the session cookie in the browser.",
|
|
15
|
+
"given": "a session issued from US-10101 and a project route at `POST /auth/sign-out` wired to the flow controller",
|
|
16
|
+
"when": "the browser dispatches the sign-out request",
|
|
17
|
+
"then": "the response clears the session cookie (`Set-Cookie` with the cookie name, empty value, `Max-Age=0`, `HttpOnly`, `Secure`, `SameSite=Lax`); the session-record store no longer holds a record for the pre-signout session handle; the next protected-route request from this browser is refused as unauthenticated even if the browser replays the pre-signout cookie value",
|
|
18
|
+
"testable": true,
|
|
19
|
+
"scope": "runtime"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "AC-10108-2",
|
|
23
|
+
"description": "When a provider record sets `providerLogout: 'redirect'` and declares `endSessionEndpoint`, sign-out returns a 302 to that endpoint after clearing the project session.",
|
|
24
|
+
"given": "a mock provider whose declaration sets `providerLogout: 'redirect'` and carries an `endSessionEndpoint`, and a session issued against that provider",
|
|
25
|
+
"when": "the sign-out route is invoked",
|
|
26
|
+
"then": "the response status is 302; the `Location` header equals the declared `endSessionEndpoint` (with the configured `post_logout_redirect_uri` and, for OIDC providers, the `id_token_hint` query parameter as the raw id_token stored on the session record); the session cookie is cleared on the same response",
|
|
27
|
+
"testable": true,
|
|
28
|
+
"scope": "runtime"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "AC-10108-3",
|
|
32
|
+
"description": "A provider record that sets `providerLogout: 'redirect'` without declaring `endSessionEndpoint` refuses boot with a stable-coded error.",
|
|
33
|
+
"given": "a project config that sets `providerLogout: 'redirect'` on a provider record whose `endSessionEndpoint` field is absent",
|
|
34
|
+
"when": "the flow controller's provider validator runs at boot",
|
|
35
|
+
"then": "the boot terminates with error code `OAUTH2_LOGOUT_NOT_DECLARED` naming the provider id; no server process is left listening; the audit log records one `oauth2.provider_config_refused` event carrying the provider id and reason class `logout-endpoint-missing`",
|
|
36
|
+
"testable": true,
|
|
37
|
+
"scope": "runtime"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"tacIds": [
|
|
41
|
+
"TAC-1101-security-auth-oauth2-flow-controller",
|
|
42
|
+
"TAC-1103-security-auth-oauth2-session-bridge"
|
|
43
|
+
],
|
|
44
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
45
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
46
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"usId": "security-auth-oauth2-US-10109",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"reqId": "security-auth-oauth2-REQ-009",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"title": "A second provider drops in through config only; the same flow serves both",
|
|
8
|
+
"asA": "operator wiring the project against a second identity provider",
|
|
9
|
+
"iWant": "adding the second provider to be a config-record write with no change to the flow-controller or session-bridge code",
|
|
10
|
+
"soThat": "the provider abstraction promise the blueprint makes is real, not aspirational",
|
|
11
|
+
"acceptanceCriteria": [
|
|
12
|
+
{
|
|
13
|
+
"id": "AC-10109-1",
|
|
14
|
+
"description": "A round-trip against a second mock OIDC provider added purely by extending the provider-config list issues a project session whose Principal carries the second provider's id.",
|
|
15
|
+
"given": "the mock provider from US-10101 plus a second mock OIDC provider added to the provider-config module with a distinct `id`, `issuer`, and JWKS; no code change to the flow controller or session-bridge modules",
|
|
16
|
+
"when": "a browser dispatches `GET /auth/sign-in?provider=<second-id>` and completes the round-trip",
|
|
17
|
+
"then": "the resulting session's `request.auth.provider` equals the second provider's `id`; `principalId` is derived under the second provider's slug and does not collide with any principalId issued against the first provider even when the underlying `sub` claim value is identical; the flow controller's request log records the redirect and the token exchange against the second provider's URLs, not the first",
|
|
18
|
+
"testable": true,
|
|
19
|
+
"scope": "runtime"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "AC-10109-2",
|
|
23
|
+
"description": "A sign-in request whose `provider` query parameter names an id not in the provider-config list is refused before any redirect.",
|
|
24
|
+
"given": "the two-provider configuration from AC-10109-1",
|
|
25
|
+
"when": "a browser dispatches `GET /auth/sign-in?provider=nonexistent-id`",
|
|
26
|
+
"then": "the response is a 4xx with body error code `OAUTH2_PROVIDER_UNKNOWN`; no `Location` header pointing at an authorise endpoint is emitted; no pending-flow record is written",
|
|
27
|
+
"testable": true,
|
|
28
|
+
"scope": "runtime"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"tacIds": [
|
|
32
|
+
"TAC-1102-security-auth-oauth2-provider-adapter",
|
|
33
|
+
"TAC-1104-security-auth-oauth2-provider-selector"
|
|
34
|
+
],
|
|
35
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
36
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"usId": "security-auth-oauth2-US-10110",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"reqId": "security-auth-oauth2-REQ-010",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"title": "Live-provider runtime-verify ACs are accountBound and skip cleanly when the provider is unreachable",
|
|
8
|
+
"asA": "operator running the project's CI pipeline without live-provider credentials configured",
|
|
9
|
+
"iWant": "the runtime-verify layer to skip the live-provider smoke ACs with a stable-coded reason",
|
|
10
|
+
"soThat": "CI does not fail and the honest coverage state is on the record",
|
|
11
|
+
"acceptanceCriteria": [
|
|
12
|
+
{
|
|
13
|
+
"id": "AC-10110-1",
|
|
14
|
+
"description": "Every TC bound to a runtime-verify AC that targets a live public provider carries an `accountBound` flag; the runtime-verify runner honours the flag by skipping and emitting a stable-coded reason.",
|
|
15
|
+
"given": "a project scratch tree with this blueprint applied, one project-authored TC bound to AC-10110-2 flagged `accountBound`, and no live-provider credentials in the runtime environment",
|
|
16
|
+
"when": "`rcf audit coverage --strict` reports the coverage state and the runtime-verify runner is invoked",
|
|
17
|
+
"then": "the coverage report lists the AC as covered by a TC whose latest run outcome is `skipped` with reason `OAUTH2_LIVE_PROVIDER_UNREACHABLE`; the pipeline exit code is 0; the audit log records one `oauth2.accountbound_skip` event carrying the AC id and the missing-credential class",
|
|
18
|
+
"testable": true,
|
|
19
|
+
"scope": "runtime"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "AC-10110-2",
|
|
23
|
+
"description": "A live public-provider smoke against a real IdP (Google, GitHub, Microsoft, or a corporate SSO the project has credentials for) completes a full authorisation-code + PKCE round-trip and issues a project session whose Principal carries the live provider's id.",
|
|
24
|
+
"given": "live-provider credentials configured in the runtime environment and the project's redirect URI registered at the provider's console (operator-authored, out of the blueprint's mechanism reach)",
|
|
25
|
+
"when": "the operator drives a real browser through the sign-in surface at the live provider",
|
|
26
|
+
"then": "the flow completes; a project session cookie is set with the same shape as AC-10101-3; `request.auth.provider` equals the live provider's declared id; the project-authored TC for this AC records a `pass` outcome",
|
|
27
|
+
"testable": true,
|
|
28
|
+
"scope": "runtime"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"tacIds": [
|
|
32
|
+
"TAC-1101-security-auth-oauth2-flow-controller",
|
|
33
|
+
"TAC-1102-security-auth-oauth2-provider-adapter"
|
|
34
|
+
],
|
|
35
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
36
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
37
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"usId": "security-auth-oauth2-US-10111",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"reqId": "security-auth-oauth2-REQ-002",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"title": "Provider records are validated at boot; the state machine reasons against fields, not vendor names",
|
|
8
|
+
"asA": "operator configuring one or more provider records for the project",
|
|
9
|
+
"iWant": "the provider adapter to validate every record's shape at boot and expose a fields-only surface to the flow controller",
|
|
10
|
+
"soThat": "adding, removing, or swapping a provider is a config-record write with no code path change and no vendor-name branch",
|
|
11
|
+
"acceptanceCriteria": [
|
|
12
|
+
{
|
|
13
|
+
"id": "AC-10111-1",
|
|
14
|
+
"description": "The provider adapter's boot-time validator enforces the provider-abstraction contract on every configured record and the flow controller reads only record fields on every step of the state machine. The two refusal ACs anchored under the sign-out and multi-provider stories (AC-10108-3, AC-10109-2) exercise this contract's refuse-fast behaviour at the concrete failure modes; this story's AC binds the shape-level property that every record must satisfy before either of those refuse-fast paths can even be reached.",
|
|
15
|
+
"given": "a project provider-config module carrying at least one record and the provider adapter loaded at boot per TAC-1102",
|
|
16
|
+
"when": "the flow controller initiates any step of the authorisation-code + PKCE flow against the configured provider (mint redirect, exchange code, verify id_token, invoke userinfo, mint sign-out redirect)",
|
|
17
|
+
"then": "every URL, credential, scope list, redirect target, and provider-kind determination the flow controller reads comes from the record's declared fields (`authorizeUrl`, `tokenUrl`, `userinfoUrl`, `issuer`, `jwksUri`, `clientId`, `clientSecret`, `scopes`, `redirectUri`, `providerKind`, `endSessionEndpoint`); a source-tree scan of the flow-controller module records zero string-literal branches keyed on a provider `id` value (no `provider.id === 'google'`, no vendor-name switch); a boot with a record missing any REQ-002-mandated field refuses with the stable-coded error class named on TAC-1102's responsibilities and no server process is left listening",
|
|
18
|
+
"testable": true,
|
|
19
|
+
"scope": "runtime"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"tacIds": [
|
|
23
|
+
"TAC-1101-security-auth-oauth2-flow-controller",
|
|
24
|
+
"TAC-1102-security-auth-oauth2-provider-adapter"
|
|
25
|
+
],
|
|
26
|
+
"createdAt": "2026-08-30T00:00:00Z",
|
|
27
|
+
"updatedAt": "2026-08-30T00:00:00Z"
|
|
28
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# security-auth-oauth2 blueprint coordination vocabulary
|
|
2
|
+
|
|
3
|
+
This file is the security-auth-oauth2 half of the cross-blueprint contract. The Phase 1 conflict detector matches scope:global ADR topics by EXACT string equality, and AC ids are unnamespaced by the 0.4.4 grammar. Any blueprint intended to compose with this one must reuse these exact strings and respect these bands.
|
|
4
|
+
|
|
5
|
+
## Global ADR topics this blueprint contributes (exact strings)
|
|
6
|
+
|
|
7
|
+
| Topic string | security-auth-oauth2 contribution | Composition intent |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `authModel` | ADR-1101-security-auth-oauth2-auth-model | Deliberate conflict on the same string minted by `security-auth-magic-link` (ADR-501), `security-auth-clerk` (ADR-1001), the client half of `application-spa` (ADR-205), and the server half of `application-api-rest` (ADR-304). This blueprint's shape is delegated identity via OAuth2 authorisation-code + PKCE against a project-configured IdP; a composing blueprint that holds a different opinion on the authentication model 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 project's authentication model for both the client tier and the server tier, with a resolution recorded on `manifest.resolutions[]` or via `--resolve authModel=project:<ADR-id>` on the add |
|
|
10
|
+
|
|
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
|
+
|
|
13
|
+
Rules for new topics (inherited from the application-spa, application-api-rest, security-auth-magic-link, security-auth-clerk, persistence-data-sqlite, ci-pipeline, 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
|
+
|
|
15
|
+
## The deliberate authModel conflict, restated
|
|
16
|
+
|
|
17
|
+
This blueprint is the vendor-neutral shape of the `authModel` decision. Three other shipped auth-family blueprints hold vendor-specific or model-specific shapes on the same topic:
|
|
18
|
+
|
|
19
|
+
- `security-auth-magic-link` (ADR-501): passwordless magic-link with server-issued opaque cookie sessions. Local-first, no third-party identity dependency.
|
|
20
|
+
- `security-auth-clerk` (ADR-1001): hosted identity via Clerk; the vendor owns the sign-in surface, credential storage, MFA, and account recovery; the project owns a middleware boundary against Clerk's session-verification.
|
|
21
|
+
- `security-auth-oauth2` (ADR-1101, this blueprint): delegated identity via OAuth2 authorisation-code + PKCE against any project-configured IdP. Vendor-neutral; the project drops in the provider it wants.
|
|
22
|
+
- `security-auth-keycloak` (planned, ADR-12xx suffix block reserved): self-hosted Keycloak realm as the identity source. Vendor-committed; larger ops footprint.
|
|
23
|
+
|
|
24
|
+
Composing any two of these on one project raises a `globalAdrTopic` conflict on `authModel` at `rcf define blueprint add`. The four documented resolutions apply: adopt the incoming, keep the existing, author a project-level supersede ADR, or `--resolve authModel=project:<ADR-id>` on the add. The composition-precedent (SPA + REST on `errorEnvelope` and `authModel`) is the same pattern the client half and the server half of the wire contract have already established; the auth-family blueprints follow it.
|
|
25
|
+
|
|
26
|
+
## Id number bands (registry bootstrap)
|
|
27
|
+
|
|
28
|
+
AC ids (and therefore US numeric ids, which anchor them) are NOT namespaced by the 0.4.4 schema grammar; the band allocation IS the AC-collision enforcement mechanism. Composing blueprints take a fresh band rather than proposing namespaced AC ids. Band allocation is ratified policy (2026-08-19, extended by round-2 outcomes 2026-08-30 for the four-digit ADR/TAC suffix widening); this table is the shared registry-bootstrap replicated across every shipped and forthcoming blueprint's `docs/topics.md` until a mechanism-side central registry lands (v1.1 candidate).
|
|
29
|
+
|
|
30
|
+
This table is maintained shelf-wide across every blueprint's `docs/topics.md`. Rows are recorded at ship, never predicted.
|
|
31
|
+
|
|
32
|
+
| Blueprint | US band | ADR/TAC suffix block | Status | Global topics |
|
|
33
|
+
|---|---|---|---|---|
|
|
34
|
+
| application-spa | 1101-1899 | 2xx | shipped v1.3.0 | `clientRouting`, `theming`, `clientState`, `errorEnvelope`, `authModel` |
|
|
35
|
+
| application-api-rest | 2101-2899 | 3xx | shipped v1.0.0 | `errorEnvelope`, `authModel`, `apiVersioning`, `logging` |
|
|
36
|
+
| security-auth-magic-link | 3101-3899 | 5xx | shipped v1.0.0 | `authModel` |
|
|
37
|
+
| email-smtp-resend | 4101-4899 | 4xx | shipped v1.0.0 | none |
|
|
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
|
+
| persistence-data-sqlite | 5101-5899 | 6xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
40
|
+
| ci-pipeline | 6101-6899 | 7xx | shipped v1.0.0 | `ciGates`, `strictCoverageGate` |
|
|
41
|
+
| observability-essentials | 7101-7899 | 8xx | shipped v1.0.0 | `healthProbes`, `readinessSemantics`, `statusPageContract` |
|
|
42
|
+
| security-secrets-management | 8101-8899 | 9xx | shipped v1.0.0 | `secretsSource` |
|
|
43
|
+
| security-auth-clerk | 9101-9899 | 10xx | shipped v1.0.0 | `authModel` |
|
|
44
|
+
| security-auth-oauth2 | 10101-10899 | 11xx | shipped v1.0.0 | `authModel` |
|
|
45
|
+
| security-auth-keycloak | 11101-11899 | 12xx | shipped v1.0.0 | `authModel` |
|
|
46
|
+
| deploy-cloudflare-workers | 12101-12899 | 13xx | shipped v1.0.0 | `deploymentTarget` |
|
|
47
|
+
| persistence-data-d1 | 13101-13899 | 14xx | shipped v1.0.0 | `persistenceStore`, `migrationDiscipline` |
|
|
48
|
+
| observability-probe-endpoints | 14101-14899 | 15xx | shipped v1.0.0 | `healthProbes`, `readinessSemantics` |
|
|
49
|
+
|
|
50
|
+
US 10101-10111 sit at the LOW end of the 10101-10899 band on purpose. A project-side story that mechanically derives from a security-auth-oauth2 REQ id into the number `10111` would collide against security-auth-oauth2-US-10111 in this package; the band leaves headroom at the HIGH end (US 10181-10899) so a project's own stories anchored to security-auth-oauth2 REQs can allocate without conflict. The watchpost run4 lesson applies here too.
|
|
51
|
+
|
|
52
|
+
The ADR/TAC suffix block 1101-1199 is the second block to cross into the four-digit suffix space; `security-auth-clerk` opened the four-digit door at 1001-1099. Every shipped blueprint continues to load, validate, and audit against this shape without a schema change: rcf-schemas 0.5.0 `adrId` and `tacId` patterns are `^ADR-\d{3,}(-[a-z0-9]+...)?$` (three-digit minimum, unbounded above); four-digit and higher suffixes validate verbatim. The registry table above records the growth for a downstream author reaching for the next block.
|
|
53
|
+
|
|
54
|
+
## Shared expectations for future composing blueprints
|
|
55
|
+
|
|
56
|
+
- Reuse `authModel` exactly as spelled here when your blueprint holds an opinion on the project's authentication model; contribute your own scope:global ADR on that string and let composition surface the pairing.
|
|
57
|
+
- Provider-abstraction contract (ADR-1102), PKCE discipline (ADR-1103), session-bridge shape (ADR-1104), refresh-token posture (ADR-1105), and multi-provider routing (ADR-1106) are scope-local. A composing blueprint that holds an opinion on any of them authors its own project-level ADR; none of them are minted as globals because the space of legitimate variations is smaller than the space of legitimate authentication-model variations.
|
|
58
|
+
- Global topics that plausibly belong to a future blueprint and are NOT claimed by any shipped blueprint: `messageSerialisation` and `deliverySemantics` (a message-consumer blueprint's natural globals), `caching` (unclaimed by every shipped blueprint), `metricsExport` and `tracingProtocol` (natural globals for a metrics or tracing blueprint), `sessionStore` (unclaimed; a future session-persistence-committed blueprint's natural global, and the shape this blueprint's session-bridge is deliberately open on). Define any of these in your own package's topics doc, in this file's format, and consider whether the band-registry table above needs your slug added.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# security-auth-oauth2 guide
|
|
2
|
+
|
|
3
|
+
## What it is
|
|
4
|
+
|
|
5
|
+
A vendor-neutral blueprint for delegated identity through OAuth2 authorisation-code with PKCE. It fixes the flow, the provider-abstraction contract, the CSRF discipline, the id_token verification path (for OIDC-declared providers), the session-bridge shape, the refresh-token posture, the sign-out semantics, and the multi-provider routing. It does not commit the project to one vendor; it commits the project to one flow that every conforming vendor plugs into.
|
|
6
|
+
|
|
7
|
+
A project applies this blueprint, drops in one or more provider records (Google, GitHub, Microsoft, Okta, Auth0, a corporate ADFS-fronted OIDC, a self-hosted `node-oidc-provider`), and inherits the state machine that gets the sign-in ceremony right against any of them. Adding a second provider is a config-record write. The state machine does not change.
|
|
8
|
+
|
|
9
|
+
## What it deliberately is not
|
|
10
|
+
|
|
11
|
+
Not a vendor-committed blueprint. If a project wants a hosted-identity fast lane with the vendor doing most of the work, `security-auth-clerk` is the sibling; if a project wants a self-hosted Keycloak realm, `security-auth-keycloak` (when it ships) is the sibling. The vendor-neutral shape here trades some vendor-specific richness (Google's `hd` claim, Microsoft's tenant scoping, GitHub's per-org enforcement) for one code path across every conforming vendor. Vendor-specific companion blueprints layer on top when demand justifies them.
|
|
12
|
+
|
|
13
|
+
Not a passwordless-magic-link blueprint. `security-auth-magic-link` is the sibling for projects that want no third-party identity dependency and are willing to own the principal registry, the email adapter, and the anti-enumeration posture.
|
|
14
|
+
|
|
15
|
+
Not a session-persistence blueprint. The session-bridge (TAC-1103) injects a session-record store; the reference wiring is in-memory. A project that wants durable sessions composes `persistence-data-sqlite` (or `persistence-data-d1` when it ships) and points the store at a table. The blueprint does not commit the storage shape.
|
|
16
|
+
|
|
17
|
+
Not an MFA blueprint. MFA is the IdP's concern; the blueprint delegates. A provider that requires MFA at the vendor surface is transparent to the flow controller.
|
|
18
|
+
|
|
19
|
+
Not a provider-selector UX blueprint beyond a reference rendering. TAC-1104 is optional at wire time; a project that wants a rich multi-provider selector substitutes its own surface as long as the query-parameter contract on `/auth/sign-in?provider=<id>` stays intact.
|
|
20
|
+
|
|
21
|
+
## When to reach for it
|
|
22
|
+
|
|
23
|
+
- The project wants delegated identity but is not committed to a single hosted vendor.
|
|
24
|
+
- The project may or may not add a second provider later; the seam should be ready.
|
|
25
|
+
- The project's ops posture prefers the sign-in surface (and the credential storage) to live at an IdP the project does not run.
|
|
26
|
+
- The project has, or will register, an application at one or more IdPs and hold the resulting `clientId`/`clientSecret` pair through the secrets-management blueprint.
|
|
27
|
+
- The project wants runtime-verify to actually verify the state machine and the identity-lift in CI without paying for a per-CI-run set of live-vendor credentials.
|
|
28
|
+
|
|
29
|
+
## When it does not fit
|
|
30
|
+
|
|
31
|
+
- The project has no external IdP and no plan to obtain one. `security-auth-magic-link` is the shape.
|
|
32
|
+
- The project is committed to Clerk and wants the vendor to do more of the work than an OAuth2 record allows. `security-auth-clerk` is the shape.
|
|
33
|
+
- The project has an existing Keycloak realm and wants a vendor-committed integration. `security-auth-keycloak` (when it ships) is the shape.
|
|
34
|
+
- The project's session-verification requirements need statelessness at scale (no server-side session record). This blueprint's session-bridge is opaque-handle by ADR-1104; a JWT-in-cookie posture is a project-level ADR supersede on the session-bridge shape.
|
|
35
|
+
|
|
36
|
+
## What a good outcome looks like
|
|
37
|
+
|
|
38
|
+
- One provider record per configured IdP, on the fixed shape, validated at boot.
|
|
39
|
+
- One sign-in ceremony code path across every provider; adding a second provider is a config-record write.
|
|
40
|
+
- Every callback either issues a project session or terminates with a stable-coded refusal naming the reason class.
|
|
41
|
+
- The browser holds an opaque-handle cookie; provider tokens live server-side; nothing on `request.auth` is a provider token.
|
|
42
|
+
- Refresh-token rotation is silent when the flow is healthy and revokes the chain when a refresh-token reuse is detected.
|
|
43
|
+
- Sign-out clears the project session; the operator-declared `providerLogout` flag is what decides the provider-side redirect.
|
|
44
|
+
- `rcf audit coverage --strict` on the project's post-blueprint-apply state reports every blueprint AC as uncovered by TC (the blueprint ships no test files); every AC is a runtime-observable fact the project authors a TC against; the ship gate refuses on any uncovered AC that is not `accountBound`.
|
|
45
|
+
- The live-provider smoke AC is `accountBound` and skipped by the runtime-verify runner when credentials are absent; the project-authored TC records the outcome honestly.
|
|
46
|
+
|
|
47
|
+
## Operator decisions that remain open after apply
|
|
48
|
+
|
|
49
|
+
- Which IdP(s) to configure. The blueprint lists Google, GitHub, Microsoft, Okta, Auth0, corporate ADFS, and self-hosted `node-oidc-provider` as illustrative examples; the project picks and registers.
|
|
50
|
+
- Where the `clientSecret` lives. The recommended pattern is a secret declared in the project's `secrets.yaml` (`security-secrets-management` composed) read at boot; a project that has not composed the secrets blueprint reads from its process environment or an equivalent.
|
|
51
|
+
- The session-record store. In-memory is the reference wiring; a project running more than one process points the store at a table.
|
|
52
|
+
- The session lifetime (`sessionExpirySeconds`) and the pending-flow TTL (`pendingFlowTtlSeconds`). Defaults in the reference wiring are 8 hours and 10 minutes respectively; the project may tighten or extend per its risk posture.
|
|
53
|
+
- The `enrichPrincipal` hook. Empty roles and organisationIds arrays are the default; a project that maps IdP claims to project roles authors the hook and lists the mapping in a project-level ADR.
|
|
54
|
+
- The provider selector surface. TAC-1104's reference rendering is deliberately plain; a project that wants a branded selector substitutes its own.
|
|
55
|
+
- The live-provider smoke. AC-10110-2 is `accountBound`; a project that has live credentials wires them and the TC lights up, otherwise the skip is honest.
|
|
56
|
+
|
|
57
|
+
## Cost honesty
|
|
58
|
+
|
|
59
|
+
Shipping this doc set costs the project 10 REQs, 10 USs (27 ACs), 4 TACs, and 6 ADRs on the tree; the ACs are runtime-observable and the project's build cycle owns writing the TCs. The realisation cost is one flow controller, one provider adapter with per-record boot validation, one session-bridge with an injected store, and (optionally) a selector rendering; the reference wiring runs to a small number of files in one package. The mock OIDC provider is a one-off project-authored fake stood up per `assets/mock-provider/mock-oidc-shape.md` (or an existing library); the shape is what the ACs bind against. The live-provider smoke costs the operator credentials and a redirect URI registration at the provider's console per IdP; that cost is unavoidable and the `accountBound` posture keeps it out of CI.
|
|
60
|
+
|
|
61
|
+
## Promotion signals to the vendor-committed siblings
|
|
62
|
+
|
|
63
|
+
- The project wants the vendor to host the sign-in surface, credential storage, MFA, and account recovery; the trade of a vendor commitment is acceptable. Promote to `security-auth-clerk`: supersede ADR-1101 with a project-level ADR pointing at Clerk's authModel; apply `security-auth-clerk`; the flow controller and the session-bridge from this blueprint are retired and Clerk's middleware boundary takes over.
|
|
64
|
+
- The project's ops team runs (or wants to run) a Keycloak realm; the project wants a vendor-committed integration. Promote to `security-auth-keycloak` when it ships; the OAuth2-generic path is a valid interim.
|
|
65
|
+
- The project's audience needs a passwordless-magic-link posture (regulated environment, no third-party identity dependency); demote to `security-auth-magic-link`.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Security secrets management blueprint (v1.0.0)
|
|
2
|
+
|
|
3
|
+
The eighth content blueprint on the rcf-build-lite blueprint mechanism. Scope: a vendor-agnostic secrets management contract centred on a repo-root `secrets.yaml` manifest, a single Secrets Manager client every call site imports, least-privilege per-deployable slices, a durable metadata-only audit trail, an agent-safe piped-stdin CLI, `.env` as an ephemeral regenerable reflection, an environment-aware manifest shape elicited from the operator, and a three-way elicited operator UI choice. Targeted at small greenfield rcf-lite projects; larger deployments supersede the default vendor (ADR-902) with a project-level ADR and swap the vendor adapter.
|
|
4
|
+
|
|
5
|
+
## Apply
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
rcf define blueprint add <path-to>/blueprints/security-secrets-management
|
|
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 grouped under the `security` category; `rcf define blueprint remove security-secrets-management` cleanly removes an unreferenced application.
|
|
12
|
+
|
|
13
|
+
## Anatomy
|
|
14
|
+
|
|
15
|
+
| Piece | Where | What |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| Metadata | `blueprint.json` | Slug, version, category `security`, and the 30 contributions with scope/topic on the one global ADR |
|
|
18
|
+
| Doc set | `contributions/` | 10 REQs, 10 USs (30 ACs), 5 TACs, 5 ADRs, all schema-valid and namespaced (`security-secrets-management-REQ-001` prefix family; `ADR-901-security-secrets-management-secrets-source` suffix family) |
|
|
19
|
+
| Manifest shape sample | `assets/manifest-samples/secrets-yaml-shape.md` | The exact shape of a `secrets.yaml` entry with `environments`, `deployables`, `secrets[]`, and `uiIntegration`, worked as one committable example |
|
|
20
|
+
| Environment-aware example | `assets/manifest-samples/environment-aware-example.md` | Two shapes of the environments section (three-env `dev/ci/live` and a project-specific list) with a pick guide |
|
|
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
|
+
| 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
|
+
| 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-pipeline, observability-essentials, security-secrets-management) |
|
|
25
|
+
|
|
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
|
+
|
|
28
|
+
## What it contributes, and what it deliberately does not
|
|
29
|
+
|
|
30
|
+
Contributed kinds: REQ, US (with inline ACs), TAC, ADR. Adherence is expressed as ACs; the blueprint ships no test files (ratified decision 5) and no code.
|
|
31
|
+
|
|
32
|
+
No FBS contributions, as a matter of principle (ratified policy 2026-08-19): FBSs are the work of the implementing agent, not the blueprint; project constraints have to be applied at the time of creation. The blueprint contributes the WHAT (the manifest shape, the client contract, the least-privilege posture, the audit shape, the agent access discipline, the `.env` reflection posture, the rotation gate, the UI-choice contract); the implementing agent derives the HOW-tasks (FBS) in the host project, where the ACs contributed here get picked up by the project's own build sequencing.
|
|
33
|
+
|
|
34
|
+
Deliberately not contributed: a vendor SDK (the default vendor is named in ADR-902 as SOPS+age, the shape of the vendor adapter is fixed by TAC-901, the actual adapter code is a project-authored implementation); a specific manifest schema library (any YAML parser plus the loader in TAC-902 satisfies the loader responsibilities); a project's authorisation model (secrets management authorises READ of secret material; who is allowed to act on which secret at which UI surface is a project-side authorisation concern layered above the audit sink); a rotation orchestrator (the blueprint gates on rotation age at CI, it does not itself run the rotation for you; running the rotation is a project-authored procedure the vendor's own tooling supports); the admin-UI Secrets page itself when `uiIntegration.mode` is `integrate` (the field contract is fixed by TAC-905, the page implementation lives in the host project); an admin-spa blueprint (a companion future blueprint, promotion signal noted in the guide); a project's audit-storage engine (the blueprint fixes the event shape, not where the events land).
|
|
35
|
+
|
|
36
|
+
## The one global decision
|
|
37
|
+
|
|
38
|
+
ADR-901-security-secrets-management-secrets-source ships `scope: global` on topic `secretsSource`. This is the project's single source of truth for secret material: a repo-root manifest plus a vendor-agnostic client. A composing blueprint that wants a vendor-committed shape (a Vault-specific blueprint, an AWS Secrets Manager blueprint) conflicts here by design and expects a project-level ADR resolution. Vendor DEFAULT (ADR-902) is deliberately scope-local: the contract is global; the default that ships behind it is not.
|
|
39
|
+
|
|
40
|
+
See `docs/topics.md` for the exact strings, the expected resolutions, the delineation from vendor-choice (which is not global), and the AC id band allocation (security-secrets-management owns 8101-8899, ADR/TAC suffix block 9xx).
|
|
41
|
+
|
|
42
|
+
## Quality bar
|
|
43
|
+
|
|
44
|
+
Repo-root `secrets.yaml` as the sole declaration of every secret the project depends on; one Secrets Manager client as the sole importer of the vendor binding on the boundary; per-deployable declared slice enforced at both the client and the vendor-side credential scoping; loud-fail-at-boot on a required-absent secret with a stable-coded error naming the logical name and active environment; single-shot audit event per fetch attempt with metadata-only fields; agent access via piped-stdin CLI that refuses value-on-argv and refuses TTY-echo-without-`--show`; CLI structured surfaces (`--json`, `--report`) that never carry a value; CLI log stream wrapped in a redactor that replaces resolved values with a fixed placeholder before any bytes leave the process; `.env` as an atomically-written gitignored regenerable reflection with a source-tree scan refusing direct `.env` reads at boot; environment-aware manifest with the environment set elicited at first apply and enforced thereafter; CI rotation gate that fails on expired-age and unknown-age entries and audits every applied override; three-way elicited UI choice (`integrate`, `admin-spa`, `none`) with a field contract that renders metadata only, never a value. Every bar is carried by ACs in the doc set, not by this README.
|
|
45
|
+
|
|
46
|
+
## Known mechanism-reach gaps
|
|
47
|
+
|
|
48
|
+
None at v1.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 deployed application (source-tree import-graph scans for the boundary properties, in-memory audit-sink accumulation for the audit shape, port-scan for the fail-safe boot posture, byte-equality checks against resolved values for the leakage properties, CI-gate exit code for the rotation and manifest-miss gates, page-render inspection for the UI-choice outcomes). The mechanism-reach principle from the authoring standard section 7 is satisfied at ship: a project that applies this blueprint and does not realise a TAC leaves an unresolved `tacIds` reference on the story that `rcf define validate` and `rcf audit coverage` refuse. The one operational surface a project must own on its own is the vendor adapter implementation (the SOPS-with-age default, or a superseding vendor's adapter); that responsibility is stated as a TAC interface, not as a smuggled runtime probe. The one AC whose runtime observability depends on operator choice is AC-8110-3 (`uiIntegration.mode: 'none'` outcome); the runtime observability there is the absence of a Secrets page anywhere in the deployed application, which a project's own smoke scan can confirm cheaply.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Agent access pattern for the Secrets CLI
|
|
2
|
+
|
|
3
|
+
The CLI shape a coding agent should reach for. Every verb keeps the secret bytes off argv, off logs, and off stdout unless a real human on a real terminal has explicitly asked to see them.
|
|
4
|
+
|
|
5
|
+
## Reading a value into a downstream consumer
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
secrets read database-password | psql --dbname=app --username=api --password-from-stdin
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
`secrets read` writes the value to stdout as raw bytes. The pipe hands it to `psql`. The value crosses one pipe and no more.
|
|
12
|
+
|
|
13
|
+
## Reading a value into a spawned process (Node.js wrapper)
|
|
14
|
+
|
|
15
|
+
The pattern below shows the value being read from the CLI, handed to a child process as an environment variable set at spawn time, and never printed on the way through.
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
import { spawn } from "node:child_process";
|
|
19
|
+
|
|
20
|
+
async function runWithSecret(secretName, envVarName, command, args) {
|
|
21
|
+
const reader = spawn("secrets", ["read", secretName], {
|
|
22
|
+
stdio: ["ignore", "pipe", "inherit"]
|
|
23
|
+
});
|
|
24
|
+
const chunks = [];
|
|
25
|
+
for await (const chunk of reader.stdout) chunks.push(chunk);
|
|
26
|
+
const value = Buffer.concat(chunks).toString("utf8").trimEnd();
|
|
27
|
+
const readerExit = await new Promise(resolve => reader.on("exit", resolve));
|
|
28
|
+
if (readerExit !== 0) {
|
|
29
|
+
throw new Error(`secrets read ${secretName} exited ${readerExit}`);
|
|
30
|
+
}
|
|
31
|
+
const child = spawn(command, args, {
|
|
32
|
+
stdio: "inherit",
|
|
33
|
+
env: { ...process.env, [envVarName]: value }
|
|
34
|
+
});
|
|
35
|
+
return await new Promise(resolve => child.on("exit", resolve));
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The value is held in memory for the shortest time the pattern allows: read from the pipe, passed as a spawn env, and then out of scope. Nothing in this script writes it to a log, echoes it to stdout, or persists it to a file.
|
|
40
|
+
|
|
41
|
+
## Writing a value (rotation)
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
generate-fresh-secret | secrets put stripe-api-key
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`secrets put` reads the value from stdin. Passing the value as a positional argument (`secrets put stripe-api-key HUNTER2`) is refused with `SECRETS_VALUE_ON_ARGV_REFUSED`; even the refusal message does not carry the value.
|
|
48
|
+
|
|
49
|
+
## Reading a metadata list
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
secrets list --json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Emits one JSON entry per manifest entry with fields `name`, `environment`, `owner`, `rotationDays`, `lastRotatedAt`, `required`. No entry carries a `value` or a hash of one; the admin UI's Secrets page renders against this same field set.
|
|
56
|
+
|
|
57
|
+
## Debug read for a human (terminal only)
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
secrets read database-password --show
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The `--show` flag is honoured only when stdout is an actual TTY (not a captured stream, not a pipe, not a redirected file). This is the one legitimate reason to look at a value with your own eyes; it is deliberately not scriptable through an agent transcript.
|
|
64
|
+
|
|
65
|
+
## What NOT to do
|
|
66
|
+
|
|
67
|
+
- Do not embed a secret value as a literal in agent-authored code, configuration, or a scratch file, even temporarily. Every reference is by logical name through the client.
|
|
68
|
+
- Do not pass a value on argv to any command. If a downstream tool only accepts values on argv, wrap it in a small script that reads stdin and re-spawns the tool with the value as an environment variable set at spawn time.
|
|
69
|
+
- Do not echo the value from a debug print. The CLI's own logger runs through a redactor, but agent-authored code does not; a stray `console.log(process.env.SECRET)` in a working script defeats the whole discipline.
|
package/blueprints/security-secrets-management/assets/manifest-samples/environment-aware-example.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Environment-aware manifest shapes (samples)
|
|
2
|
+
|
|
3
|
+
The `environments` array is elicited from the operator at first apply. Two common shapes and a pick guide.
|
|
4
|
+
|
|
5
|
+
## Shape A: three-env `dev` / `ci` / `live`
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
environments:
|
|
9
|
+
- dev
|
|
10
|
+
- ci
|
|
11
|
+
- live
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Suits a project with a single production target, one CI runner pool, and one developer laptop pattern. `dev` and `ci` values may point at safely fake or shared-test credentials; `live` values point at real vendor-issued production credentials.
|
|
15
|
+
|
|
16
|
+
## Shape B: project-specific list
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
environments:
|
|
20
|
+
- dev
|
|
21
|
+
- preview
|
|
22
|
+
- staging
|
|
23
|
+
- prod
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Suits a project with per-PR preview deployments, a shared staging environment, and a promoted-to-production target. Every entry's `paths` object must carry a key for each of the four; the loader refuses a partial entry.
|
|
27
|
+
|
|
28
|
+
## Pick guide
|
|
29
|
+
|
|
30
|
+
- Prefer the smallest environment list that captures every meaningfully-distinct resolution path. Adding an environment adds a slot to every entry's `paths` and is a re-encrypt for every value on the default SOPS+age vendor.
|
|
31
|
+
- Do not use environment names as feature flags. `dev-with-fake-payments` is a separate concern; keep environments to distinct deployment contexts.
|
|
32
|
+
- Name environments as lower-kebab strings; the loader refuses other shapes.
|
|
33
|
+
- The environment set is a boot-time selector; a process selects exactly one environment at start-up and holds it for its lifetime. A deployable that needs to switch environments mid-life is misusing the concept; that is what per-request tenancy is for at the application layer, not what environments are for at the secrets layer.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# `secrets.yaml` shape (sample)
|
|
2
|
+
|
|
3
|
+
The manifest lives at the repo root and is the single declaration of every secret the project depends on. Values never appear here; names, per-environment paths, and metadata do.
|
|
4
|
+
|
|
5
|
+
## Full shape
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
version: 1
|
|
9
|
+
environments:
|
|
10
|
+
- dev
|
|
11
|
+
- ci
|
|
12
|
+
- live
|
|
13
|
+
uiIntegration:
|
|
14
|
+
mode: integrate # one of: integrate, admin-spa, none
|
|
15
|
+
deployables:
|
|
16
|
+
- id: api
|
|
17
|
+
slice:
|
|
18
|
+
- database-password
|
|
19
|
+
- stripe-api-key
|
|
20
|
+
- session-salt
|
|
21
|
+
- id: worker
|
|
22
|
+
slice:
|
|
23
|
+
- database-password
|
|
24
|
+
- queue-signing-key
|
|
25
|
+
secrets:
|
|
26
|
+
- name: database-password
|
|
27
|
+
owner: platform-team
|
|
28
|
+
rotationDays: 90
|
|
29
|
+
required: true
|
|
30
|
+
paths:
|
|
31
|
+
dev: secrets/dev/database-password.enc
|
|
32
|
+
ci: secrets/ci/database-password.enc
|
|
33
|
+
live: secrets/live/database-password.enc
|
|
34
|
+
- name: stripe-api-key
|
|
35
|
+
owner: payments-team
|
|
36
|
+
rotationDays: 30
|
|
37
|
+
required: true
|
|
38
|
+
paths:
|
|
39
|
+
dev: secrets/dev/stripe-api-key.enc
|
|
40
|
+
ci: secrets/ci/stripe-api-key.enc
|
|
41
|
+
live: secrets/live/stripe-api-key.enc
|
|
42
|
+
- name: session-salt
|
|
43
|
+
owner: platform-team
|
|
44
|
+
rotationDays: 365
|
|
45
|
+
required: true
|
|
46
|
+
paths:
|
|
47
|
+
dev: secrets/dev/session-salt.enc
|
|
48
|
+
ci: secrets/ci/session-salt.enc
|
|
49
|
+
live: secrets/live/session-salt.enc
|
|
50
|
+
- name: queue-signing-key
|
|
51
|
+
owner: platform-team
|
|
52
|
+
rotationDays: 180
|
|
53
|
+
required: false
|
|
54
|
+
paths:
|
|
55
|
+
dev: secrets/dev/queue-signing-key.enc
|
|
56
|
+
ci: null
|
|
57
|
+
live: secrets/live/queue-signing-key.enc
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Field notes
|
|
61
|
+
|
|
62
|
+
- `version`: an integer for future manifest evolution; loader refuses an unknown version.
|
|
63
|
+
- `environments`: a non-empty array of lower-kebab strings; the project's environment names, elicited from the operator at first apply and enforced from then on.
|
|
64
|
+
- `uiIntegration.mode`: one of `integrate`, `admin-spa`, `none`, recording the operator's three-way UI choice.
|
|
65
|
+
- `deployables[]`: each entry declares an `id` (matching the boot input the process passes to the client) and a `slice` (the ordered array of secret names that deployable is allowed to read).
|
|
66
|
+
- `secrets[]`: each entry carries `name`, `owner`, `rotationDays`, `required`, and a `paths` object whose key set equals `environments`. A path may be null on an optional entry to mark the secret as intentionally not present in that environment; a null on a required entry fails boot in that environment.
|
|
67
|
+
|
|
68
|
+
## What the loader refuses
|
|
69
|
+
|
|
70
|
+
- A missing `secrets.yaml` at the repo root.
|
|
71
|
+
- An entry whose `paths` key set differs from `environments`.
|
|
72
|
+
- An entry that carries a `value` field (secret values never live in the manifest).
|
|
73
|
+
- An entry whose `name` is not lower-kebab.
|
|
74
|
+
- A `uiIntegration.mode` value not in the enumerated set.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# The three-way UI choice (elicitation and outcomes)
|
|
2
|
+
|
|
3
|
+
At first apply the working agent elicits one of three outcomes for the operator-facing Secrets Management surface and records the choice on the manifest header field `uiIntegration.mode`.
|
|
4
|
+
|
|
5
|
+
## The elicitation
|
|
6
|
+
|
|
7
|
+
Ask the operator:
|
|
8
|
+
|
|
9
|
+
> Where should the operator-facing Secrets Management page live?
|
|
10
|
+
>
|
|
11
|
+
> A. Integrate a Secrets page into an existing project admin UI. Choose this when the project already ships an admin surface (a dashboard, an operations console) and one more page fits.
|
|
12
|
+
>
|
|
13
|
+
> B. Adopt a separate admin-spa blueprint that hosts the Secrets page as one of its screens. Choose this when the project does not yet have an admin surface and building a small one is the right move.
|
|
14
|
+
>
|
|
15
|
+
> C. Decline a UI entirely; rely on the CLI plus the audit stream. Choose this when the project is small, the operator is the only human on the loop, and a page adds surface without adding value.
|
|
16
|
+
|
|
17
|
+
Record the answer as `uiIntegration.mode: 'integrate' | 'admin-spa' | 'none'` in the manifest.
|
|
18
|
+
|
|
19
|
+
## Outcome A: `integrate`
|
|
20
|
+
|
|
21
|
+
The blueprint contributes the field contract for the Secrets page (TAC-905); the host project implements the page inside its existing admin UI. Each row on the page carries:
|
|
22
|
+
|
|
23
|
+
- `name` (the manifest logical name)
|
|
24
|
+
- `environment` (the active environment for this page's view; the page may offer an environment switcher)
|
|
25
|
+
- `owner` (from the manifest entry)
|
|
26
|
+
- `lastRotatedAt` (from the vendor)
|
|
27
|
+
- `rotationDays` (from the manifest entry)
|
|
28
|
+
- `required` (from the manifest entry)
|
|
29
|
+
|
|
30
|
+
No cell renders a secret value. A "request rotation" action per row hands off to the project's own rotation procedure (a link, a modal describing the vendor's rotation flow, an operator-authored runbook); the blueprint does not itself run the rotation.
|
|
31
|
+
|
|
32
|
+
## Outcome B: `admin-spa`
|
|
33
|
+
|
|
34
|
+
The blueprint records the choice; the project applies the companion admin-spa blueprint (unshipped at v1.0.0, promotion signal: the third project asks for this outcome) which hosts the Secrets page as one of its screens against the same field contract. Until the companion ships, this outcome is a placeholder: the operator's stated intent is that when the companion exists, that is where the page will live.
|
|
35
|
+
|
|
36
|
+
## Outcome C: `none`
|
|
37
|
+
|
|
38
|
+
The blueprint contributes nothing to the operator UI surface. The CLI and the audit stream are the only operator-facing surfaces this blueprint ships. A project that later wants a UI can supersede the choice by re-eliciting and picking `integrate` or `admin-spa` at that point; the change is a manifest header edit and the corresponding TAC realisation.
|
|
39
|
+
|
|
40
|
+
## What the choice must NOT do
|
|
41
|
+
|
|
42
|
+
- The choice must not force the presence of a UI on a project that does not want one.
|
|
43
|
+
- The choice must not force the absence of a UI on a project that already has an admin surface where one more page belongs.
|
|
44
|
+
- The choice must not, at any outcome, put a secret value on a rendered page. The field contract fixes the surface; no outcome relaxes it.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "security-secrets-management",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"category": "security",
|
|
5
|
+
"contributions": [
|
|
6
|
+
{ "id": "security-secrets-management-REQ-001", "kind": "req", "path": "requirements/security-secrets-management-req-001.json" },
|
|
7
|
+
{ "id": "security-secrets-management-REQ-002", "kind": "req", "path": "requirements/security-secrets-management-req-002.json" },
|
|
8
|
+
{ "id": "security-secrets-management-REQ-003", "kind": "req", "path": "requirements/security-secrets-management-req-003.json" },
|
|
9
|
+
{ "id": "security-secrets-management-REQ-004", "kind": "req", "path": "requirements/security-secrets-management-req-004.json" },
|
|
10
|
+
{ "id": "security-secrets-management-REQ-005", "kind": "req", "path": "requirements/security-secrets-management-req-005.json" },
|
|
11
|
+
{ "id": "security-secrets-management-REQ-006", "kind": "req", "path": "requirements/security-secrets-management-req-006.json" },
|
|
12
|
+
{ "id": "security-secrets-management-REQ-007", "kind": "req", "path": "requirements/security-secrets-management-req-007.json" },
|
|
13
|
+
{ "id": "security-secrets-management-REQ-008", "kind": "req", "path": "requirements/security-secrets-management-req-008.json" },
|
|
14
|
+
{ "id": "security-secrets-management-REQ-009", "kind": "req", "path": "requirements/security-secrets-management-req-009.json" },
|
|
15
|
+
{ "id": "security-secrets-management-REQ-010", "kind": "req", "path": "requirements/security-secrets-management-req-010.json" },
|
|
16
|
+
{ "id": "security-secrets-management-US-8101", "kind": "us", "path": "user-stories/security-secrets-management-us-8101.json" },
|
|
17
|
+
{ "id": "security-secrets-management-US-8102", "kind": "us", "path": "user-stories/security-secrets-management-us-8102.json" },
|
|
18
|
+
{ "id": "security-secrets-management-US-8103", "kind": "us", "path": "user-stories/security-secrets-management-us-8103.json" },
|
|
19
|
+
{ "id": "security-secrets-management-US-8104", "kind": "us", "path": "user-stories/security-secrets-management-us-8104.json" },
|
|
20
|
+
{ "id": "security-secrets-management-US-8105", "kind": "us", "path": "user-stories/security-secrets-management-us-8105.json" },
|
|
21
|
+
{ "id": "security-secrets-management-US-8106", "kind": "us", "path": "user-stories/security-secrets-management-us-8106.json" },
|
|
22
|
+
{ "id": "security-secrets-management-US-8107", "kind": "us", "path": "user-stories/security-secrets-management-us-8107.json" },
|
|
23
|
+
{ "id": "security-secrets-management-US-8108", "kind": "us", "path": "user-stories/security-secrets-management-us-8108.json" },
|
|
24
|
+
{ "id": "security-secrets-management-US-8109", "kind": "us", "path": "user-stories/security-secrets-management-us-8109.json" },
|
|
25
|
+
{ "id": "security-secrets-management-US-8110", "kind": "us", "path": "user-stories/security-secrets-management-us-8110.json" },
|
|
26
|
+
{ "id": "TAC-901-security-secrets-management-manager-client", "kind": "tac", "path": "tacs/tac-901-security-secrets-management-manager-client.json" },
|
|
27
|
+
{ "id": "TAC-902-security-secrets-management-manifest", "kind": "tac", "path": "tacs/tac-902-security-secrets-management-manifest.json" },
|
|
28
|
+
{ "id": "TAC-903-security-secrets-management-env-reflector", "kind": "tac", "path": "tacs/tac-903-security-secrets-management-env-reflector.json" },
|
|
29
|
+
{ "id": "TAC-904-security-secrets-management-rotation-gate", "kind": "tac", "path": "tacs/tac-904-security-secrets-management-rotation-gate.json" },
|
|
30
|
+
{ "id": "TAC-905-security-secrets-management-agent-cli", "kind": "tac", "path": "tacs/tac-905-security-secrets-management-agent-cli.json" },
|
|
31
|
+
{
|
|
32
|
+
"id": "ADR-901-security-secrets-management-secrets-source",
|
|
33
|
+
"kind": "adr",
|
|
34
|
+
"path": "adrs/adr-901-security-secrets-management-secrets-source.json",
|
|
35
|
+
"scope": "global",
|
|
36
|
+
"topic": "secretsSource"
|
|
37
|
+
},
|
|
38
|
+
{ "id": "ADR-902-security-secrets-management-default-vendor", "kind": "adr", "path": "adrs/adr-902-security-secrets-management-default-vendor.json" },
|
|
39
|
+
{ "id": "ADR-903-security-secrets-management-agent-access-discipline", "kind": "adr", "path": "adrs/adr-903-security-secrets-management-agent-access-discipline.json" },
|
|
40
|
+
{ "id": "ADR-904-security-secrets-management-dotenv-reflection", "kind": "adr", "path": "adrs/adr-904-security-secrets-management-dotenv-reflection.json" },
|
|
41
|
+
{ "id": "ADR-905-security-secrets-management-rotation-and-audit", "kind": "adr", "path": "adrs/adr-905-security-secrets-management-rotation-and-audit.json" }
|
|
42
|
+
]
|
|
43
|
+
}
|