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,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"adrId": "ADR-308-application-api-rest-rate-limiting",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "accepted",
|
|
7
|
+
"title": "Rate limits keyed to auth classes with per-endpoint overrides",
|
|
8
|
+
"context": "Rate limiting needs a policy anchor: something stable that limits attach to. Candidates are one global limit, per-endpoint hand-tuning, or the auth classes the surface already declares.",
|
|
9
|
+
"decision": "Limits attach to the four auth classes, keyed per caller within each class (identity for user and admin, service principal for service, client address for public). Endpoints may declare an override of their class default in the same metadata record that declares their class; the override is published in the generated spec. Rejections are 429 with an honest Retry-After and the problem-details envelope, counted in metrics without per-rejection error logs (application-api-rest-REQ-011, application-api-rest-US-2113).",
|
|
10
|
+
"consequences": "Every endpoint has a correct default limit the moment it declares its class, and the override path keeps expensive endpoints protectable without inventing policy per route. Per-caller keying means fairness inside a class. The cost is a shared counter store across instances and the operational duty to tune class defaults from observed traffic rather than leaving initial guesses forever.",
|
|
11
|
+
"alternativesConsidered": [
|
|
12
|
+
{
|
|
13
|
+
"name": "One global limit",
|
|
14
|
+
"summary": "A single requests-per-window ceiling for the whole service.",
|
|
15
|
+
"reasonNotChosen": "Always mis-sized in both directions: generous enough for service peers means meaningless against anonymous abuse; tight enough for abuse throttles legitimate integrations."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Per-endpoint hand-tuned limits",
|
|
19
|
+
"summary": "Every endpoint declares its own limit with no class defaults.",
|
|
20
|
+
"reasonNotChosen": "N endpoints times M caller populations of bespoke policy, most of it copy-pasted; the class layer captures the real structure and leaves overrides for the genuine exceptions."
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
24
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
25
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-001.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-001",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Resource modelling: noun-based plural collections with an explicit representation model",
|
|
5
|
+
"description": "The API models its surface as resources, not procedures: URLs name nouns in plural collection form, hierarchy appears only where a relationship is genuinely 1:N and always scoped by the parent, collection filters live on sub-resources or query parameters rather than verb-shaped paths, and every resource class has one explicit, documented representation model.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "resources",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "A verb-shaped or ad-hoc URL surface cannot be paginated, filtered, cached, or documented consistently. One declared resource model is the anchor every other requirement in this blueprint binds to: the OpenAPI contract enumerates it, pagination and filtering conventions apply per collection, and auth classes attach per endpoint.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:01-resource-modelling"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-002.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-002",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Wire contract: JSON only, consistent casing, RFC-3339 UTC timestamps, explicit content types",
|
|
5
|
+
"description": "Every request and response body is JSON. Property casing is consistent across the whole surface (camelCase by default; a project may configure another casing but must then apply it everywhere). Timestamps are ISO-8601 in RFC-3339 form, UTC, on every temporal field. Every response carries an explicit Content-Type header; no response relies on client-side sniffing.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "wire-contract",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Mixed casing, local-time timestamps, and implicit content types are the classic silent-drift defects of hand-grown APIs: each one costs every client an adapter. Declaring the wire contract once, as requirements with acceptance criteria, makes deviation a test failure instead of a client workaround.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:02-wire-contract"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-003.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-003",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "API versioning: major version in the URL path with declared deprecation and sunset behaviour",
|
|
5
|
+
"description": "The wire contract is versioned by major version in the URL path (/v1/...). Breaking changes require a new major version. Deprecated versions announce their retirement with Deprecation and Sunset headers on every response, and the project states its version-drop policy (minimum notice period, what clients receive after drop) as part of the contract.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "versioning",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Versioning is a whole-project decision with no room for two answers, which is why the strategy ships as a scope-global decision record (ADR-303-application-api-rest-api-versioning). Encoding the version in the path keeps it visible in logs, caches, and browser tooling, and the sunset headers turn version retirement from a surprise outage into a scheduled migration.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:03-versioning"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-004.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-004",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "OpenAPI auto-generation: spec generated from source at build time, served with interactive documentation",
|
|
5
|
+
"description": "An OpenAPI 3.1 specification is generated from the implementation source at build time, never hand-written and maintained in parallel. The generated spec is served at /openapi.json and /openapi.yaml, and interactive documentation (Swagger UI or an equivalent renderer over the same spec) is served at /docs. The generated spec and the implementation cannot drift: every declared endpoint has an OpenAPI entry, every OpenAPI entry has an implementation, and response schemas match at the type level.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "api-documentation",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "A hand-written spec is a second implementation of the API that decays the moment someone forgets to edit it. Generating from source makes the spec a build artefact with the same freshness guarantee as the binary, and the drift criteria turn contract accuracy into something the build verifies rather than something a reviewer hopes for.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:04-openapi-generation"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-005.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-005",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Auth classes: every endpoint routed into exactly one of four declared middleware classes",
|
|
5
|
+
"description": "The service defines four distinct auth middleware classes, and every endpoint declares membership of exactly one: public (no auth processed, rate-limited), authenticated user (session or bearer token, identity resolved, standard rate limit), admin (authenticated plus admin role, elevated rate limit, audit-logged), and service-to-service (mTLS or signed request, no user identity, separate rate limit, audit-logged). The declared class is published in the OpenAPI extension x-auth-class, middleware enforces it server-side, and an endpoint without a declared class fails contract validation.",
|
|
6
|
+
"category": "security",
|
|
7
|
+
"domain": "auth",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Auth applied per-endpoint by convention is auth that one forgotten decorator silently removes. Making the class a declared, contract-validated property means the auth posture of the whole surface is enumerable from the spec, enforced by middleware rather than by handler discipline, and testable class by class. This is one half of the project's authentication model; the decision ships scope-global (ADR-302-application-api-rest-auth-model) because a project can only have one answer.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:05-auth-classes"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-006.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-006",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Kubernetes probe endpoints: liveness, readiness, and startup with specified schemas and exclusions",
|
|
5
|
+
"description": "The service exposes three probe endpoints. GET /healthz/live returns 200 whenever the process can serve any request and performs no dependency checks. GET /healthz/ready returns 200 only when declared downstream dependencies (database, cache, queues) are reachable, and 503 with a body listing the failed checks otherwise. GET /healthz/startup returns 200 once initialisation (migrations, cache warm, config load) is complete. Each probe has a specified response schema, sits outside the auth middleware, is excluded from info-level metrics and log noise, and has a documented failure mode.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "operability",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "A service without honest probes either gets restarted when it is healthy or kept in rotation when it cannot serve. Separating liveness from readiness from startup is what lets an orchestrator make three different decisions correctly; specifying schemas and exclusions keeps the probes cheap, quiet, and impossible to break by tightening auth.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:06-probe-endpoints"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-007.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-007",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Pagination: cursor-based by default with a bounded page size and a navigable envelope",
|
|
5
|
+
"description": "Collection endpoints paginate with cursors by default (?cursor=...&limit=...). The response envelope carries next and prev cursors, the service enforces an explicit maximum limit, and total counts are optional and off by default because computing them is expensive. Cursors are opaque to clients and remain stable across concurrent writes to the collection.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "pagination",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Offset pagination degrades quadratically on deep pages and skips or duplicates rows under concurrent writes. Cursor pagination as the declared default, with the envelope and limits specified up front, prevents each collection growing its own incompatible dialect.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:07-pagination"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-008.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-008",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Filtering and sorting: documented parameters per resource, strict rejection of unknown parameters",
|
|
5
|
+
"description": "Every collection endpoint documents its filter parameter names per resource, sorting follows the ?sort=field,-field2 convention (leading minus for descending, comma-separated multi-key), and a request carrying an unknown query parameter is rejected with 400 and a problem-details response naming the offending parameter, never silently ignored.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "querying",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Silently ignored parameters are the cruellest API defect: the client believes it filtered and acts on the unfiltered result. Strict rejection converts typos and stale client code into immediate, diagnosable 400s, and the single sort convention keeps every collection queryable the same way.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:08-filtering-sorting"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-009.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-009",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Error envelope: RFC 7807 problem details on every error response, no ad-hoc bodies",
|
|
5
|
+
"description": "Every error response carries an RFC 7807 problem-details body: type, title, status, detail, instance, plus declared service-specific extensions. Client errors (4xx) and server errors (5xx) have distinct, documented shapes within the envelope. No error path anywhere in the service returns an ad-hoc body, a bare string, or an empty body with only a status code.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "errors",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Clients can only build reliable error handling against a shape that holds everywhere, including the paths nobody planned: auth failures, rate limits, malformed JSON, unhandled exceptions. The wire error shape is a whole-project decision shared with whatever consumes the API, so it ships as a scope-global decision record (ADR-301-application-api-rest-error-envelope) that composition deliberately surfaces against a client-tier blueprint's matching decision.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:09-error-envelope"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-010.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-010",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Idempotency: declared Idempotency-Key handling on non-safe verbs with server-side de-duplication",
|
|
5
|
+
"description": "Non-safe verbs (POST, and any PATCH whose double application would harm) accept an Idempotency-Key header. The project declares which verbs and resource classes require the key; for those, the server de-duplicates by key in a cache with a declared TTL, replaying the original response on repeats within the TTL and rejecting key reuse with a different request body.",
|
|
6
|
+
"category": "functional",
|
|
7
|
+
"domain": "idempotency",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Every client on a real network retries. Without server-side idempotency a retried payment is a double charge and a retried creation is a duplicate row. Declaring the covered verbs and resource classes as requirements, and the TTL as a decision (ADR-306-application-api-rest-idempotency), makes safe-retry a verifiable property rather than a hope.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:10-idempotency"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-011.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-011",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Rate limiting: per auth class, with compliant 429 responses and per-endpoint overrides",
|
|
5
|
+
"description": "Rate limits are defined per auth class (public, authenticated user, admin, service-to-service each carry their own limit), a limited request receives 429 with a Retry-After header and a problem-details body, and individual endpoints may declare an override of their class default where the resource cost justifies it.",
|
|
6
|
+
"category": "nonFunctional",
|
|
7
|
+
"domain": "rate-limiting",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "One global limit is always wrong twice: too loose for anonymous traffic, too tight for trusted service callers. Binding limits to the auth classes the endpoints already declare gives every request a correct default, and the specified 429 shape means well-behaved clients can back off mechanically.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:11-rate-limiting"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-012.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-012",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Observability baseline: structured logs, RED metrics per endpoint, OpenTelemetry-compatible traces",
|
|
5
|
+
"description": "The service emits structured JSON logs with a request id on every request-scoped line, trace-id propagation, and a declared log level per auth class. Metrics cover RED (request rate, error rate, duration) per endpoint, counters per auth class, and probe outcomes. Traces are OpenTelemetry-compatible spans per request, with span attributes for auth class, resource id, and response status.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "observability",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "An unobservable service converts every incident into archaeology. Specifying the three signals as requirements, with the logging shape as a scope-global decision (ADR-304-application-api-rest-logging) because a project gets exactly one primary logging shape, means the first production incident is answerable with the telemetry the build already shipped.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:12-observability"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-013.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-013",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Request-id propagation: every request carries or is assigned an id that survives the whole call chain",
|
|
5
|
+
"description": "Every inbound request either carries an X-Request-Id header or is assigned one at the edge. The response echoes the id, every request-scoped log line includes it, and every downstream call the service makes on behalf of the request propagates it, so one id follows one user action across every hop.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "correlation",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Correlation is the cheapest observability there is and the most painful to retrofit. One header, generated at the edge and threaded everywhere, is what turns a support ticket containing a single id into a complete cross-service timeline.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:13-request-id"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-014.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-014",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Migrations and schema versioning: forward-only migrations with named reverts and a version endpoint",
|
|
5
|
+
"description": "Database migrations are forward-only, each with a named revert step; the deploy order relative to application rollout is stated; and GET /v1/_meta reports the current schema version and application version so operators and tooling can confirm what is actually running.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "migrations",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "Schema changes are the deploys that cannot be blindly rolled back. Forward-only with named reverts forces every migration author to answer the undo question at write time, and the _meta endpoint replaces guessing about a running instance's schema state with reading it.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:14-migrations"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-015.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-015",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "Contract conformance: every OpenAPI-declared endpoint verified for request, response, error, and auth behaviour",
|
|
5
|
+
"description": "Every endpoint declared in the generated OpenAPI spec is verified on three axes: a schema-conforming request returns a schema-conforming response, an invalid request returns the declared error envelope, and the endpoint's declared auth class is enforced. The verification is derived from the spec so new endpoints are covered by construction, not by remembering.",
|
|
6
|
+
"category": "technical",
|
|
7
|
+
"domain": "contract-verification",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "A contract nobody verifies is documentation, not a contract. Expressing conformance as acceptance criteria lets the implementing agent build the contract tests through the project's normal build cycle, and deriving coverage from the spec closes the gap where the newest endpoint is always the least tested.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:15-contract-tests"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
package/blueprints/application-api-rest/contributions/requirements/application-api-rest-req-016.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reqId": "application-api-rest-REQ-016",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"title": "REST security baselines: clean logs, stated PII policy, TLS everywhere real, explicit CORS",
|
|
5
|
+
"description": "No secrets (tokens, keys, passwords, session identifiers) appear in logs at any level. The service states its PII-redaction policy and applies it to logs and error details. TLS is required in every non-development environment. The CORS policy is explicit and deny-by-default, with per-endpoint overrides declared rather than a wildcard.",
|
|
6
|
+
"category": "security",
|
|
7
|
+
"domain": "security",
|
|
8
|
+
"priority": "must",
|
|
9
|
+
"rationale": "These four are the security defects that pass every functional test: the token in the debug log, the email address in the stack trace, the plaintext internal hop, the * CORS header that shipped as a temporary fix. Naming them as requirements with acceptance criteria puts them inside the build cycle's verification rather than outside it.",
|
|
10
|
+
"tags": [
|
|
11
|
+
"blueprint:application-api-rest",
|
|
12
|
+
"category:16-security-baselines"
|
|
13
|
+
],
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"status": "approved",
|
|
16
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
17
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
18
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tacId": "TAC-301-application-api-rest-request-pipeline",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"name": "Request pipeline",
|
|
8
|
+
"purpose": "Owns the ordered middleware chain every request traverses: request-id assignment, auth-class enforcement, rate limiting, idempotency handling, body parsing with strict content-type and parameter validation, and the terminal error boundary that guarantees the problem-details envelope on every failure path.",
|
|
9
|
+
"responsibilities": [
|
|
10
|
+
"Assign or accept X-Request-Id at the very edge, before any other middleware, and expose it to everything downstream (application-api-rest-REQ-013).",
|
|
11
|
+
"Invoke the auth middleware slot matching the endpoint's declared class before any handler code runs (application-api-rest-REQ-005).",
|
|
12
|
+
"Apply per-class and per-endpoint rate limits after identity resolution so limits key on the right principal (application-api-rest-REQ-011).",
|
|
13
|
+
"Enforce the wire contract at the boundary: reject unsupported content types with 415, malformed JSON with 400, unknown query parameters with 400 (application-api-rest-REQ-002, application-api-rest-REQ-008).",
|
|
14
|
+
"Run idempotency-key de-duplication for operations declared key-required (application-api-rest-REQ-010).",
|
|
15
|
+
"Convert every error, thrown or returned, into the RFC 7807 envelope as the final middleware; no path escapes it (application-api-rest-REQ-009).",
|
|
16
|
+
"Exempt the probe endpoints from auth, rate limiting, and info-level logging while keeping them inside request-id handling (application-api-rest-REQ-006)."
|
|
17
|
+
],
|
|
18
|
+
"internalStructure": "A declaratively ordered middleware stack applied to every route from one composition point; per-endpoint variation (auth class, rate override, idempotency requirement) comes from endpoint metadata, never from hand-wiring middleware per route.",
|
|
19
|
+
"interfaces": [
|
|
20
|
+
{
|
|
21
|
+
"name": "endpoint metadata",
|
|
22
|
+
"kind": "configuration",
|
|
23
|
+
"description": "Per-endpoint declarations (auth class, rate-limit override, idempotency requirement) consumed to parameterise the shared pipeline; the same declarations the contract surface publishes."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "error boundary",
|
|
27
|
+
"kind": "middleware",
|
|
28
|
+
"description": "Terminal handler converting any failure into a problem-details response with the request id in the instance field."
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"dependencies": [
|
|
32
|
+
{
|
|
33
|
+
"name": "Auth middleware",
|
|
34
|
+
"kind": "tac",
|
|
35
|
+
"tacId": "TAC-302-application-api-rest-auth-middleware",
|
|
36
|
+
"description": "The pipeline hosts the four class slots; the auth component implements them."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "Observability",
|
|
40
|
+
"kind": "tac",
|
|
41
|
+
"tacId": "TAC-305-application-api-rest-observability",
|
|
42
|
+
"description": "The pipeline emits the request-scoped log, metric, and span signals the observability component defines."
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"tradeoffs": "A single shared pipeline trades per-route micro-optimisation for one verifiable ordering: auth before rate limiting before handlers, and one error boundary. The ordering is load-bearing for the security ACs; bypassing the pipeline for a special route is the defect class this component exists to prevent.",
|
|
46
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
47
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
48
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tacId": "TAC-302-application-api-rest-auth-middleware",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"name": "Auth middleware: the four class slots",
|
|
8
|
+
"purpose": "Implements the four auth classes as distinct middleware slots (public, user, admin, service) so every endpoint's auth posture is a declared class membership enforced in one place, not handler-by-handler discipline.",
|
|
9
|
+
"responsibilities": [
|
|
10
|
+
"Public slot: process no auth headers, resolve no identity, apply the public rate key (client address).",
|
|
11
|
+
"User slot: resolve identity from a session or bearer token, expose it to the handler, reject unresolvable identity with 401.",
|
|
12
|
+
"Admin slot: require resolved identity plus the admin role, reject non-admins with 403, audit-log every request with identity, endpoint, outcome, and request id.",
|
|
13
|
+
"Service slot: authenticate the calling service via mTLS or request signature, resolve a service principal and no user identity, audit-log every request, reject user or admin tokens outright.",
|
|
14
|
+
"Emit the auth-class attribute for logs, metrics, and spans so every signal is class-attributable (application-api-rest-REQ-012).",
|
|
15
|
+
"Guarantee the four slots are the only auth code paths in the service (AC-2106-6)."
|
|
16
|
+
],
|
|
17
|
+
"internalStructure": "One slot implementation per class behind a common contract, selected by the endpoint's declared x-auth-class at pipeline assembly; credential verification is delegated to the project's chosen identity provider behind a narrow interface.",
|
|
18
|
+
"interfaces": [
|
|
19
|
+
{
|
|
20
|
+
"name": "class selection",
|
|
21
|
+
"kind": "configuration",
|
|
22
|
+
"description": "The endpoint's declared class, read from the same metadata the OpenAPI x-auth-class extension publishes."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "resolved principal",
|
|
26
|
+
"kind": "request-context",
|
|
27
|
+
"description": "The identity (user or service principal) the slot resolves, exposed read-only to handlers and observability."
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"dependencies": [
|
|
31
|
+
{
|
|
32
|
+
"name": "Request pipeline",
|
|
33
|
+
"kind": "tac",
|
|
34
|
+
"tacId": "TAC-301-application-api-rest-request-pipeline",
|
|
35
|
+
"description": "Hosts the slots at the declared position in the middleware order."
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"tradeoffs": "Exactly four classes is a deliberate constraint: finer-grained per-endpoint policies are expressible as authorisation checks inside handlers, but class membership, enforcement position, and audit obligations stay fixed. Projects needing a fifth class should supersede the auth-model decision record rather than special-casing an endpoint.",
|
|
39
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
40
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
41
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tacId": "TAC-303-application-api-rest-contract-surface",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"name": "Contract surface: OpenAPI generation, serving, and drift defence",
|
|
8
|
+
"purpose": "Owns the generated OpenAPI 3.1 document as a build artefact: generation from source, serving at /openapi.json, /openapi.yaml, and /docs, and the three-axis drift validation that keeps implementation and contract provably identical.",
|
|
9
|
+
"responsibilities": [
|
|
10
|
+
"Generate the OpenAPI 3.1 document from route definitions and schema annotations at build time; no hand-written parallel spec exists (application-api-rest-REQ-004).",
|
|
11
|
+
"Serve the generated document and the interactive documentation UI per the declared exposure policy (AC-2104-6).",
|
|
12
|
+
"Publish per-operation metadata: operationId, schemas, x-auth-class, rate-limit overrides, idempotency requirements.",
|
|
13
|
+
"Run contract validation in the build: implemented-but-undeclared, declared-but-unimplemented, and type-level schema mismatch each fail the build (application-api-rest-REQ-004, AC-2105-4).",
|
|
14
|
+
"Drive spec-derived conformance verification so every declared operation is exercised on the request, error, and auth axes (application-api-rest-REQ-015)."
|
|
15
|
+
],
|
|
16
|
+
"internalStructure": "A generator over the same endpoint metadata the pipeline consumes (one source of truth), a validator comparing route table with generated document, and a conformance driver iterating the document at verification time.",
|
|
17
|
+
"interfaces": [
|
|
18
|
+
{
|
|
19
|
+
"name": "generated spec",
|
|
20
|
+
"kind": "artefact",
|
|
21
|
+
"description": "The OpenAPI 3.1 document, emitted at build time and served at runtime; the single contract clients and the conformance driver both consume."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "documentation endpoints",
|
|
25
|
+
"kind": "http",
|
|
26
|
+
"description": "/openapi.json, /openapi.yaml, and /docs, exposure-policy controlled."
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"dependencies": [
|
|
30
|
+
{
|
|
31
|
+
"name": "Resource layer",
|
|
32
|
+
"kind": "tac",
|
|
33
|
+
"tacId": "TAC-304-application-api-rest-resource-layer",
|
|
34
|
+
"description": "Route definitions and representation schemas are the generator's input."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "Request pipeline",
|
|
38
|
+
"kind": "tac",
|
|
39
|
+
"tacId": "TAC-301-application-api-rest-request-pipeline",
|
|
40
|
+
"description": "Shares the endpoint metadata so declaration and enforcement cannot diverge."
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"tradeoffs": "Generation from source means the spec's quality ceiling is the annotation discipline in the code; the drift validator is what turns sloppy annotations into build failures instead of quiet documentation rot. The build-time cost of validation buys the absence of a whole defect class.",
|
|
44
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
45
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
46
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tacId": "TAC-304-application-api-rest-resource-layer",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"name": "Resource layer: routes, representations, and collection conventions",
|
|
8
|
+
"purpose": "Owns the versioned resource surface: the route inventory under /v1, one representation model per resource class, and the shared collection machinery for pagination, filtering, and sorting so every collection behaves identically.",
|
|
9
|
+
"responsibilities": [
|
|
10
|
+
"Maintain the declared route inventory: plural-noun collections, scoped nesting only for genuine 1:N relationships, verb-free paths (application-api-rest-REQ-001).",
|
|
11
|
+
"Define one representation model per resource class and serialise it under the declared casing and timestamp rules everywhere that class appears (application-api-rest-REQ-002).",
|
|
12
|
+
"Implement cursor pagination once, as shared machinery every collection endpoint uses: envelope, opaque cursors, write-stability, limit enforcement, opt-in counts (application-api-rest-REQ-007).",
|
|
13
|
+
"Implement declared-filter and sort parsing once, with strict rejection of unknown parameters, undeclared sort keys, and type-violating values (application-api-rest-REQ-008).",
|
|
14
|
+
"Carry the version prefix and the deprecation and sunset header behaviour for every version the service still serves (application-api-rest-REQ-003)."
|
|
15
|
+
],
|
|
16
|
+
"internalStructure": "Resource modules (routes plus representation schema plus declared filters and sortable fields) registered against shared collection machinery; the registration data doubles as generator input for the contract surface.",
|
|
17
|
+
"interfaces": [
|
|
18
|
+
{
|
|
19
|
+
"name": "resource registration",
|
|
20
|
+
"kind": "configuration",
|
|
21
|
+
"description": "Each resource declares its routes, representation schema, filters, sortable fields, and auth classes in one registration record."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "collection envelope",
|
|
25
|
+
"kind": "wire-format",
|
|
26
|
+
"description": "The pagination envelope (items, next, prev, optional total) every collection response uses."
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"dependencies": [
|
|
30
|
+
{
|
|
31
|
+
"name": "Request pipeline",
|
|
32
|
+
"kind": "tac",
|
|
33
|
+
"tacId": "TAC-301-application-api-rest-request-pipeline",
|
|
34
|
+
"description": "All resource routes are served through the shared pipeline."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "Contract surface",
|
|
38
|
+
"kind": "tac",
|
|
39
|
+
"tacId": "TAC-303-application-api-rest-contract-surface",
|
|
40
|
+
"description": "Resource registrations feed the OpenAPI generator."
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"tradeoffs": "Shared collection machinery constrains exotic per-collection behaviour on purpose: a collection that genuinely cannot paginate by cursor is an explicit decision-record-level exception, not a quiet divergence. The registration record is one more thing to write per resource and is what makes contract generation and strict validation possible.",
|
|
44
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
45
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
46
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tacId": "TAC-305-application-api-rest-observability",
|
|
3
|
+
"prdId": "PRD-001",
|
|
4
|
+
"tadId": "TAD-001",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"status": "approved",
|
|
7
|
+
"name": "Observability: logs, metrics, and traces from one signal model",
|
|
8
|
+
"purpose": "Owns the three telemetry signals as one coherent model: structured JSON logs, RED metrics with per-class and probe series, and OpenTelemetry-compatible traces, all keyed by the same request id and auth class so any signal pivots to the others.",
|
|
9
|
+
"responsibilities": [
|
|
10
|
+
"Emit structured JSON log lines with the base fields, request id, trace id, and per-class completion levels (application-api-rest-REQ-012, application-api-rest-US-2114).",
|
|
11
|
+
"Record RED metrics per path template and method, per-class counters, duration histograms, and the dedicated probe-outcome series (application-api-rest-US-2115).",
|
|
12
|
+
"Produce server spans per request with the declared attributes, honour inbound traceparent, and propagate context to downstream calls (application-api-rest-US-2116).",
|
|
13
|
+
"Apply the redaction rules before any signal leaves the process: no secrets, PII only in redacted form (application-api-rest-REQ-016).",
|
|
14
|
+
"Keep probe traffic out of info-level logs and endpoint RED series (application-api-rest-REQ-006)."
|
|
15
|
+
],
|
|
16
|
+
"internalStructure": "A request-telemetry context created by the pipeline's edge middleware and enriched as the request progresses; log, metric, and span emitters read the same context so field values never disagree across signals.",
|
|
17
|
+
"interfaces": [
|
|
18
|
+
{
|
|
19
|
+
"name": "telemetry context",
|
|
20
|
+
"kind": "request-context",
|
|
21
|
+
"description": "Request id, trace context, auth class, path template, and timing, shared by all three emitters."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "signal exporters",
|
|
25
|
+
"kind": "configuration",
|
|
26
|
+
"description": "Where logs, metrics, and traces go is deployment configuration; the shapes emitted are contract."
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"dependencies": [
|
|
30
|
+
{
|
|
31
|
+
"name": "Request pipeline",
|
|
32
|
+
"kind": "tac",
|
|
33
|
+
"tacId": "TAC-301-application-api-rest-request-pipeline",
|
|
34
|
+
"description": "The pipeline creates and finalises the telemetry context per request."
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"tradeoffs": "One shared context adds a small per-request allocation and buys signal agreement: the duration in the log line, the histogram sample, and the span timing come from the same clock reads. Emitting three signals is redundant by design; each answers a question the others answer badly.",
|
|
38
|
+
"createdAt": "2026-08-19T10:00:00Z",
|
|
39
|
+
"updatedAt": "2026-08-19T10:00:00Z"
|
|
40
|
+
}
|