rcf-lite 0.27.0 → 0.28.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 +23 -0
- package/README.md +10 -0
- package/bin/rcf.js +2 -0
- package/blueprints/application-account-settings/CHANGELOG.md +35 -6
- package/blueprints/application-account-settings/README.md +1 -1
- package/blueprints/application-account-settings/blueprint.json +4 -2
- package/blueprints/application-account-settings/contributions/adrs/adr-2602-application-account-settings-security-surface-shape.json +1 -1
- package/blueprints/application-account-settings/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-account-settings/contributions/probes/profile-form-autocomplete.mjs +67 -0
- package/blueprints/application-account-settings/contributions/probes/run-profile-form-autocomplete.mjs +5 -0
- package/blueprints/application-account-settings/contributions/probes/run-sessions-adapter-uniform.mjs +5 -0
- package/blueprints/application-account-settings/contributions/probes/run-sessions-surface-shape.mjs +5 -0
- package/blueprints/application-account-settings/contributions/probes/run-shell-tablist-per-capability.mjs +5 -0
- package/blueprints/application-account-settings/contributions/probes/run-theme-radiogroup.mjs +5 -0
- package/blueprints/application-account-settings/contributions/probes/sessions-adapter-uniform.mjs +130 -0
- package/blueprints/application-account-settings/contributions/probes/sessions-surface-shape.mjs +70 -0
- package/blueprints/application-account-settings/contributions/probes/shell-tablist-per-capability.mjs +60 -0
- package/blueprints/application-account-settings/contributions/probes/theme-radiogroup.mjs +126 -0
- package/blueprints/application-admin-console/CHANGELOG.md +32 -6
- package/blueprints/application-admin-console/README.md +1 -1
- package/blueprints/application-admin-console/blueprint.json +4 -2
- package/blueprints/application-admin-console/contributions/adrs/adr-2201-application-admin-console-capability-vocabulary.json +1 -1
- package/blueprints/application-admin-console/contributions/probes/audit-log-surface.mjs +79 -0
- package/blueprints/application-admin-console/contributions/probes/org-switcher-surface.mjs +83 -0
- package/blueprints/application-admin-console/contributions/probes/permission-matrix-grid.mjs +67 -0
- package/blueprints/application-admin-console/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-admin-console/contributions/probes/run-audit-log-surface.mjs +5 -0
- package/blueprints/application-admin-console/contributions/probes/run-org-switcher-surface.mjs +5 -0
- package/blueprints/application-admin-console/contributions/probes/run-permission-matrix-grid.mjs +5 -0
- package/blueprints/application-admin-console/contributions/probes/run-sign-in-access-gated-surface.mjs +5 -0
- package/blueprints/application-admin-console/contributions/probes/run-users-directory-surface.mjs +5 -0
- package/blueprints/application-admin-console/contributions/probes/sign-in-access-gated-surface.mjs +117 -0
- package/blueprints/application-admin-console/contributions/probes/users-directory-surface.mjs +145 -0
- package/blueprints/application-api-rest/CHANGELOG.md +16 -8
- package/blueprints/application-api-rest/README.md +3 -3
- package/blueprints/application-api-rest/blueprint.json +3 -2
- package/blueprints/application-api-rest/contributions/adrs/adr-302-application-api-rest-auth-model.json +1 -1
- package/blueprints/application-api-rest/contributions/probes/cursor-pagination-round-trip.mjs +154 -0
- package/blueprints/application-api-rest/contributions/probes/health-probes-distinct.mjs +124 -0
- package/blueprints/application-api-rest/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-api-rest/contributions/probes/problem-details-on-error.mjs +77 -0
- package/blueprints/application-api-rest/contributions/probes/request-id-echoed.mjs +76 -0
- package/blueprints/application-api-rest/contributions/probes/run-cursor-pagination-round-trip.mjs +5 -0
- package/blueprints/application-api-rest/contributions/probes/run-health-probes-distinct.mjs +5 -0
- package/blueprints/application-api-rest/contributions/probes/run-problem-details-on-error.mjs +5 -0
- package/blueprints/application-api-rest/contributions/probes/run-request-id-echoed.mjs +5 -0
- package/blueprints/application-api-rest/docs/topics.md +1 -1
- package/blueprints/application-charts/CHANGELOG.md +35 -9
- package/blueprints/application-charts/README.md +6 -6
- package/blueprints/application-charts/blueprint.json +5 -3
- package/blueprints/application-charts/contributions/adrs/adr-1901-application-charts-engine-choice.json +1 -1
- package/blueprints/application-charts/contributions/probes/keyboard-traversal.mjs +151 -0
- package/blueprints/application-charts/contributions/probes/non-colour-distinction.mjs +67 -0
- package/blueprints/application-charts/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-charts/contributions/probes/run-keyboard-traversal.mjs +5 -0
- package/blueprints/application-charts/contributions/probes/run-non-colour-distinction.mjs +5 -0
- package/blueprints/application-charts/contributions/probes/run-text-alternative-table.mjs +5 -0
- package/blueprints/application-charts/contributions/probes/text-alternative-table.mjs +139 -0
- package/blueprints/application-charts/contributions/requirements/application-charts-req-001.json +1 -1
- package/blueprints/application-charts/contributions/requirements/application-charts-req-002.json +1 -1
- package/blueprints/application-charts/contributions/user-stories/application-charts-us-18101.json +5 -5
- package/blueprints/application-charts/contributions/user-stories/application-charts-us-18106.json +1 -1
- package/blueprints/application-charts/guide/application-charts.md +1 -1
- package/blueprints/application-dashboard/CHANGELOG.md +20 -10
- package/blueprints/application-dashboard/README.md +6 -6
- package/blueprints/application-dashboard/assets/guidance/dashboard-design.md +2 -2
- package/blueprints/application-dashboard/blueprint.json +3 -2
- package/blueprints/application-dashboard/contributions/adrs/adr-2001-application-dashboard-primary-kpi-enum.json +1 -1
- package/blueprints/application-dashboard/contributions/adrs/adr-2002-application-dashboard-timeframe-presets.json +1 -1
- package/blueprints/application-dashboard/contributions/probes/export-handle-formats.mjs +75 -0
- package/blueprints/application-dashboard/contributions/probes/four-tile-states.mjs +75 -0
- package/blueprints/application-dashboard/contributions/probes/primary-kpi-top-left.mjs +58 -0
- package/blueprints/application-dashboard/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-dashboard/contributions/probes/run-export-handle-formats.mjs +4 -0
- package/blueprints/application-dashboard/contributions/probes/run-four-tile-states.mjs +4 -0
- package/blueprints/application-dashboard/contributions/probes/run-primary-kpi-top-left.mjs +4 -0
- package/blueprints/application-dashboard/contributions/probes/run-shell-five-regions.mjs +4 -0
- package/blueprints/application-dashboard/contributions/probes/shell-five-regions.mjs +93 -0
- package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-002.json +1 -1
- package/blueprints/application-dashboard/contributions/requirements/application-dashboard-req-003.json +1 -1
- package/blueprints/application-dashboard/contributions/tacs/tac-2002-application-dashboard-filter-chrome.json +1 -1
- package/blueprints/application-dashboard/contributions/tacs/tac-2003-application-dashboard-export-handle.json +2 -2
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19101.json +2 -2
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19102.json +2 -2
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19103.json +1 -1
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19104.json +1 -1
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19105.json +1 -1
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19106.json +2 -2
- package/blueprints/application-dashboard/contributions/user-stories/application-dashboard-us-19107.json +5 -5
- package/blueprints/application-dashboard/docs/topics.md +2 -2
- package/blueprints/application-dashboard/guide/application-dashboard.md +2 -2
- package/blueprints/application-datatable/CHANGELOG.md +19 -9
- package/blueprints/application-datatable/README.md +2 -2
- package/blueprints/application-datatable/blueprint.json +3 -2
- package/blueprints/application-datatable/contributions/probes/apg-table-shape.mjs +57 -0
- package/blueprints/application-datatable/contributions/probes/four-states-regions.mjs +80 -0
- package/blueprints/application-datatable/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-datatable/contributions/probes/run-apg-table-shape.mjs +4 -0
- package/blueprints/application-datatable/contributions/probes/run-four-states-regions.mjs +4 -0
- package/blueprints/application-datatable/contributions/probes/run-search-adapter-round-trip.mjs +4 -0
- package/blueprints/application-datatable/contributions/probes/run-sort-adapter-round-trip.mjs +4 -0
- package/blueprints/application-datatable/contributions/probes/search-adapter-round-trip.mjs +58 -0
- package/blueprints/application-datatable/contributions/probes/sort-adapter-round-trip.mjs +60 -0
- package/blueprints/application-datatable/contributions/requirements/application-datatable-req-006.json +1 -1
- package/blueprints/application-datatable/docs/topics.md +1 -1
- package/blueprints/application-empty-error-states/CHANGELOG.md +33 -3
- package/blueprints/application-empty-error-states/blueprint.json +4 -2
- package/blueprints/application-empty-error-states/contributions/probes/empty-list-and-no-search.mjs +66 -0
- package/blueprints/application-empty-error-states/contributions/probes/error-boundary-alert.mjs +65 -0
- package/blueprints/application-empty-error-states/contributions/probes/forbidden-and-server-error.mjs +167 -0
- package/blueprints/application-empty-error-states/contributions/probes/not-found-and-recovery.mjs +61 -0
- package/blueprints/application-empty-error-states/contributions/probes/permission-denied-and-offline.mjs +155 -0
- package/blueprints/application-empty-error-states/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-empty-error-states/contributions/probes/run-empty-list-and-no-search.mjs +5 -0
- package/blueprints/application-empty-error-states/contributions/probes/run-error-boundary-alert.mjs +5 -0
- package/blueprints/application-empty-error-states/contributions/probes/run-forbidden-and-server-error.mjs +5 -0
- package/blueprints/application-empty-error-states/contributions/probes/run-not-found-and-recovery.mjs +5 -0
- package/blueprints/application-empty-error-states/contributions/probes/run-permission-denied-and-offline.mjs +5 -0
- package/blueprints/application-error-handling/CHANGELOG.md +45 -6
- package/blueprints/application-error-handling/blueprint.json +3 -2
- package/blueprints/application-error-handling/contributions/probes/category-vocabulary.mjs +90 -0
- package/blueprints/application-error-handling/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-error-handling/contributions/probes/record-shape-adr-1701.mjs +78 -0
- package/blueprints/application-error-handling/contributions/probes/run-category-vocabulary.mjs +5 -0
- package/blueprints/application-error-handling/contributions/probes/run-record-shape-adr-1701.mjs +5 -0
- package/blueprints/application-error-handling/contributions/probes/run-two-boundaries-registered.mjs +5 -0
- package/blueprints/application-error-handling/contributions/probes/two-boundaries-registered.mjs +343 -0
- package/blueprints/application-file-upload/CHANGELOG.md +28 -6
- package/blueprints/application-file-upload/README.md +1 -1
- package/blueprints/application-file-upload/blueprint.json +3 -2
- package/blueprints/application-file-upload/contributions/probes/assertive-completion-slot.mjs +78 -0
- package/blueprints/application-file-upload/contributions/probes/chunked-transport-endpoints.mjs +173 -0
- package/blueprints/application-file-upload/contributions/probes/per-file-progressbar.mjs +124 -0
- package/blueprints/application-file-upload/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-file-upload/contributions/probes/run-assertive-completion-slot.mjs +4 -0
- package/blueprints/application-file-upload/contributions/probes/run-chunked-transport-endpoints.mjs +4 -0
- package/blueprints/application-file-upload/contributions/probes/run-per-file-progressbar.mjs +4 -0
- package/blueprints/application-file-upload/contributions/probes/run-upload-surface-shape.mjs +4 -0
- package/blueprints/application-file-upload/contributions/probes/upload-surface-shape.mjs +55 -0
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-001.json +1 -1
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-002.json +1 -1
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-003.json +1 -1
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-004.json +1 -1
- package/blueprints/application-file-upload/contributions/requirements/application-file-upload-req-005.json +1 -1
- package/blueprints/application-file-upload/probe-packs/application-file-upload.pack.mjs +1 -1
- package/blueprints/application-forms-wizard/CHANGELOG.md +20 -6
- package/blueprints/application-forms-wizard/README.md +2 -2
- package/blueprints/application-forms-wizard/blueprint.json +3 -2
- package/blueprints/application-forms-wizard/contributions/probes/draft-persistence-round-trip.mjs +110 -0
- package/blueprints/application-forms-wizard/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-forms-wizard/contributions/probes/run-draft-persistence-round-trip.mjs +4 -0
- package/blueprints/application-forms-wizard/contributions/probes/run-step-page-shape.mjs +4 -0
- package/blueprints/application-forms-wizard/contributions/probes/run-task-list-surface.mjs +4 -0
- package/blueprints/application-forms-wizard/contributions/probes/step-page-shape.mjs +61 -0
- package/blueprints/application-forms-wizard/contributions/probes/task-list-surface.mjs +109 -0
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-001.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-002.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-003.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-004.json +1 -1
- package/blueprints/application-forms-wizard/contributions/requirements/application-forms-wizard-req-005.json +1 -1
- package/blueprints/application-forms-wizard/probe-packs/application-forms-wizard.pack.mjs +1 -1
- package/blueprints/application-notifications-in-app/CHANGELOG.md +38 -5
- package/blueprints/application-notifications-in-app/README.md +4 -4
- package/blueprints/application-notifications-in-app/blueprint.json +4 -2
- package/blueprints/application-notifications-in-app/contributions/adrs/adr-2101-application-notifications-in-app-live-region-role-mapping.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/probes/centre-acknowledge-round-trip.mjs +210 -0
- package/blueprints/application-notifications-in-app/contributions/probes/live-region-preseeding.mjs +93 -0
- package/blueprints/application-notifications-in-app/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-notifications-in-app/contributions/probes/run-centre-acknowledge-round-trip.mjs +5 -0
- package/blueprints/application-notifications-in-app/contributions/probes/run-live-region-preseeding.mjs +5 -0
- package/blueprints/application-notifications-in-app/contributions/probes/run-toast-contract.mjs +5 -0
- package/blueprints/application-notifications-in-app/contributions/probes/toast-contract.mjs +92 -0
- package/blueprints/application-notifications-in-app/contributions/tacs/tac-2101-application-notifications-in-app-live-region.json +3 -3
- package/blueprints/application-notifications-in-app/contributions/tacs/tac-2102-application-notifications-in-app-centre.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20101.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20102.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20103.json +1 -1
- package/blueprints/application-notifications-in-app/contributions/user-stories/application-notifications-in-app-us-20105.json +1 -1
- package/blueprints/application-notifications-in-app/guide/application-notifications-in-app.md +3 -3
- package/blueprints/application-onboarding-tour/CHANGELOG.md +31 -5
- package/blueprints/application-onboarding-tour/README.md +1 -1
- package/blueprints/application-onboarding-tour/blueprint.json +5 -3
- package/blueprints/application-onboarding-tour/contributions/probes/checklist-anchor-open.mjs +81 -0
- package/blueprints/application-onboarding-tour/contributions/probes/completion-persistence.mjs +159 -0
- package/blueprints/application-onboarding-tour/contributions/probes/first-run-detection.mjs +67 -0
- package/blueprints/application-onboarding-tour/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-onboarding-tour/contributions/probes/run-checklist-anchor-open.mjs +5 -0
- package/blueprints/application-onboarding-tour/contributions/probes/run-completion-persistence.mjs +5 -0
- package/blueprints/application-onboarding-tour/contributions/probes/run-first-run-detection.mjs +5 -0
- package/blueprints/application-onboarding-tour/contributions/probes/run-stepper-role-dialog.mjs +5 -0
- package/blueprints/application-onboarding-tour/contributions/probes/stepper-role-dialog.mjs +45 -0
- package/blueprints/application-spa/CHANGELOG.md +20 -11
- package/blueprints/application-spa/README.md +9 -10
- package/blueprints/application-spa/blueprint.json +3 -2
- package/blueprints/application-spa/contributions/adrs/adr-202-application-spa-theming.json +1 -1
- package/blueprints/application-spa/contributions/adrs/adr-206-application-spa-iconography.json +1 -1
- package/blueprints/application-spa/contributions/probes/designed-empty-state.mjs +72 -0
- package/blueprints/application-spa/contributions/probes/probe-utils.mjs +177 -0
- package/blueprints/application-spa/contributions/probes/route-inventory-published.mjs +185 -0
- package/blueprints/application-spa/contributions/probes/run-designed-empty-state.mjs +5 -0
- package/blueprints/application-spa/contributions/probes/run-route-inventory-published.mjs +5 -0
- package/blueprints/application-spa/contributions/probes/run-shell-nav-present.mjs +5 -0
- package/blueprints/application-spa/contributions/probes/shell-nav-present.mjs +69 -0
- package/blueprints/application-spa/contributions/tacs/tac-207-application-spa-token-adherence-probe.json +1 -1
- package/blueprints/application-spa/contributions/tacs/tac-208-application-spa-icon-adherence-probe.json +2 -2
- package/blueprints/application-spa/contributions/tacs/tac-209-application-spa-csp-styled-adherence-probe.json +3 -3
- package/blueprints/application-spa/contributions/tacs/tac-210-application-spa-external-dependency-provisioning-probe.json +2 -2
- package/blueprints/application-spa/contributions/tacs/tac-211-application-spa-core-flow-e2e-probe.json +2 -2
- package/blueprints/application-spa/contributions/user-stories/application-spa-us-1131.json +1 -1
- package/blueprints/application-spa/docs/topics.md +1 -1
- package/blueprints/delivery-ci-workflows/CHANGELOG.md +31 -11
- package/blueprints/delivery-ci-workflows/README.md +3 -3
- package/blueprints/delivery-ci-workflows/blueprint.json +3 -2
- package/blueprints/delivery-ci-workflows/contributions/adrs/adr-702-delivery-ci-workflows-strict-coverage-gate.json +2 -2
- package/blueprints/delivery-ci-workflows/contributions/probes/node-gate-entrypoint.mjs +76 -0
- package/blueprints/delivery-ci-workflows/contributions/probes/probe-utils.mjs +56 -0
- package/blueprints/delivery-ci-workflows/contributions/probes/real-account-github-actions-run-record.mjs +139 -0
- package/blueprints/delivery-ci-workflows/contributions/probes/run-node-gate-entrypoint.mjs +3 -0
- package/blueprints/delivery-ci-workflows/contributions/probes/run-real-account-github-actions-run-record.mjs +3 -0
- package/blueprints/delivery-ci-workflows/contributions/probes/run-workflow-template-shape.mjs +3 -0
- package/blueprints/delivery-ci-workflows/contributions/probes/workflow-template-shape.mjs +94 -0
- package/blueprints/delivery-ci-workflows/contributions/requirements/delivery-ci-workflows-req-004.json +1 -1
- package/blueprints/delivery-ci-workflows/docs/topics.md +2 -3
- package/blueprints/deploy-cloudflare-workers/CHANGELOG.md +4 -4
- package/blueprints/deploy-cloudflare-workers/README.md +3 -3
- package/blueprints/deploy-cloudflare-workers/contributions/adrs/adr-1306-deploy-cloudflare-workers-spa-shape.json +2 -2
- package/blueprints/deploy-cloudflare-workers/docs/topics.md +2 -2
- package/blueprints/deploy-hetzner-server/CHANGELOG.md +98 -7
- package/blueprints/deploy-hetzner-server/blueprint.json +7 -6
- package/blueprints/deploy-hetzner-server/contributions/probes/cloud-init-render-lint.mjs +46 -21
- package/blueprints/deploy-hetzner-server/contributions/probes/hcloud-dry-run-mock.mjs +344 -83
- package/blueprints/deploy-hetzner-server/contributions/probes/manifest-schema-validate.mjs +211 -42
- package/blueprints/deploy-hetzner-server/contributions/probes/probe-utils.mjs +140 -22
- package/blueprints/deploy-hetzner-server/contributions/probes/real-account-cloud-init-hardened.mjs +111 -30
- package/blueprints/deploy-hetzner-server/contributions/probes/real-account-snapshot-on-demand.mjs +158 -30
- package/blueprints/deploy-hetzner-server/contributions/probes/real-account-throwaway-server-provision.mjs +154 -32
- package/blueprints/edge-cloudflare-access/CHANGELOG.md +6 -5
- package/blueprints/edge-cloudflare-access/blueprint.json +1 -1
- package/blueprints/edge-cloudflare-access/contributions/probes/admin-console-gate-surface.mjs +9 -1
- package/blueprints/edge-cloudflare-access/docs/topics.md +1 -1
- package/blueprints/edge-cloudflare-rate-limiting/CHANGELOG.md +4 -7
- package/blueprints/edge-cloudflare-rate-limiting/docs/topics.md +1 -1
- package/blueprints/edge-cloudflare-tunnel/CHANGELOG.md +4 -6
- package/blueprints/edge-cloudflare-tunnel/README.md +1 -2
- package/blueprints/edge-cloudflare-tunnel/docs/topics.md +1 -1
- package/blueprints/edge-cloudflare-turnstile/CHANGELOG.md +2 -3
- package/blueprints/edge-cloudflare-turnstile/docs/topics.md +1 -1
- package/blueprints/email-smtp-resend/CHANGELOG.md +24 -8
- package/blueprints/email-smtp-resend/README.md +2 -2
- package/blueprints/email-smtp-resend/blueprint.json +3 -2
- package/blueprints/email-smtp-resend/contributions/probes/probe-utils.mjs +50 -0
- package/blueprints/email-smtp-resend/contributions/probes/real-account-resend-send.mjs +50 -0
- package/blueprints/email-smtp-resend/contributions/probes/run-real-account-resend-send.mjs +3 -0
- package/blueprints/email-smtp-resend/contributions/probes/run-smtp-round-trip.mjs +3 -0
- package/blueprints/email-smtp-resend/contributions/probes/run-unverified-sender-refusal.mjs +3 -0
- package/blueprints/email-smtp-resend/contributions/probes/smtp-round-trip.mjs +43 -0
- package/blueprints/email-smtp-resend/contributions/probes/unverified-sender-refusal.mjs +99 -0
- package/blueprints/email-smtp-resend/docs/topics.md +2 -3
- package/blueprints/jobs-background/CHANGELOG.md +66 -5
- package/blueprints/jobs-background/README.md +2 -2
- package/blueprints/jobs-background/blueprint.json +3 -2
- package/blueprints/jobs-background/contributions/probes/apply-time-override.mjs +38 -10
- package/blueprints/jobs-background/contributions/probes/apply-time-refusal.mjs +28 -6
- package/blueprints/jobs-background/contributions/probes/event-secrecy.mjs +16 -2
- package/blueprints/jobs-background/contributions/probes/fake-clock-cron.mjs +102 -21
- package/blueprints/jobs-background/contributions/probes/probe-utils.mjs +10 -2
- package/blueprints/jobs-background/contributions/probes/retry-and-fail-real-account.mjs +355 -0
- package/blueprints/jobs-background/contributions/probes/retry-and-fail.mjs +33 -2
- package/blueprints/jobs-background/contributions/probes/run-retry-and-fail-real-account.mjs +12 -0
- package/blueprints/jobs-background/docs/topics.md +1 -1
- package/blueprints/jobs-background/guide/jobs-background.md +1 -1
- package/blueprints/messaging-queue-cloudflare/CHANGELOG.md +25 -19
- package/blueprints/messaging-queue-cloudflare/README.md +12 -12
- package/blueprints/messaging-queue-cloudflare/blueprint.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3001-messaging-queue-cloudflare-adapter.json +2 -2
- package/blueprints/messaging-queue-cloudflare/contributions/adrs/adr-3002-messaging-queue-cloudflare-delivery-semantics.json +1 -1
- package/blueprints/messaging-queue-cloudflare/contributions/probes/real-account-concurrency-smoke.mjs +180 -12
- package/blueprints/messaging-queue-cloudflare/contributions/requirements/messaging-queue-cloudflare-req-006.json +1 -1
- package/blueprints/messaging-queue-cloudflare/docs/topics.md +2 -2
- package/blueprints/messaging-queue-cloudflare/guide/messaging-queue-cloudflare.md +2 -2
- package/blueprints/object-storage-s3/CHANGELOG.md +75 -4
- package/blueprints/object-storage-s3/blueprint.json +3 -2
- package/blueprints/object-storage-s3/contributions/probes/event-secrecy.mjs +73 -12
- package/blueprints/object-storage-s3/contributions/probes/facade-round-trip.mjs +55 -7
- package/blueprints/object-storage-s3/contributions/probes/hetzner-object-storage-round-trip.mjs +102 -18
- package/blueprints/object-storage-s3/contributions/probes/multipart-upload.mjs +105 -36
- package/blueprints/object-storage-s3/contributions/probes/presigned-url.mjs +104 -55
- package/blueprints/object-storage-s3/contributions/probes/probe-utils.mjs +129 -7
- package/blueprints/object-storage-s3/contributions/probes/put-get-round-trip.mjs +80 -18
- package/blueprints/object-storage-s3/contributions/probes/r2-real-account-smoke.mjs +291 -37
- package/blueprints/object-storage-s3/contributions/probes/run-event-secrecy.mjs +8 -2
- package/blueprints/object-storage-s3/contributions/probes/run-facade-round-trip.mjs +5 -5
- package/blueprints/object-storage-s3/contributions/probes/run-hetzner-object-storage-round-trip.mjs +8 -5
- package/blueprints/object-storage-s3/contributions/probes/run-multipart-upload.mjs +8 -2
- package/blueprints/object-storage-s3/contributions/probes/run-presigned-url.mjs +8 -2
- package/blueprints/object-storage-s3/contributions/probes/run-put-get-round-trip.mjs +6 -3
- package/blueprints/object-storage-s3/contributions/probes/run-r2-real-account-smoke.mjs +10 -2
- package/blueprints/object-storage-s3/contributions/requirements/object-storage-s3-req-006.json +1 -1
- package/blueprints/object-storage-s3/docs/topics.md +1 -1
- package/blueprints/object-storage-s3/guide/object-storage-s3.md +1 -1
- package/blueprints/observability-essentials/CHANGELOG.md +23 -7
- package/blueprints/observability-essentials/README.md +2 -2
- package/blueprints/observability-essentials/assets/probe-samples/probe-response-baseline.v2.json +1 -1
- package/blueprints/observability-essentials/blueprint.json +3 -2
- package/blueprints/observability-essentials/contributions/probes/liveness-probe.mjs +84 -0
- package/blueprints/observability-essentials/contributions/probes/metrics-endpoint.mjs +96 -0
- package/blueprints/observability-essentials/contributions/probes/probe-utils.mjs +52 -0
- package/blueprints/observability-essentials/contributions/probes/readiness-probe.mjs +171 -0
- package/blueprints/observability-essentials/contributions/probes/run-liveness-probe.mjs +3 -0
- package/blueprints/observability-essentials/contributions/probes/run-metrics-endpoint.mjs +3 -0
- package/blueprints/observability-essentials/contributions/probes/run-readiness-probe.mjs +3 -0
- package/blueprints/observability-essentials/docs/topics.md +2 -3
- package/blueprints/observability-logging/CHANGELOG.md +29 -4
- package/blueprints/observability-logging/README.md +2 -2
- package/blueprints/observability-logging/blueprint.json +3 -2
- package/blueprints/observability-logging/contributions/probes/correlation-id-flow.mjs +173 -0
- package/blueprints/observability-logging/contributions/probes/line-shape-and-fields.mjs +82 -0
- package/blueprints/observability-logging/contributions/probes/probe-utils.mjs +47 -0
- package/blueprints/observability-logging/contributions/probes/redaction-boundary.mjs +130 -0
- package/blueprints/observability-logging/contributions/probes/run-correlation-id-flow.mjs +3 -0
- package/blueprints/observability-logging/contributions/probes/run-line-shape-and-fields.mjs +3 -0
- package/blueprints/observability-logging/contributions/probes/run-redaction-boundary.mjs +3 -0
- package/blueprints/observability-probe-endpoints/CHANGELOG.md +23 -8
- package/blueprints/observability-probe-endpoints/README.md +3 -3
- package/blueprints/observability-probe-endpoints/blueprint.json +3 -2
- package/blueprints/observability-probe-endpoints/contributions/probes/kubernetes-startup-enabled.mjs +80 -0
- package/blueprints/observability-probe-endpoints/contributions/probes/partial-profile-refusal.mjs +101 -0
- package/blueprints/observability-probe-endpoints/contributions/probes/probe-utils.mjs +49 -0
- package/blueprints/observability-probe-endpoints/contributions/probes/profile-boot-materialisation.mjs +69 -0
- package/blueprints/observability-probe-endpoints/contributions/probes/run-kubernetes-startup-enabled.mjs +3 -0
- package/blueprints/observability-probe-endpoints/contributions/probes/run-partial-profile-refusal.mjs +3 -0
- package/blueprints/observability-probe-endpoints/contributions/probes/run-profile-boot-materialisation.mjs +3 -0
- package/blueprints/observability-probe-endpoints/docs/topics.md +2 -2
- package/blueprints/persistence-data-d1/CHANGELOG.md +16 -3
- package/blueprints/persistence-data-d1/README.md +2 -2
- package/blueprints/persistence-data-d1/blueprint.json +3 -2
- package/blueprints/persistence-data-d1/contributions/adrs/adr-1404-persistence-data-d1-store-boundary.json +1 -1
- package/blueprints/persistence-data-d1/contributions/probes/facade-round-trip.mjs +140 -0
- package/blueprints/persistence-data-d1/contributions/probes/migrations-forward-only.mjs +66 -0
- package/blueprints/persistence-data-d1/contributions/probes/probe-utils.mjs +51 -0
- package/blueprints/persistence-data-d1/contributions/probes/real-account-d1-round-trip.mjs +133 -0
- package/blueprints/persistence-data-d1/contributions/probes/run-facade-round-trip.mjs +3 -0
- package/blueprints/persistence-data-d1/contributions/probes/run-migrations-forward-only.mjs +3 -0
- package/blueprints/persistence-data-d1/contributions/probes/run-real-account-d1-round-trip.mjs +3 -0
- package/blueprints/persistence-data-d1/docs/topics.md +2 -3
- package/blueprints/persistence-data-postgres/CHANGELOG.md +84 -4
- package/blueprints/persistence-data-postgres/README.md +2 -2
- package/blueprints/persistence-data-postgres/blueprint.json +3 -2
- package/blueprints/persistence-data-postgres/contributions/adrs/adr-2801-persistence-data-postgres-driver.json +1 -1
- package/blueprints/persistence-data-postgres/contributions/probes/facade-round-trip.mjs +87 -12
- package/blueprints/persistence-data-postgres/contributions/probes/migration-apply.mjs +245 -19
- package/blueprints/persistence-data-postgres/contributions/probes/pool-posture-smoke.mjs +109 -26
- package/blueprints/persistence-data-postgres/contributions/probes/prepared-statement-scan.mjs +151 -38
- package/blueprints/persistence-data-postgres/contributions/probes/probe-utils.mjs +24 -6
- package/blueprints/persistence-data-postgres/contributions/probes/recovery-restore-round-trip.mjs +261 -48
- package/blueprints/persistence-data-postgres/contributions/probes/transaction-atomicity.mjs +76 -20
- package/blueprints/persistence-data-postgres/contributions/requirements/persistence-data-postgres-req-003.json +1 -1
- package/blueprints/persistence-data-postgres/docs/topics.md +1 -1
- package/blueprints/persistence-data-sqlite/CHANGELOG.md +16 -2
- package/blueprints/persistence-data-sqlite/README.md +2 -2
- package/blueprints/persistence-data-sqlite/blueprint.json +3 -2
- package/blueprints/persistence-data-sqlite/contributions/probes/boot-open-migrate.mjs +90 -0
- package/blueprints/persistence-data-sqlite/contributions/probes/facade-round-trip.mjs +82 -0
- package/blueprints/persistence-data-sqlite/contributions/probes/probe-utils.mjs +83 -0
- package/blueprints/persistence-data-sqlite/contributions/probes/run-boot-open-migrate.mjs +5 -0
- package/blueprints/persistence-data-sqlite/contributions/probes/run-facade-round-trip.mjs +5 -0
- package/blueprints/persistence-data-sqlite/contributions/probes/run-wal-checkpoint.mjs +5 -0
- package/blueprints/persistence-data-sqlite/contributions/probes/wal-checkpoint.mjs +137 -0
- package/blueprints/persistence-data-sqlite/docs/topics.md +2 -3
- package/blueprints/platform-cloudflare-cron-triggers/CHANGELOG.md +5 -5
- package/blueprints/platform-cloudflare-cron-triggers/README.md +2 -3
- package/blueprints/platform-cloudflare-cron-triggers/docs/topics.md +1 -1
- package/blueprints/platform-cloudflare-durable-objects/CHANGELOG.md +6 -10
- package/blueprints/platform-cloudflare-durable-objects/docs/topics.md +1 -1
- package/blueprints/platform-cloudflare-kv/CHANGELOG.md +16 -12
- package/blueprints/platform-cloudflare-kv/README.md +2 -4
- package/blueprints/platform-cloudflare-kv/blueprint.json +2 -2
- package/blueprints/platform-cloudflare-kv/docs/topics.md +1 -1
- package/blueprints/platform-docker-compose-host/CHANGELOG.md +92 -5
- package/blueprints/platform-docker-compose-host/blueprint.json +2 -2
- package/blueprints/platform-docker-compose-host/contributions/probes/caddyfile-validate.mjs +116 -29
- package/blueprints/platform-docker-compose-host/contributions/probes/compose-config-lint.mjs +181 -109
- package/blueprints/platform-docker-compose-host/contributions/probes/probe-utils.mjs +146 -26
- package/blueprints/platform-docker-compose-host/contributions/probes/real-account-minimal-stack-up.mjs +238 -24
- package/blueprints/platform-docker-compose-host/contributions/probes/real-account-reload-burst.mjs +207 -21
- package/blueprints/platform-docker-compose-host/contributions/probes/secrets-as-files-scan.mjs +246 -42
- package/blueprints/platform-docker-compose-host/docs/topics.md +1 -1
- package/blueprints/security-auth-clerk/CHANGELOG.md +18 -6
- package/blueprints/security-auth-clerk/README.md +3 -3
- package/blueprints/security-auth-clerk/assets/wiring/workers-wrangler-toml-shape.md +1 -1
- package/blueprints/security-auth-clerk/blueprint.json +3 -2
- package/blueprints/security-auth-clerk/contributions/probes/hosted-identity-ui-config.mjs +61 -0
- package/blueprints/security-auth-clerk/contributions/probes/probe-utils.mjs +188 -0
- package/blueprints/security-auth-clerk/contributions/probes/real-account-principal-directory-round-trip.mjs +216 -0
- package/blueprints/security-auth-clerk/contributions/probes/real-account-session-inventory.mjs +260 -0
- package/blueprints/security-auth-clerk/contributions/probes/role-model-adapter.mjs +53 -0
- package/blueprints/security-auth-clerk/contributions/probes/run-hosted-identity-ui-config.mjs +4 -0
- package/blueprints/security-auth-clerk/contributions/probes/run-real-account-principal-directory-round-trip.mjs +4 -0
- package/blueprints/security-auth-clerk/contributions/probes/run-real-account-session-inventory.mjs +4 -0
- package/blueprints/security-auth-clerk/contributions/probes/run-role-model-adapter.mjs +4 -0
- package/blueprints/security-auth-clerk/docs/topics.md +2 -3
- package/blueprints/security-auth-keycloak/CHANGELOG.md +18 -7
- package/blueprints/security-auth-keycloak/README.md +2 -2
- package/blueprints/security-auth-keycloak/blueprint.json +3 -2
- package/blueprints/security-auth-keycloak/contributions/probes/discovery-shape.mjs +68 -0
- package/blueprints/security-auth-keycloak/contributions/probes/introspection-shape.mjs +88 -0
- package/blueprints/security-auth-keycloak/contributions/probes/jwt-verifier-shape.mjs +86 -0
- package/blueprints/security-auth-keycloak/contributions/probes/probe-utils.mjs +180 -0
- package/blueprints/security-auth-keycloak/contributions/probes/real-account-realm-round-trip.mjs +91 -0
- package/blueprints/security-auth-keycloak/contributions/probes/role-adapter-shape.mjs +69 -0
- package/blueprints/security-auth-keycloak/contributions/probes/run-discovery-shape.mjs +4 -0
- package/blueprints/security-auth-keycloak/contributions/probes/run-introspection-shape.mjs +4 -0
- package/blueprints/security-auth-keycloak/contributions/probes/run-jwt-verifier-shape.mjs +4 -0
- package/blueprints/security-auth-keycloak/contributions/probes/run-real-account-realm-round-trip.mjs +4 -0
- package/blueprints/security-auth-keycloak/contributions/probes/run-role-adapter-shape.mjs +4 -0
- package/blueprints/security-auth-keycloak/docs/topics.md +1 -2
- package/blueprints/security-auth-magic-link/CHANGELOG.md +15 -4
- package/blueprints/security-auth-magic-link/README.md +2 -2
- package/blueprints/security-auth-magic-link/assets/principal-registry-samples/single-address.md +1 -1
- package/blueprints/security-auth-magic-link/blueprint.json +3 -2
- package/blueprints/security-auth-magic-link/contributions/probes/probe-utils.mjs +174 -0
- package/blueprints/security-auth-magic-link/contributions/probes/real-account-magic-link-send.mjs +139 -0
- package/blueprints/security-auth-magic-link/contributions/probes/run-real-account-magic-link-send.mjs +4 -0
- package/blueprints/security-auth-magic-link/contributions/probes/run-token-entropy-shape.mjs +4 -0
- package/blueprints/security-auth-magic-link/contributions/probes/run-token-issue-verify.mjs +4 -0
- package/blueprints/security-auth-magic-link/contributions/probes/token-entropy-shape.mjs +60 -0
- package/blueprints/security-auth-magic-link/contributions/probes/token-issue-verify.mjs +90 -0
- package/blueprints/security-auth-magic-link/docs/topics.md +1 -1
- package/blueprints/security-auth-oauth2/CHANGELOG.md +16 -5
- package/blueprints/security-auth-oauth2/README.md +2 -2
- package/blueprints/security-auth-oauth2/blueprint.json +3 -2
- package/blueprints/security-auth-oauth2/contributions/probes/authorisation-code-flow-shape.mjs +259 -0
- package/blueprints/security-auth-oauth2/contributions/probes/pkce-challenge-shape.mjs +58 -0
- package/blueprints/security-auth-oauth2/contributions/probes/probe-utils.mjs +190 -0
- package/blueprints/security-auth-oauth2/contributions/probes/provider-adapter-shape.mjs +64 -0
- package/blueprints/security-auth-oauth2/contributions/probes/real-account-authorisation-code-flow.mjs +93 -0
- package/blueprints/security-auth-oauth2/contributions/probes/run-authorisation-code-flow-shape.mjs +4 -0
- package/blueprints/security-auth-oauth2/contributions/probes/run-pkce-challenge-shape.mjs +4 -0
- package/blueprints/security-auth-oauth2/contributions/probes/run-provider-adapter-shape.mjs +4 -0
- package/blueprints/security-auth-oauth2/contributions/probes/run-real-account-authorisation-code-flow.mjs +4 -0
- package/blueprints/security-auth-oauth2/contributions/probes/run-session-bridge-shape.mjs +4 -0
- package/blueprints/security-auth-oauth2/contributions/probes/session-bridge-shape.mjs +78 -0
- package/blueprints/security-auth-oauth2/docs/topics.md +1 -2
- package/blueprints/security-secrets-management/CHANGELOG.md +15 -4
- package/blueprints/security-secrets-management/README.md +2 -2
- package/blueprints/security-secrets-management/blueprint.json +3 -2
- package/blueprints/security-secrets-management/contributions/probes/add-recipient-rotation.mjs +107 -0
- package/blueprints/security-secrets-management/contributions/probes/encrypt-decrypt-round-trip.mjs +122 -0
- package/blueprints/security-secrets-management/contributions/probes/key-rotation.mjs +93 -0
- package/blueprints/security-secrets-management/contributions/probes/mismatched-key-refusal.mjs +74 -0
- package/blueprints/security-secrets-management/contributions/probes/probe-utils.mjs +214 -0
- package/blueprints/security-secrets-management/contributions/probes/run-add-recipient-rotation.mjs +4 -0
- package/blueprints/security-secrets-management/contributions/probes/run-encrypt-decrypt-round-trip.mjs +4 -0
- package/blueprints/security-secrets-management/contributions/probes/run-key-rotation.mjs +4 -0
- package/blueprints/security-secrets-management/contributions/probes/run-mismatched-key-refusal.mjs +4 -0
- package/blueprints/security-secrets-management/docs/topics.md +2 -3
- package/fixtures/canary-manifest.json +9 -9
- package/guidance/harness-template.md +25 -0
- package/guidance/managed/agent-instructions-block.hash +1 -1
- package/guidance/managed/agent-instructions-block.md +25 -0
- package/package.json +2 -2
- package/rcf/adrs/adr-4101-feedback-store-gitignored.json +20 -0
- package/rcf/adrs/adr-4102-fingerprint-and-labels.json +25 -0
- package/rcf/adrs/adr-4103-redaction-rule-based.json +20 -0
- package/rcf/adrs/adr-4104-destination-on-library.json +25 -0
- package/rcf/adrs/adr-4105-gh-ambient-auth.json +20 -0
- package/rcf/adrs/adr-4106-bundled-entries-terminal.json +20 -0
- package/rcf/adrs/adr-4107-stop-is-ask-event.json +30 -0
- package/rcf/adrs/adr-4108-hooks-in-committed-config.json +25 -0
- package/rcf/adrs/adr-4109-referee-validate-adr-crosslinks.json +25 -0
- package/rcf/adrs/adr-4110-referee-coverage-strict-by-default.json +25 -0
- package/rcf/adrs/adr-4111-referee-finalise-refusals.json +20 -0
- package/rcf/adrs/adr-4112-referee-finalise-verified-invariant.json +30 -0
- package/rcf/code-nodes/cn-600.json +45 -0
- package/rcf/code-nodes/cn-601.json +18 -0
- package/rcf/code-nodes/cn-602.json +15 -0
- package/rcf/code-nodes/cn-603.json +12 -0
- package/rcf/code-nodes/cn-604.json +14 -0
- package/rcf/code-nodes/cn-605.json +17 -0
- package/rcf/code-nodes/cn-606.json +12 -0
- package/rcf/code-nodes/cn-607.json +12 -0
- package/rcf/code-nodes/cn-608.json +14 -0
- package/rcf/code-nodes/cn-609.json +17 -0
- package/rcf/code-nodes/cn-620.json +18 -0
- package/rcf/code-nodes/cn-621.json +14 -0
- package/rcf/code-nodes/cn-622.json +15 -0
- package/rcf/code-nodes/cn-623.json +16 -0
- package/rcf/code-nodes/cn-624.json +14 -0
- package/rcf/code-nodes/cn-625.json +15 -0
- package/rcf/code-nodes/cn-626.json +13 -0
- package/rcf/code-nodes/cn-627.json +13 -0
- package/rcf/code-nodes/cn-628.json +14 -0
- package/rcf/code-nodes/cn-629.json +12 -0
- package/rcf/code-nodes/cn-630.json +12 -0
- package/rcf/code-nodes/cn-631.json +13 -0
- package/rcf/code-nodes/cn-632.json +13 -0
- package/rcf/fbs/fbs-180.json +45 -0
- package/rcf/fbs/fbs-181.json +45 -0
- package/rcf/fbs/fbs-182.json +42 -0
- package/rcf/fbs/fbs-183.json +50 -0
- package/rcf/fbs/fbs-184.json +49 -0
- package/rcf/fbs/fbs-185.json +34 -0
- package/rcf/fbs/fbs-186.json +16 -0
- package/rcf/fbs/fbs-187.json +17 -0
- package/rcf/fbs/fbs-188.json +17 -0
- package/rcf/fbs/fbs-189.json +17 -0
- package/rcf/requirements/req-155.json +13 -0
- package/rcf/requirements/req-156.json +13 -0
- package/rcf/requirements/req-157.json +13 -0
- package/rcf/requirements/req-158.json +13 -0
- package/rcf/requirements/req-159.json +13 -0
- package/rcf/requirements/req-160.json +13 -0
- package/rcf/requirements/req-161.json +13 -0
- package/rcf/requirements/req-162.json +13 -0
- package/rcf/requirements/req-163.json +13 -0
- package/rcf/requirements/req-164.json +13 -0
- package/rcf/requirements/req-165.json +13 -0
- package/rcf/tacs/tac-4101-feedback-cli.json +77 -0
- package/rcf/tacs/tac-4102-feedback-store.json +50 -0
- package/rcf/tacs/tac-4103-feedback-redact.json +39 -0
- package/rcf/tacs/tac-4104-feedback-fingerprint.json +33 -0
- package/rcf/tacs/tac-4105-feedback-render.json +45 -0
- package/rcf/tacs/tac-4106-feedback-destination.json +39 -0
- package/rcf/tacs/tac-4107-feedback-gh.json +43 -0
- package/rcf/tacs/tac-4108-feedback-hook.json +46 -0
- package/rcf/tacs/tac-4109-referee-validate-adr-crosslinks.json +20 -0
- package/rcf/tacs/tac-4110-referee-coverage-mode-selector.json +21 -0
- package/rcf/tacs/tac-4111-referee-finalise-per-ac-refusals.json +21 -0
- package/rcf/tacs/tac-4112-referee-finalise-verified-invariant.json +22 -0
- package/rcf/test-suites/ts-140.json +9 -9
- package/rcf/test-suites/ts-150.json +9 -9
- package/rcf/test-suites/ts-185.json +54 -0
- package/rcf/test-suites/ts-186.json +58 -0
- package/rcf/test-suites/ts-187.json +44 -0
- package/rcf/test-suites/ts-188.json +166 -0
- package/rcf/test-suites/ts-189.json +38 -0
- package/rcf/test-suites/ts-190.json +30 -0
- package/rcf/test-suites/ts-191.json +51 -0
- package/rcf/test-suites/ts-192.json +37 -0
- package/rcf/test-suites/ts-193.json +60 -0
- package/rcf/test-suites/ts-194.json +67 -0
- package/rcf/test-suites/ts-195.json +52 -0
- package/rcf/test-suites/ts-196.json +58 -0
- package/rcf/test-suites/ts-197.json +66 -0
- package/rcf/test-suites/ts-198.json +87 -0
- package/rcf/test-suites/ts-199.json +51 -0
- package/rcf/test-suites/ts-200.json +30 -0
- package/rcf/test-suites/ts-201.json +38 -0
- package/rcf/test-suites/ts-202.json +38 -0
- package/rcf/test-suites/ts-203.json +38 -0
- package/rcf/user-stories/us-15501.json +60 -0
- package/rcf/user-stories/us-15502.json +33 -0
- package/rcf/user-stories/us-15503.json +33 -0
- package/rcf/user-stories/us-15601.json +51 -0
- package/rcf/user-stories/us-15701.json +42 -0
- package/rcf/user-stories/us-15801.json +42 -0
- package/rcf/user-stories/us-15802.json +33 -0
- package/rcf/user-stories/us-15901.json +33 -0
- package/rcf/user-stories/us-15902.json +51 -0
- package/rcf/user-stories/us-16001.json +51 -0
- package/rcf/user-stories/us-16101.json +42 -0
- package/rcf/user-stories/us-16102.json +33 -0
- package/rcf/user-stories/us-16103.json +42 -0
- package/rcf/user-stories/us-16104.json +42 -0
- package/rcf/user-stories/us-16201.json +33 -0
- package/rcf/user-stories/us-16301.json +36 -0
- package/rcf/user-stories/us-16401.json +45 -0
- package/rcf/user-stories/us-16501.json +45 -0
- package/rcf/user-stories/us-16502.json +45 -0
- package/releases/releases.yaml +11 -1
- package/src/blueprint/library-loader.js +48 -0
- package/src/blueprint/library-registry.js +13 -0
- package/src/browser-verify/pack-runner.js +7 -12
- package/src/build/mark.js +1 -1
- package/src/cli/blueprint-library.js +149 -0
- package/src/cli/coverage.js +49 -24
- package/src/cli/doctor.js +195 -7
- package/src/cli/feedback.js +2204 -0
- package/src/cli/finalise.js +158 -1
- package/src/cli/help.js +6 -0
- package/src/cli/init.js +63 -0
- package/src/cli/update.js +21 -1
- package/src/core/store/walker.js +33 -0
- package/src/core/store/writer.js +23 -0
- package/src/feedback/destination.js +361 -0
- package/src/feedback/fingerprint.js +132 -0
- package/src/feedback/gh.js +376 -0
- package/src/feedback/hook.js +183 -0
- package/src/feedback/labels.js +87 -0
- package/src/feedback/redact-allowlist.json +14 -0
- package/src/feedback/redact.js +1108 -0
- package/src/feedback/render.js +267 -0
- package/src/feedback/store.js +604 -0
- package/src/finalise/index.js +4 -0
- package/src/finalise/ingest.js +61 -0
- package/src/finalise/ship-without-eval.js +19 -7
- package/src/mcp/tools.js +8 -2
- package/src/setup/feedback-hooks.js +397 -0
- package/src/setup/managed-gitignore.js +3 -0
- package/src/view/html-page.js +5 -5
- package/src/view/style.css +2 -2
package/src/cli/finalise.js
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
// - if rcf-verify is absent, PROMPT to install (or accept an explicit
|
|
26
26
|
// --install-verify flag) - NEVER silently skip the gate (§8.3).
|
|
27
27
|
|
|
28
|
+
import { spawn } from 'node:child_process';
|
|
28
29
|
import { resolve as resolvePath } from 'node:path';
|
|
29
30
|
import process from 'node:process';
|
|
30
31
|
import { parseArgs } from 'node:util';
|
|
@@ -39,11 +40,17 @@ import {
|
|
|
39
40
|
composeShipWithoutVerifiedRecord,
|
|
40
41
|
composeShipWithoutEvalRecord,
|
|
41
42
|
detectVerify,
|
|
43
|
+
findBrowserVerificationMissingAcs,
|
|
42
44
|
findEvalRefusalAcs,
|
|
43
45
|
findMockOnlyDeclaredAcs,
|
|
46
|
+
findScopeMismatchAcs,
|
|
47
|
+
findUiBaselineUnmetAcs,
|
|
44
48
|
loadReport,
|
|
49
|
+
reportHasBrowserVerificationMissing,
|
|
45
50
|
reportHasEvalRefusal,
|
|
46
51
|
reportHasMockOnlyDeclared,
|
|
52
|
+
reportHasScopeMismatch,
|
|
53
|
+
reportHasUiBaselineUnmet,
|
|
47
54
|
resolveAbsentVerify,
|
|
48
55
|
spawnVerify,
|
|
49
56
|
summariseReport,
|
|
@@ -51,6 +58,17 @@ import {
|
|
|
51
58
|
writeShipWithoutVerifiedRecord,
|
|
52
59
|
} from '../finalise/index.js';
|
|
53
60
|
|
|
61
|
+
// Referee-guarantee train (REQ-165 / US-16502, docs claim C-26): the
|
|
62
|
+
// merge-state precondition. Finalise refuses to promote to verified
|
|
63
|
+
// when the git working tree is not on one of these default branches.
|
|
64
|
+
// Kept small and conventional (git init and every hosted git provider
|
|
65
|
+
// default to `main` or `master`); projects on a non-default trunk
|
|
66
|
+
// (rare in modern repos) either rename the trunk to a listed name or
|
|
67
|
+
// pass --allow-pre-merge on every finalise run. The alternative --
|
|
68
|
+
// reading the git remote's default-branch symbolic ref -- adds a
|
|
69
|
+
// network round-trip on every finalise and fails offline; the small
|
|
70
|
+
// name list is deliberately the safer default.
|
|
71
|
+
const DEFAULT_BRANCH_NAMES = new Set(['main', 'master']);
|
|
54
72
|
// Kept in sync with verify's own sets by contract (build never imports verify -
|
|
55
73
|
// that would break the §9 independence guarantee). Profiles: spec §4.
|
|
56
74
|
// Severities: spec §5.1 finding taxonomy.
|
|
@@ -83,6 +101,16 @@ const OPTION_SPEC = {
|
|
|
83
101
|
// string (spec section 8: missing reason exits 2). Shape mirrors
|
|
84
102
|
// `--provision`: a value that looks like a flag is refused.
|
|
85
103
|
'ship-without-eval': { type: 'string' },
|
|
104
|
+
// Referee-guarantee train (REQ-165 / US-16502, docs claim C-26):
|
|
105
|
+
// finalise refuses promotion when the git working tree is not on
|
|
106
|
+
// the default branch (main / master) so `verified` traces to an
|
|
107
|
+
// actual post-merge runtime check by construction. --allow-pre-merge
|
|
108
|
+
// is the deliberate opt-out for pre-merge dev-loop dry runs; the
|
|
109
|
+
// decision is logged in the finalise stdout so the operator sees
|
|
110
|
+
// it. Absent a git working tree (e.g. verify against a bare tarball
|
|
111
|
+
// deploy), the check is skipped and a warn line records that
|
|
112
|
+
// finalise could not resolve the branch state.
|
|
113
|
+
'allow-pre-merge': { type: 'boolean' },
|
|
86
114
|
quiet: { type: 'boolean' },
|
|
87
115
|
help: { type: 'boolean' },
|
|
88
116
|
};
|
|
@@ -139,6 +167,15 @@ Options:
|
|
|
139
167
|
string is mandatory; a missing reason exits
|
|
140
168
|
2. The ack lands on the manifest under
|
|
141
169
|
shipWithoutEval[] with a monotonic id.
|
|
170
|
+
--allow-pre-merge Referee-guarantee train (C-26): finalise
|
|
171
|
+
refuses to promote when the git working
|
|
172
|
+
tree is not on the default branch
|
|
173
|
+
(main / master), so verified traces to an
|
|
174
|
+
actual post-merge runtime check. This flag
|
|
175
|
+
is the deliberate opt-out for pre-merge
|
|
176
|
+
dev-loop dry runs; the decision is logged
|
|
177
|
+
on stdout. Absent a git checkout the check
|
|
178
|
+
degrades to a warn line.
|
|
142
179
|
--quiet Suppress non-error confirmations
|
|
143
180
|
--help Print this help
|
|
144
181
|
|
|
@@ -152,6 +189,58 @@ Exit codes:
|
|
|
152
189
|
declined/unavailable - the FBS is left unchanged, findings surfaced
|
|
153
190
|
`;
|
|
154
191
|
|
|
192
|
+
/**
|
|
193
|
+
* Referee-guarantee train (REQ-165 / US-16502, docs claim C-26).
|
|
194
|
+
* Resolve the current git branch as an out-of-band read so finalise
|
|
195
|
+
* can refuse promotion when the working tree is not on the default
|
|
196
|
+
* branch. Returns `{ ok: true, branch }` on success, `{ ok: false,
|
|
197
|
+
* reason }` when git is absent or the working tree is not a git
|
|
198
|
+
* checkout (bare tarball deploys, container ephemeral CWD). Never
|
|
199
|
+
* throws; the caller degrades to a warn line rather than a hard fail.
|
|
200
|
+
*
|
|
201
|
+
* Kept out of `#core/store` deliberately: this is a build-lite CLI
|
|
202
|
+
* concern (the ship gate reads the working tree state), not a document
|
|
203
|
+
* store concern. It also keeps the store free of a `spawn` seam.
|
|
204
|
+
*
|
|
205
|
+
* @param {object} args
|
|
206
|
+
* @param {string} args.cwd
|
|
207
|
+
* @param {{ spawn?: typeof spawn }} [args.deps]
|
|
208
|
+
* @returns {Promise<{ ok: true, branch: string } | { ok: false, reason: string }>}
|
|
209
|
+
*/
|
|
210
|
+
async function resolveGitBranch({ cwd, deps = {} }) {
|
|
211
|
+
const spawnFn = deps.spawn ?? spawn;
|
|
212
|
+
return new Promise((resolveP) => {
|
|
213
|
+
let stdout = '';
|
|
214
|
+
let stderr = '';
|
|
215
|
+
let child;
|
|
216
|
+
try {
|
|
217
|
+
child = spawnFn('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
|
|
218
|
+
cwd, stdio: ['ignore', 'pipe', 'pipe'],
|
|
219
|
+
});
|
|
220
|
+
} catch (err) {
|
|
221
|
+
resolveP({ ok: false, reason: `git spawn failed: ${err.message}` });
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
child.stdout.on('data', (chunk) => { stdout += chunk.toString('utf8'); });
|
|
225
|
+
child.stderr.on('data', (chunk) => { stderr += chunk.toString('utf8'); });
|
|
226
|
+
child.on('error', (err) => {
|
|
227
|
+
resolveP({ ok: false, reason: `git spawn failed: ${err.message}` });
|
|
228
|
+
});
|
|
229
|
+
child.on('close', (code) => {
|
|
230
|
+
if (code !== 0) {
|
|
231
|
+
resolveP({ ok: false, reason: `git rev-parse exited ${code}: ${stderr.trim() || 'no output'}` });
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
const branch = stdout.trim();
|
|
235
|
+
if (!branch) {
|
|
236
|
+
resolveP({ ok: false, reason: 'git rev-parse returned empty branch name' });
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
resolveP({ ok: true, branch });
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
|
|
155
244
|
/**
|
|
156
245
|
* @param {string[]} argv - argv slice after `finalise`
|
|
157
246
|
* @param {object} [deps] - injectable seams (detect / spawn / prompt / install /
|
|
@@ -409,8 +498,76 @@ export async function main(argv, deps = {}) {
|
|
|
409
498
|
stderr.write(`Report: ${outPath}\n`);
|
|
410
499
|
return 4;
|
|
411
500
|
}
|
|
501
|
+
// Referee-guarantee train (REQ-165 / US-16501, docs claims C-28,
|
|
502
|
+
// C-29, C-30, C-36): three further per-AC verdicts join the
|
|
503
|
+
// finalise refusal list. UI-BASELINE-UNMET (a browserVerification
|
|
504
|
+
// record whose verdict came back `block`, including the aggregate
|
|
505
|
+
// for a block-severity probe-pack failure, C-36), BROWSER-VERIFICATION-MISSING
|
|
506
|
+
// (a UI-bearing FBS with no bound browserVerification record), and
|
|
507
|
+
// SCOPE-MISMATCH (a bound TC narrower than the AC scope, per NV-BL-GATE-01).
|
|
508
|
+
// The docs page does not spell a named sister opt-out for these three;
|
|
509
|
+
// the refusal is honest and there is no ack path here. Graceful on the
|
|
510
|
+
// older report shape (no perAcVerdicts field): behaviour matches the
|
|
511
|
+
// MOCK-ONLY branch above.
|
|
512
|
+
if (passLoaded.ok && reportHasUiBaselineUnmet(passLoaded.report)) {
|
|
513
|
+
const uiUnmet = findUiBaselineUnmetAcs(passLoaded.report);
|
|
514
|
+
const acList = uiUnmet.map((a) => a.acId).filter(Boolean).join(', ');
|
|
515
|
+
stderr.write(`[finalise] gate NOT promoted: ${uiUnmet.length} AC(s) came back UI-BASELINE-UNMET on the report (${acList}); ${fbsId} left '${currentStatus}'.\n`);
|
|
516
|
+
stderr.write('The deployed UI failed at least one bound baseline invariant; a block-severity probe-pack failure aggregates into the same verdict. Fix the UI or the baseline, re-run rcf verify browser, then re-run finalise. Referee-guarantees claims C-28 and C-36.\n');
|
|
517
|
+
stderr.write(summariseReport(passLoaded.report));
|
|
518
|
+
stderr.write(`Report: ${outPath}\n`);
|
|
519
|
+
return 4;
|
|
520
|
+
}
|
|
521
|
+
if (passLoaded.ok && reportHasBrowserVerificationMissing(passLoaded.report)) {
|
|
522
|
+
const bvMissing = findBrowserVerificationMissingAcs(passLoaded.report);
|
|
523
|
+
const acList = bvMissing.map((a) => a.acId).filter(Boolean).join(', ');
|
|
524
|
+
stderr.write(`[finalise] gate NOT promoted: ${bvMissing.length} AC(s) came back BROWSER-VERIFICATION-MISSING on the report (${acList}); ${fbsId} left '${currentStatus}'.\n`);
|
|
525
|
+
stderr.write('A UI-bearing FBS has no browserVerification record on the manifest; verify has nothing to read for the baseline check. Run rcf verify browser <fbs-id> to lay the record down, then re-run finalise. Referee-guarantees claim C-29.\n');
|
|
526
|
+
stderr.write(summariseReport(passLoaded.report));
|
|
527
|
+
stderr.write(`Report: ${outPath}\n`);
|
|
528
|
+
return 4;
|
|
529
|
+
}
|
|
530
|
+
if (passLoaded.ok && reportHasScopeMismatch(passLoaded.report)) {
|
|
531
|
+
const scopeMismatch = findScopeMismatchAcs(passLoaded.report);
|
|
532
|
+
const acList = scopeMismatch.map((a) => a.acId).filter(Boolean).join(', ');
|
|
533
|
+
stderr.write(`[finalise] gate NOT promoted: ${scopeMismatch.length} AC(s) came back SCOPE-MISMATCH on the report (${acList}); ${fbsId} left '${currentStatus}'.\n`);
|
|
534
|
+
stderr.write('A bound TC is narrower than the AC scope (NV-BL-GATE-01). Widen the TC or narrow the AC scope in define, then re-run verify and finalise. Referee-guarantees claim C-30.\n');
|
|
535
|
+
stderr.write(summariseReport(passLoaded.report));
|
|
536
|
+
stderr.write(`Report: ${outPath}\n`);
|
|
537
|
+
return 4;
|
|
538
|
+
}
|
|
539
|
+
// Referee-guarantee train (REQ-165 / US-16502, docs claim C-26):
|
|
540
|
+
// the merge-state precondition. `verified` promises "an actual
|
|
541
|
+
// post-merge runtime check" and the way finalise proves that is
|
|
542
|
+
// by refusing when the working tree is not on the default branch
|
|
543
|
+
// (main / master), so a mid-branch dev-loop run cannot stamp
|
|
544
|
+
// verified. --allow-pre-merge is the deliberate opt-out for
|
|
545
|
+
// pre-merge dry runs; the decision is logged in the finalise
|
|
546
|
+
// stdout so the operator sees it. Absent a git working tree the
|
|
547
|
+
// check degrades to a warn line rather than a hard fail: verify
|
|
548
|
+
// against a bare tarball deploy is legitimate and should not be
|
|
549
|
+
// refused by a git-shape check.
|
|
550
|
+
const gitBranch = await resolveGitBranch({ cwd, deps });
|
|
551
|
+
if (!gitBranch.ok) {
|
|
552
|
+
stderr.write(`[warn] finalise: could not resolve git branch (${gitBranch.reason}); skipping the post-merge precondition. Referee-guarantees claim C-26.\n`);
|
|
553
|
+
} else if (!DEFAULT_BRANCH_NAMES.has(gitBranch.branch)) {
|
|
554
|
+
if (flags['allow-pre-merge']) {
|
|
555
|
+
if (!quiet) {
|
|
556
|
+
stdout.write(`[finalise] --allow-pre-merge: promoting on branch '${gitBranch.branch}' (not a default trunk). Referee-guarantees claim C-26 records the pre-merge decision here.\n`);
|
|
557
|
+
}
|
|
558
|
+
} else {
|
|
559
|
+
stderr.write(`[finalise] gate NOT promoted: git working tree is on branch '${gitBranch.branch}', not a default trunk (${[...DEFAULT_BRANCH_NAMES].join(' / ')}); ${fbsId} left '${currentStatus}'.\n`);
|
|
560
|
+
stderr.write('The referee-guarantees page promises that verified traces to an actual post-merge runtime check. Merge the branch and re-run finalise, or pass --allow-pre-merge for a deliberate pre-merge dry run (the decision is logged on stdout). Referee-guarantees claim C-26.\n');
|
|
561
|
+
return 4;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
412
564
|
const result = await updateDocument({
|
|
413
|
-
projectRoot, tree, id: fbsId, sets: [{ path: 'executionStatus', value: 'verified' }],
|
|
565
|
+
projectRoot, tree, id: fbsId, sets: [{ path: 'executionStatus', value: 'verified' }],
|
|
566
|
+
// Referee-guarantee train (REQ-165 / US-16502, docs claim C-22):
|
|
567
|
+
// the writer refuses executionStatus=verified on FBS by default.
|
|
568
|
+
// Finalise is the only path the docs promise can write it, so
|
|
569
|
+
// this call carries the override flag through.
|
|
570
|
+
options: { allowVerifiedOverride: true },
|
|
414
571
|
});
|
|
415
572
|
if (isRcfError(result)) {
|
|
416
573
|
if (result.kind === 'ioFailure') { writeUnexpectedFailure(result, stderr); return 1; }
|
package/src/cli/help.js
CHANGED
|
@@ -19,6 +19,7 @@ import { HELP as AUDIT_EVAL_HELP } from './eval.js';
|
|
|
19
19
|
import { HELP as CREATE_HELP } from './create.js';
|
|
20
20
|
import { HELP as DELETE_HELP } from './delete.js';
|
|
21
21
|
import { HELP as DOCTOR_HELP } from './doctor.js';
|
|
22
|
+
import { HELP as FEEDBACK_HELP } from './feedback.js';
|
|
22
23
|
import { HELP as FINALISE_HELP } from './finalise.js';
|
|
23
24
|
import { HELP as GUIDANCE_HELP } from './guidance.js';
|
|
24
25
|
import { HELP as IMPACT_HELP } from './impact.js';
|
|
@@ -68,6 +69,8 @@ core Platform plumbing that predates any RCF stage.
|
|
|
68
69
|
mcp Serve the project over MCP (local stdio).
|
|
69
70
|
version [--check] Print installed version; --check compares
|
|
70
71
|
against the release feed.
|
|
72
|
+
feedback <verb> Log a blueprint or core finding locally, and
|
|
73
|
+
(later slices) ask once, submit or bundle.
|
|
71
74
|
help [group] [verb] Print help for a group or a verb.
|
|
72
75
|
|
|
73
76
|
discover Learn what is already true for this project.
|
|
@@ -143,6 +146,8 @@ Verbs:
|
|
|
143
146
|
mcp Serve the project over MCP (local stdio).
|
|
144
147
|
version [--check] Print installed version; --check compares
|
|
145
148
|
against the release feed.
|
|
149
|
+
feedback <verb> Log a blueprint or core finding locally, and
|
|
150
|
+
(later slices) ask once, submit or bundle.
|
|
146
151
|
help [group] [verb] Print help for a group or a verb.
|
|
147
152
|
|
|
148
153
|
Run 'rcf help <verb>' for per-verb help.
|
|
@@ -313,6 +318,7 @@ export const CORE_HELP = {
|
|
|
313
318
|
guidance: GUIDANCE_HELP,
|
|
314
319
|
mcp: MCP_HELP,
|
|
315
320
|
version: VERSION_HELP,
|
|
321
|
+
feedback: FEEDBACK_HELP,
|
|
316
322
|
};
|
|
317
323
|
|
|
318
324
|
/**
|
package/src/cli/init.js
CHANGED
|
@@ -38,6 +38,10 @@ import {
|
|
|
38
38
|
import { PLAYWRIGHT_MCP_VERSION } from '../verify/engine/launcher.js';
|
|
39
39
|
import { writeKnowledgeSeed } from '../setup/knowledge-seed.js';
|
|
40
40
|
import { writeIdentityTemplate } from '../setup/identity-seed.js';
|
|
41
|
+
import {
|
|
42
|
+
writeClaudeFeedbackHooks,
|
|
43
|
+
writeCodexFeedbackHooks,
|
|
44
|
+
} from '../setup/feedback-hooks.js';
|
|
41
45
|
import {
|
|
42
46
|
composeGitignoreBlock,
|
|
43
47
|
computeGitignoreBlockHash,
|
|
@@ -52,6 +56,8 @@ const OPTION_SPEC = {
|
|
|
52
56
|
'non-interactive': { type: 'boolean' },
|
|
53
57
|
'no-agent-setup': { type: 'boolean' },
|
|
54
58
|
'no-playwright-mcp': { type: 'boolean' },
|
|
59
|
+
'no-feedback-hooks': { type: 'boolean' },
|
|
60
|
+
'bin-path': { type: 'string' },
|
|
55
61
|
quiet: { type: 'boolean' },
|
|
56
62
|
help: { type: 'boolean' },
|
|
57
63
|
};
|
|
@@ -81,6 +87,13 @@ Options:
|
|
|
81
87
|
init writes no Playwright entry and touches no
|
|
82
88
|
existing one. Use when a user-scope Playwright
|
|
83
89
|
entry is declared in a harness init cannot probe.
|
|
90
|
+
--no-feedback-hooks Skip the feedback hook install step
|
|
91
|
+
(.claude/settings.json + .codex/hooks.json).
|
|
92
|
+
RULE 17 in the managed instructions block still
|
|
93
|
+
covers the ask via the belt-and-braces path.
|
|
94
|
+
--bin-path <path> Absolute path to the rcf binary. When set, hook
|
|
95
|
+
and MCP entries use 'node <path> ...' instead of
|
|
96
|
+
'npx rcf-lite ...' (pinned deployments).
|
|
84
97
|
--quiet Suppress non-error stdout
|
|
85
98
|
--help Print this help
|
|
86
99
|
`;
|
|
@@ -222,6 +235,29 @@ export async function main(argv, deps = {}) {
|
|
|
222
235
|
// refreshed in place; operator content outside preserved byte-for-byte.
|
|
223
236
|
const gitignoreResult = await ensureManagedGitignore({ projectRoot: cwd });
|
|
224
237
|
|
|
238
|
+
// Step 6: feedback hooks (ADR-4108). Writes the three Stop /
|
|
239
|
+
// SessionEnd / SessionStart entries into .claude/settings.json and
|
|
240
|
+
// .codex/hooks.json unless --no-feedback-hooks is set. Merge
|
|
241
|
+
// discipline mirrors writeMcpConfig: parse, refuse on invalid JSON,
|
|
242
|
+
// add ours only when absent, never clobber. --bin-path pins the
|
|
243
|
+
// hook command to `node <path>` for pinned-bin deployments.
|
|
244
|
+
const feedbackOptOut = Boolean(flags['no-feedback-hooks']);
|
|
245
|
+
const feedbackBinPath = typeof flags['bin-path'] === 'string' ? flags['bin-path'] : undefined;
|
|
246
|
+
let claudeHookResult = null;
|
|
247
|
+
let codexHookResult = null;
|
|
248
|
+
if (!feedbackOptOut) {
|
|
249
|
+
claudeHookResult = await writeClaudeFeedbackHooks({ projectRoot: cwd, binPath: feedbackBinPath });
|
|
250
|
+
if (claudeHookResult && 'kind' in claudeHookResult && 'message' in claudeHookResult) {
|
|
251
|
+
stderr.write(`[error] ${claudeHookResult.kind} ${claudeHookResult.message}\n`);
|
|
252
|
+
return 2;
|
|
253
|
+
}
|
|
254
|
+
codexHookResult = await writeCodexFeedbackHooks({ projectRoot: cwd, binPath: feedbackBinPath });
|
|
255
|
+
if (codexHookResult && 'kind' in codexHookResult && 'message' in codexHookResult) {
|
|
256
|
+
stderr.write(`[error] ${codexHookResult.kind} ${codexHookResult.message}\n`);
|
|
257
|
+
return 2;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
225
261
|
// High-level completion summary: what was set up and what to do next -
|
|
226
262
|
// not a developer file list (operator review 2026-07-16, comment 3a).
|
|
227
263
|
if (!flags.quiet) {
|
|
@@ -248,6 +284,10 @@ export async function main(argv, deps = {}) {
|
|
|
248
284
|
stdout.write(` Knowledge space ${knowledgeVerbAndTarget(knowledgeResult)}.\n`);
|
|
249
285
|
stdout.write(` Operator profile ${identityVerbAndTarget(identityResult)}.\n`);
|
|
250
286
|
stdout.write(` Gitignore ${gitignoreVerbAndTarget(gitignoreResult)}.\n`);
|
|
287
|
+
stdout.write(` Feedback hooks ${feedbackHooksVerbAndTarget(feedbackOptOut, claudeHookResult, codexHookResult)}.\n`);
|
|
288
|
+
if (feedbackOptOut) {
|
|
289
|
+
stdout.write(' (no-feedback-hooks) RULE 17 in the managed instructions block still covers the ask via the belt-and-braces path.\n');
|
|
290
|
+
}
|
|
251
291
|
stdout.write('\nNext: start your agent session in this directory and tell it what you want to build. '
|
|
252
292
|
+ 'It elicits the requirements and drives the build from there - you do not fill in the document chain by hand.\n');
|
|
253
293
|
stdout.write('\nRun `rcf doctor` to confirm the wiring stays clean over time '
|
|
@@ -268,6 +308,29 @@ function identityVerbAndTarget(result) {
|
|
|
268
308
|
return 'template at rcf/.identity/profile.md (gitignored by default; fill in what is useful)';
|
|
269
309
|
}
|
|
270
310
|
|
|
311
|
+
function feedbackHooksVerbAndTarget(optOut, claudeResult, codexResult) {
|
|
312
|
+
if (optOut) return 'skipped (--no-feedback-hooks; RULE 17 fallback in the managed instructions block still applies)';
|
|
313
|
+
const claudeVerb = claudeResult
|
|
314
|
+
? (claudeResult.action === 'kept'
|
|
315
|
+
? 'already present in .claude/settings.json'
|
|
316
|
+
: (claudeResult.action === 'created'
|
|
317
|
+
? 'written to .claude/settings.json'
|
|
318
|
+
: (claudeResult.action === 'foreign'
|
|
319
|
+
? 'foreign entry present in .claude/settings.json (rcf doctor --check feedback-hooks reports the details; no clobber)'
|
|
320
|
+
: 'merged into .claude/settings.json')))
|
|
321
|
+
: 'not touched';
|
|
322
|
+
const codexVerb = codexResult
|
|
323
|
+
? (codexResult.action === 'kept'
|
|
324
|
+
? 'already present in .codex/hooks.json'
|
|
325
|
+
: (codexResult.action === 'created'
|
|
326
|
+
? 'written to .codex/hooks.json'
|
|
327
|
+
: (codexResult.action === 'foreign'
|
|
328
|
+
? 'foreign entry present in .codex/hooks.json (rcf doctor --check feedback-hooks reports the details; no clobber)'
|
|
329
|
+
: 'merged into .codex/hooks.json')))
|
|
330
|
+
: 'not touched';
|
|
331
|
+
return `${claudeVerb}; ${codexVerb}`;
|
|
332
|
+
}
|
|
333
|
+
|
|
271
334
|
function gitignoreVerbAndTarget(result) {
|
|
272
335
|
if (result.action === 'noop') return 'managed block already up to date in .gitignore';
|
|
273
336
|
if (result.action === 'created') return 'managed block written to .gitignore (rcf/.identity/ ignored)';
|
package/src/cli/update.js
CHANGED
|
@@ -24,6 +24,12 @@ const OPTION_SPEC = {
|
|
|
24
24
|
// Phase 10 (X2 CodeNode bridge, D5): re-derive a CN's file-level
|
|
25
25
|
// dependencies via dependency-cruiser, merged into dependencies[].
|
|
26
26
|
'derive-deps': { type: 'boolean' },
|
|
27
|
+
// Referee-guarantee train (REQ-165 / US-16502, docs claim C-22):
|
|
28
|
+
// the writer refuses executionStatus=verified on FBS by default so
|
|
29
|
+
// finalise is the only path that promotes to verified. This flag
|
|
30
|
+
// is the deliberate manual override: a logged operator decision
|
|
31
|
+
// that skips the post-merge runtime check finalise runs.
|
|
32
|
+
'acknowledge-verified-override': { type: 'boolean' },
|
|
27
33
|
};
|
|
28
34
|
|
|
29
35
|
export const HELP = `Usage: rcf define update <id> [options]
|
|
@@ -38,6 +44,14 @@ Options:
|
|
|
38
44
|
--derive-deps CN only: re-derive file-level dependencies via
|
|
39
45
|
dependency-cruiser and merge into dependencies[]
|
|
40
46
|
(dev-time assist; never a runtime dependency)
|
|
47
|
+
--acknowledge-verified-override
|
|
48
|
+
FBS only: acknowledge writing
|
|
49
|
+
executionStatus=verified without a finalise
|
|
50
|
+
run. The writer refuses this write by
|
|
51
|
+
default so finalise (rcf build finalise) is
|
|
52
|
+
the sole path to verified; the override is
|
|
53
|
+
a deliberate, logged operator decision that
|
|
54
|
+
skips the post-merge runtime check.
|
|
41
55
|
--help Print this help
|
|
42
56
|
`;
|
|
43
57
|
|
|
@@ -138,7 +152,13 @@ export async function main(argv, deps = {}) {
|
|
|
138
152
|
}
|
|
139
153
|
const result = await updateDocument({
|
|
140
154
|
projectRoot, tree: walkResult.tree, id, patch, sets,
|
|
141
|
-
options: {
|
|
155
|
+
options: {
|
|
156
|
+
dryRun: Boolean(flags['dry-run']),
|
|
157
|
+
// Referee-guarantee train (REQ-165 / US-16502, docs claim C-22):
|
|
158
|
+
// the writer's default refuses executionStatus=verified on FBS;
|
|
159
|
+
// this flag routes the operator's deliberate override through.
|
|
160
|
+
allowVerifiedOverride: Boolean(flags['acknowledge-verified-override']),
|
|
161
|
+
},
|
|
142
162
|
walkErrors: walkResult.errors,
|
|
143
163
|
});
|
|
144
164
|
if (isRcfError(result)) return handleWriterError(result, stderr);
|
package/src/core/store/walker.js
CHANGED
|
@@ -817,6 +817,39 @@ function collectBrokenReferences(tree, errors) {
|
|
|
817
817
|
filePath: `rcf/adrs/${(adr.adrId ?? '').toLowerCase()}.json`,
|
|
818
818
|
message: `ADR ${adr.adrId} references unknown TAD ${adr.tadId}`,
|
|
819
819
|
});
|
|
820
|
+
// Referee-guarantee train (REQ-163 / US-16301, docs claim C-7):
|
|
821
|
+
// the "every reference in every document resolves" promise on the
|
|
822
|
+
// referee-guarantees page needs the ADR-schema-declared cross-links
|
|
823
|
+
// walked here. `supersededBy` is the strong, chain-of-decisions
|
|
824
|
+
// reference: an ADR that points at an unknown successor is a broken
|
|
825
|
+
// history record. Walk it under the same check helper as every other
|
|
826
|
+
// cross-link so a bad target fails validate with a brokenReference
|
|
827
|
+
// named to the ADR file and the field.
|
|
828
|
+
//
|
|
829
|
+
// `relatedAdrs` (the soft, "see also" back-reference) is intentionally
|
|
830
|
+
// NOT walked here. The `rcf define blueprint supersede` verb writes
|
|
831
|
+
// a project ruling ADR whose relatedAdrs lists BOTH the applied
|
|
832
|
+
// blueprint ADR (present on disk) AND the incoming blueprint ADR
|
|
833
|
+
// (not yet on disk: the incoming blueprint add is the closing step
|
|
834
|
+
// of the option-3 workflow the conflict message prints). Walking
|
|
835
|
+
// relatedAdrs would refuse that ratified workflow between the
|
|
836
|
+
// supersede write and the re-add. Escalation-clause carry: the docs
|
|
837
|
+
// claim held by `supersededBy` alone matches the strong-reference
|
|
838
|
+
// half of the referee promise; the soft `relatedAdrs` half is a
|
|
839
|
+
// schemas follow-up (either "value-narrowed to already-applied ADR
|
|
840
|
+
// ids" or "walked but with a workflow-aware exception on the
|
|
841
|
+
// supersede write path").
|
|
842
|
+
if (typeof adr.supersededBy === 'string' && adr.supersededBy.length > 0) {
|
|
843
|
+
check({
|
|
844
|
+
docId: adr.adrId,
|
|
845
|
+
docKind: 'adr',
|
|
846
|
+
fromField: 'supersededBy',
|
|
847
|
+
targetId: adr.supersededBy,
|
|
848
|
+
expectedKind: 'adr',
|
|
849
|
+
filePath: `rcf/adrs/${(adr.adrId ?? '').toLowerCase()}.json`,
|
|
850
|
+
message: `ADR ${adr.adrId} references unknown ADR ${adr.supersededBy} in supersededBy`,
|
|
851
|
+
});
|
|
852
|
+
}
|
|
820
853
|
}
|
|
821
854
|
|
|
822
855
|
// FBS parent + cross-link + dependency checks. `buildOrder` uniqueness
|
package/src/core/store/writer.js
CHANGED
|
@@ -1115,6 +1115,29 @@ export async function updateDocument({ projectRoot, tree, id, patch, sets = [],
|
|
|
1115
1115
|
return rcfError({ kind: 'usage', message: `update: id ${id} not found`, documentId: id });
|
|
1116
1116
|
}
|
|
1117
1117
|
|
|
1118
|
+
// Referee-guarantee train (REQ-165 / US-16502, docs claim C-22):
|
|
1119
|
+
// `rcf build finalise` is the only path that writes FBS
|
|
1120
|
+
// executionStatus=verified. The manifest / FBS schema admits
|
|
1121
|
+
// `verified` as an executionStatus value (the finalise writer
|
|
1122
|
+
// depends on that), so `validateDocument` would silently accept a
|
|
1123
|
+
// manual override on the update path. Refuse it here unless the
|
|
1124
|
+
// caller passed `options.allowVerifiedOverride: true` (finalise
|
|
1125
|
+
// sets that flag; the define-update CLI sets it only when the
|
|
1126
|
+
// operator passes `--acknowledge-verified-override`, per the
|
|
1127
|
+
// escalation clause on this train). The docs promise is that a
|
|
1128
|
+
// chain that says `verified` traces to an actual post-merge
|
|
1129
|
+
// runtime check by construction; this refusal is the gate.
|
|
1130
|
+
if (kind === 'fbs' && !options.allowVerifiedOverride) {
|
|
1131
|
+
const touchesVerified = (patch && patch.executionStatus === 'verified')
|
|
1132
|
+
|| sets.some((s) => s.path === 'executionStatus' && s.value === 'verified');
|
|
1133
|
+
if (touchesVerified) {
|
|
1134
|
+
return rcfError({
|
|
1135
|
+
kind: 'usage',
|
|
1136
|
+
message: `update: refusing to write executionStatus=verified on ${id}; verified is written only by the finalise gate (rcf build finalise <fbs-id> --url <deploy-url>). For a deliberate manual override use --acknowledge-verified-override on rcf define update; the override is a logged operator decision that skips the post-merge runtime check.`,
|
|
1137
|
+
documentId: id,
|
|
1138
|
+
});
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1118
1141
|
// Build patched body: start from doc, apply --from-file deep merge,
|
|
1119
1142
|
// then apply each --set dot-path assignment.
|
|
1120
1143
|
let next = deepClone(doc);
|