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
|
@@ -23,63 +23,63 @@
|
|
|
23
23
|
"acId": "AC-11001-1",
|
|
24
24
|
"description": "Cover AC-11001-1 via anatomy test: provisioner facade boot emits provisionerReady with metadata-only payload and only the facade reads the token",
|
|
25
25
|
"status": "pending",
|
|
26
|
-
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::
|
|
26
|
+
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::deploy-hetzner-server AC-11001-1 provisioner boot and sole reader"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"id": "TC-140-manifest-schema-shape-valid",
|
|
30
30
|
"acId": "AC-11101-1",
|
|
31
31
|
"description": "Cover AC-11101-1 via anatomy test: hetzner-server.schema.json validates the fixture manifests",
|
|
32
32
|
"status": "pending",
|
|
33
|
-
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::
|
|
33
|
+
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::deploy-hetzner-server AC-11101-1 manifest schema shape valid"
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
"id": "TC-140-manifest-applies-mocked-provision",
|
|
37
37
|
"acId": "AC-11102-1",
|
|
38
38
|
"description": "Cover AC-11102-1 via anatomy test: mocked hcloud shell path returns id, primaryIpv4, location, serverType and hetznerServerProvisioned fires",
|
|
39
39
|
"status": "pending",
|
|
40
|
-
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::
|
|
40
|
+
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::deploy-hetzner-server AC-11102-1 manifest applies to mocked provision"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"id": "TC-140-cloud-init-render-baseline-present",
|
|
44
44
|
"acId": "AC-11201-1",
|
|
45
45
|
"description": "Cover AC-11201-1 via anatomy test: rendered cloud-init YAML carries the six baseline blocks",
|
|
46
46
|
"status": "pending",
|
|
47
|
-
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::
|
|
47
|
+
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::deploy-hetzner-server AC-11201-1 cloud-init render baseline present"
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
"id": "TC-140-cloud-init-hardened-account-bound-probe",
|
|
51
51
|
"acId": "AC-11202-1",
|
|
52
52
|
"description": "Cover AC-11202-1 via anatomy test: probe module manifest declares accountBound true and the fixture readme documents the ssh baseline checks",
|
|
53
53
|
"status": "pending",
|
|
54
|
-
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::
|
|
54
|
+
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::deploy-hetzner-server AC-11202-1 cloud-init hardened account-bound probe declared"
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
"id": "TC-140-firewall-shape-valid-and-refuses-open-ssh",
|
|
58
58
|
"acId": "AC-11301-1",
|
|
59
59
|
"description": "Cover AC-11301-1 via anatomy test: schema accepts a rule set with 22 restricted plus 80/443 open and refuses an open-ssh mutation",
|
|
60
60
|
"status": "pending",
|
|
61
|
-
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::
|
|
61
|
+
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::deploy-hetzner-server AC-11301-1 firewall shape valid and refuses open ssh"
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
"id": "TC-140-snapshot-cadence-enum",
|
|
65
65
|
"acId": "AC-11401-1",
|
|
66
66
|
"description": "Cover AC-11401-1 via anatomy test: snapshotCadence enum is weekly, daily, off",
|
|
67
67
|
"status": "pending",
|
|
68
|
-
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::
|
|
68
|
+
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::deploy-hetzner-server AC-11401-1 snapshot cadence enum"
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
"id": "TC-140-snapshot-on-demand-account-bound-probe",
|
|
72
72
|
"acId": "AC-11402-1",
|
|
73
73
|
"description": "Cover AC-11402-1 via anatomy test: snapshot on-demand probe declares accountBound true and readme names the hcloud image list check",
|
|
74
74
|
"status": "pending",
|
|
75
|
-
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::
|
|
75
|
+
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::deploy-hetzner-server AC-11402-1 snapshot on demand account-bound probe declared"
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
"id": "TC-140-lifecycle-events-metadata-only",
|
|
79
79
|
"acId": "AC-11501-1",
|
|
80
80
|
"description": "Cover AC-11501-1 via anatomy test: hcloud dry-run mock drives four lifecycle events, payloads carry only metadata fields, event-secrecy mutation FAILS",
|
|
81
81
|
"status": "pending",
|
|
82
|
-
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::
|
|
82
|
+
"testPointer": "test/blueprint/deploy-hetzner-server-anatomy.test.js::deploy-hetzner-server AC-11501-1 lifecycle events metadata only"
|
|
83
83
|
}
|
|
84
84
|
],
|
|
85
85
|
"status": "draft"
|
|
@@ -23,63 +23,63 @@
|
|
|
23
23
|
"acId": "AC-12001-1",
|
|
24
24
|
"description": "Cover AC-12001-1 via anatomy test: fixture compose.yaml declares service-per-container, named networks and volumes, and a .env for non-secret config",
|
|
25
25
|
"status": "pending",
|
|
26
|
-
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::
|
|
26
|
+
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::platform-docker-compose-host AC-12001-1 compose layout shape valid"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"id": "TC-150-secrets-file-mount-shape",
|
|
30
30
|
"acId": "AC-12101-1",
|
|
31
31
|
"description": "Cover AC-12101-1 via anatomy test: compose.yaml declares secrets under top-level secrets with a file source and mounts them into the web service; the mounted file is 0o400",
|
|
32
32
|
"status": "pending",
|
|
33
|
-
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::
|
|
33
|
+
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::platform-docker-compose-host AC-12101-1 secrets file mount shape"
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
"id": "TC-150-secrets-scan-fails-on-plaintext",
|
|
37
37
|
"acId": "AC-12102-1",
|
|
38
38
|
"description": "Cover AC-12102-1 via anatomy test: secrets-as-files-scan probe passes on the canonical fixture and fails under SIMULATE_PLAINTEXT_SECRET naming the literal",
|
|
39
39
|
"status": "pending",
|
|
40
|
-
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::
|
|
40
|
+
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::platform-docker-compose-host AC-12102-1 secrets-as-files scan fails on plaintext"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"id": "TC-150-compose-config-lint-refuses-missing-healthcheck",
|
|
44
44
|
"acId": "AC-12201-1",
|
|
45
45
|
"description": "Cover AC-12201-1 via anatomy test: compose-config-lint probe passes on canonical fixture and fails under SIMULATE_MISSING_HEALTHCHECK naming the service",
|
|
46
46
|
"status": "pending",
|
|
47
|
-
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::
|
|
47
|
+
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::platform-docker-compose-host AC-12201-1 compose-config-lint refuses missing healthcheck"
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
"id": "TC-150-real-account-minimal-stack-up-declared-and-skipped-shape",
|
|
51
51
|
"acId": "AC-12202-1",
|
|
52
52
|
"description": "Cover AC-12202-1 via anatomy test: real-account-minimal-stack-up probe declares accountBound true and records accountBoundSkipped when the env var is unset",
|
|
53
53
|
"status": "pending",
|
|
54
|
-
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::
|
|
54
|
+
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::platform-docker-compose-host AC-12202-1 real-account-minimal-stack-up declared and skipped shape"
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
"id": "TC-150-restart-discipline-lint-refuses-unclassified",
|
|
58
58
|
"acId": "AC-12301-1",
|
|
59
59
|
"description": "Cover AC-12301-1 via anatomy test: compose-config-lint enforces restart policy classification and fails under SIMULATE_UNCLASSIFIED_RESTART naming the service",
|
|
60
60
|
"status": "pending",
|
|
61
|
-
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::
|
|
61
|
+
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::platform-docker-compose-host AC-12301-1 restart discipline lint refuses unclassified"
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
"id": "TC-150-caddyfile-validate-refuses-invalid-directive",
|
|
65
65
|
"acId": "AC-12401-1",
|
|
66
66
|
"description": "Cover AC-12401-1 via anatomy test: caddyfile-validate probe passes on canonical Caddyfile and fails under SIMULATE_INVALID_CADDYFILE naming the line",
|
|
67
67
|
"status": "pending",
|
|
68
|
-
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::
|
|
68
|
+
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::platform-docker-compose-host AC-12401-1 caddyfile-validate refuses invalid directive"
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
"id": "TC-150-real-account-reload-burst-declared-and-skipped-shape",
|
|
72
72
|
"acId": "AC-12402-1",
|
|
73
73
|
"description": "Cover AC-12402-1 via anatomy test: real-account-reload-burst probe declares accountBound true and records accountBoundSkipped when the env var is unset",
|
|
74
74
|
"status": "pending",
|
|
75
|
-
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::
|
|
75
|
+
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::platform-docker-compose-host AC-12402-1 real-account-reload-burst declared and skipped shape"
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
"id": "TC-150-log-driver-classification",
|
|
79
79
|
"acId": "AC-12501-1",
|
|
80
80
|
"description": "Cover AC-12501-1 via anatomy test: compose-config-lint asserts every service declares a logging driver and fails under SIMULATE_UNCLASSIFIED_LOG_DRIVER naming the service",
|
|
81
81
|
"status": "pending",
|
|
82
|
-
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::
|
|
82
|
+
"testPointer": "test/blueprint/platform-docker-compose-host-anatomy.test.js::platform-docker-compose-host AC-12501-1 log driver classification"
|
|
83
83
|
}
|
|
84
84
|
],
|
|
85
85
|
"status": "draft"
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-16T14:25:30Z",
|
|
3
|
+
"updatedAt": "2026-09-16T14:25:30Z",
|
|
4
|
+
"purpose": "Cover AC-15501-1..5 (rcf feedback add): happy-path write and env stamp; gitignore refusal and --force bypass; blueprint destination-cannot-be-resolved exits 3 (design 3.1); enum and size validation on class, severity, title and body; blueprint-specific env stamps (blueprintVersion, libraryPrefix, libraryRef, resolvedSha/tarballSha256) sourced from the manifest record.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-15501-1",
|
|
8
|
+
"AC-15501-2",
|
|
9
|
+
"AC-15501-3",
|
|
10
|
+
"AC-15501-4",
|
|
11
|
+
"AC-15501-5"
|
|
12
|
+
],
|
|
13
|
+
"id": "TS-185",
|
|
14
|
+
"usId": "US-15501",
|
|
15
|
+
"title": "Slice 1 (FBS-180): rcf feedback add records one JSONL entry, honours the gitignore refusal, marks blueprint-unresolved with exit 3, validates enums and caps, and stamps blueprint-specific env fields",
|
|
16
|
+
"testCases": [
|
|
17
|
+
{
|
|
18
|
+
"id": "TC-185-add-writes-one-jsonl-line-and-stamps-env",
|
|
19
|
+
"acId": "AC-15501-1",
|
|
20
|
+
"description": "Cover AC-15501-1 via the CLI test: a fully-flagged add writes exactly one JSONL line, prints \"recorded <id> (<n> pending). Nothing sent.\", exit 0, and the entry environment carries harness, rcfLiteVersion, nodeVersion and platform.",
|
|
21
|
+
"status": "pending",
|
|
22
|
+
"testPointer": "test/cli/feedback-add.test.js::AC-15501-1: rcf feedback add writes one JSONL line and stamps env"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "TC-185-add-refuses-without-gitignore",
|
|
26
|
+
"acId": "AC-15501-2",
|
|
27
|
+
"description": "Cover AC-15501-2 via the CLI test: add on a project whose .gitignore does not cover .rcf/feedback/ refuses with exit 2 and points at rcf doctor --fix; --force bypasses the refusal.",
|
|
28
|
+
"status": "pending",
|
|
29
|
+
"testPointer": "test/cli/feedback-add.test.js::AC-15501-2: add refuses when .gitignore does not cover .rcf/feedback/"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "TC-185-add-blueprint-unresolved-exits-3",
|
|
33
|
+
"acId": "AC-15501-3",
|
|
34
|
+
"description": "Cover AC-15501-3 via the CLI test: --kind blueprint against a target absent from rcf/manifest.json:blueprints[] still records the entry, prints the recorded line on stdout, prints \"destination unresolved: <target>\" on stderr, exit 3.",
|
|
35
|
+
"status": "pending",
|
|
36
|
+
"testPointer": "test/cli/feedback-add.test.js::AC-15501-3: blueprint target that does not resolve exits 3 and records unresolved"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "TC-185-add-rejects-bad-class",
|
|
40
|
+
"acId": "AC-15501-4",
|
|
41
|
+
"description": "Cover AC-15501-4 (enum arm) via the CLI test: --class not-a-real-class exits 2 and stderr names the enum.",
|
|
42
|
+
"status": "pending",
|
|
43
|
+
"testPointer": "test/cli/feedback-add.test.js::AC-15501-4: invalid --class exits 2 naming the enum"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "TC-185-add-blueprint-stamps",
|
|
47
|
+
"acId": "AC-15501-5",
|
|
48
|
+
"description": "Cover AC-15501-5 via the CLI test: given a manifest with a git-pinned library blueprint, a shelf blueprint and a core entry, the recorded entries stamp blueprintVersion/libraryPrefix/libraryRef/resolvedSha appropriately; the core entry carries none of these fields.",
|
|
49
|
+
"status": "pending",
|
|
50
|
+
"testPointer": "test/cli/feedback-add.test.js::AC-15501-5: blueprint entries stamp version, libraryPrefix, libraryRef and resolvedSha from the manifest record"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"status": "draft"
|
|
54
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-16T14:25:30Z",
|
|
3
|
+
"updatedAt": "2026-09-16T14:25:30Z",
|
|
4
|
+
"purpose": "Cover AC-15502-1 (rcf feedback list default vs --all/--json) and AC-15502-2 (rcf feedback status counts, opt-out state and gh availability summary) with no file mutation and no network calls.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-15502-1",
|
|
8
|
+
"AC-15502-2"
|
|
9
|
+
],
|
|
10
|
+
"id": "TS-186",
|
|
11
|
+
"usId": "US-15502",
|
|
12
|
+
"title": "Slice 1 (FBS-180): rcf feedback list and rcf feedback status expose the pending set, every state under --all/--json, and the counts / opt-out / gh summary",
|
|
13
|
+
"testCases": [
|
|
14
|
+
{
|
|
15
|
+
"id": "TC-186-list-default-hides-non-pending",
|
|
16
|
+
"acId": "AC-15502-1",
|
|
17
|
+
"description": "Cover AC-15502-1 (default and --all rows) via the CLI test: default output shows only pending; --all shows every state with a [status] prefix column.",
|
|
18
|
+
"status": "pending",
|
|
19
|
+
"testPointer": "test/cli/feedback-list-status.test.js::AC-15502-1: rcf feedback list default shows only pending entries, --all includes every state"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "TC-186-list-json-and-no-mutation",
|
|
23
|
+
"acId": "AC-15502-1",
|
|
24
|
+
"description": "Cover AC-15502-1 (--json shape and no file mutation) via the CLI test: --json emits an array whose length matches total in --all; sha-256 of entries.jsonl is invariant across list runs.",
|
|
25
|
+
"status": "pending",
|
|
26
|
+
"testPointer": "test/cli/feedback-list-status.test.js::AC-15502-1: list --json is machine-readable and length matches total in --all mode"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "TC-186-status-json-shape",
|
|
30
|
+
"acId": "AC-15502-2",
|
|
31
|
+
"description": "Cover AC-15502-2 (--json shape) via the CLI test: status --json returns counts by status, optOut boolean, optOutSource, and the gh / destinations summary keys.",
|
|
32
|
+
"status": "pending",
|
|
33
|
+
"testPointer": "test/cli/feedback-list-status.test.js::AC-15502-2: rcf feedback status --json emits counts, optOut and gh summary"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "TC-186-status-optout-env-ask",
|
|
37
|
+
"acId": "AC-15502-2",
|
|
38
|
+
"description": "Cover AC-15502-2 (env RCF_FEEDBACK_ASK=0 arm) via the CLI test: the env variable flips optOut to true and names its source.",
|
|
39
|
+
"status": "pending",
|
|
40
|
+
"testPointer": "test/cli/feedback-list-status.test.js::AC-15502-2: RCF_FEEDBACK_ASK=0 flips optOut in status"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "TC-186-status-optout-env-disable",
|
|
44
|
+
"acId": "AC-15502-2",
|
|
45
|
+
"description": "Cover AC-15502-2 (env RCF_FEEDBACK_DISABLE=1 arm) via the CLI test: the env variable flips optOut to true and names its source.",
|
|
46
|
+
"status": "pending",
|
|
47
|
+
"testPointer": "test/cli/feedback-list-status.test.js::AC-15502-2: RCF_FEEDBACK_DISABLE=1 flips optOut and names its source"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "TC-186-status-text-summary",
|
|
51
|
+
"acId": "AC-15502-2",
|
|
52
|
+
"description": "Cover AC-15502-2 (text output) via the CLI test: the text status summarises counts on one line and opt-out state on another line, and never touches the network (store read only).",
|
|
53
|
+
"status": "pending",
|
|
54
|
+
"testPointer": "test/cli/feedback-list-status.test.js::AC-15502-2: text status summarises counts on one line and opt-out state on another"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"status": "draft"
|
|
58
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-16T14:25:30Z",
|
|
3
|
+
"updatedAt": "2026-09-16T14:25:30Z",
|
|
4
|
+
"purpose": "Cover AC-15503-1 (rcf feedback defer appends a deferredUntilSession state line per pending entry stamped with the current sessionId) and AC-15503-2 (rcf feedback discard marks only named entries or every pending under --all, hides them from list default, and refuses on an unknown id).",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-15503-1",
|
|
8
|
+
"AC-15503-2"
|
|
9
|
+
],
|
|
10
|
+
"id": "TS-187",
|
|
11
|
+
"usId": "US-15503",
|
|
12
|
+
"title": "Slice 1 (FBS-180): rcf feedback defer and rcf feedback discard honour the fold-by-id state transitions and refuse on unknown ids",
|
|
13
|
+
"testCases": [
|
|
14
|
+
{
|
|
15
|
+
"id": "TC-187-defer-appends-state-lines",
|
|
16
|
+
"acId": "AC-15503-1",
|
|
17
|
+
"description": "Cover AC-15503-1 via the CLI test: defer appends one deferredUntilSession state line per pending entry, stamped with the current sessionId; the folded read reports both entries at status deferredUntilSession; no network call.",
|
|
18
|
+
"status": "pending",
|
|
19
|
+
"testPointer": "test/cli/feedback-defer-discard.test.js::AC-15503-1: defer appends a deferredUntilSession state line per pending entry"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "TC-187-discard-by-id-hides-from-default",
|
|
23
|
+
"acId": "AC-15503-2",
|
|
24
|
+
"description": "Cover AC-15503-2 (named ids) via the CLI test: discard <id1> <id2> marks those entries discarded, list default hides them, --all shows their status.",
|
|
25
|
+
"status": "pending",
|
|
26
|
+
"testPointer": "test/cli/feedback-defer-discard.test.js::AC-15503-2: discard <id> marks only named entries and hides them from list default"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "TC-187-discard-all-marks-every-pending",
|
|
30
|
+
"acId": "AC-15503-2",
|
|
31
|
+
"description": "Cover AC-15503-2 (--all arm) via the CLI test: discard --all marks every pending entry discarded and list default is empty.",
|
|
32
|
+
"status": "pending",
|
|
33
|
+
"testPointer": "test/cli/feedback-defer-discard.test.js::AC-15503-2: discard --all marks every pending entry discarded"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "TC-187-discard-refuses-unknown-id",
|
|
37
|
+
"acId": "AC-15503-2",
|
|
38
|
+
"description": "Cover AC-15503-2 (unknown-id arm) via the CLI test: discard on an unknown id exits 2, no state line is written to the log.",
|
|
39
|
+
"status": "pending",
|
|
40
|
+
"testPointer": "test/cli/feedback-defer-discard.test.js::AC-15503-2: discard with an unknown id exits 2 and writes nothing"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"status": "draft"
|
|
44
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-16T15:27:35Z",
|
|
3
|
+
"updatedAt": "2026-09-17T01:30:00Z",
|
|
4
|
+
"purpose": "Cover AC-15601-1 (rcf feedback preview renders each pending entry as the title and body that would be filed, lists the destination, and prints the redaction ledger over the full eight-rule vocabulary), AC-15601-2 (preview marks residual-secret findings so the operator sees before consenting; the submit half of AC-15601-2 lands with slice 4), AC-15601-3 (preview never mutates the stored entries.jsonl), AC-15601-4 (a final whole-text residual-secret pass on the fully rendered and normalised issue body and each bundle refuses submit on any hit) and AC-15701-1 (a stable 12-hex fingerprint is attached per entry, folds across blueprint versions when the anchor+class match, and falls back to normalised-title tokens with a warning when the anchor is absent).",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-15601-1",
|
|
8
|
+
"AC-15601-2",
|
|
9
|
+
"AC-15601-3",
|
|
10
|
+
"AC-15601-4",
|
|
11
|
+
"AC-15701-1"
|
|
12
|
+
],
|
|
13
|
+
"id": "TS-188",
|
|
14
|
+
"usId": "US-15601",
|
|
15
|
+
"title": "Slice 2 (FBS-181): rcf feedback preview renders redacted issue text, surfaces residual-secret markers, leaves the store byte-invariant, and attaches a stable fingerprint",
|
|
16
|
+
"testCases": [
|
|
17
|
+
{
|
|
18
|
+
"id": "TC-188-preview-renders-full-vocabulary-ledger",
|
|
19
|
+
"acId": "AC-15601-1",
|
|
20
|
+
"description": "Cover AC-15601-1 via the CLI test: --json emits titleRendered, bodyRendered, destination { repo, visibility } and a ledger whose rule names include project-root, absolute-path, email, hostname, private-ip, secret-token, operator-identity and size-shape; the rendered body carries none of the raw secret substrings, no private IP, no operator-name tokens, no em-dash, and stays under the byte cap.",
|
|
21
|
+
"status": "pending",
|
|
22
|
+
"testPointer": "test/cli/feedback-preview.test.js::AC-15601-1: rcf feedback preview --json emits rendered title, body, destination and full-vocabulary ledger"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "TC-188-preview-residual-secret-refusal",
|
|
26
|
+
"acId": "AC-15601-2",
|
|
27
|
+
"description": "Cover AC-15601-2 (preview half) via the CLI test: an obfuscated token embedded in a longer identifier is caught by the second-pass residual check and surfaced with the residual-secret marker on that entry, while a clean entry reports residual: []. The submit half of the AC lands with slice 4 once the submit path exists.",
|
|
28
|
+
"status": "pending",
|
|
29
|
+
"testPointer": "test/cli/feedback-preview.test.js::AC-15601-2: preview surfaces a residual-secret line so the agent can rewrite before submit"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "TC-188-preview-store-byte-invariant",
|
|
33
|
+
"acId": "AC-15601-3",
|
|
34
|
+
"description": "Cover AC-15601-3 via the CLI test: sha-256 of .rcf/feedback/entries.jsonl is invariant across two preview runs (text + --json).",
|
|
35
|
+
"status": "pending",
|
|
36
|
+
"testPointer": "test/cli/feedback-preview.test.js::AC-15601-3: preview never mutates the stored entries.jsonl (sha-256 invariant)"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "TC-188-preview-fingerprint-folds-across-entries",
|
|
40
|
+
"acId": "AC-15701-1",
|
|
41
|
+
"description": "Cover AC-15701-1 via the CLI test: two entries with the same kind, targetKey, anchor and symptomClass yield identical fingerprints.",
|
|
42
|
+
"status": "pending",
|
|
43
|
+
"testPointer": "test/cli/feedback-preview.test.js::AC-15701-1: preview attaches a stable fingerprint per entry and it does not shift across blueprint versions"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "TC-188-preview-fingerprint-fallback-warns",
|
|
47
|
+
"acId": "AC-15701-1",
|
|
48
|
+
"description": "Cover AC-15701-1 (fallback arm) via the CLI test: an entry with no anchor triggers the fingerprintFallback flag in --json and a warning banner in text mode so the agent learns to supply an anchor.",
|
|
49
|
+
"status": "pending",
|
|
50
|
+
"testPointer": "test/cli/feedback-preview.test.js::AC-15701-1 (fallback): missing anchor triggers the fingerprintFallback flag and a warning banner in text mode"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "TC-188-redact-eight-rule-corpus",
|
|
54
|
+
"acId": "AC-15601-1",
|
|
55
|
+
"description": "Cover AC-15601-1 (fixture corpus for the redactor's rule vocabulary) via the unit test: every rule name in the design section 5 ledger (project-root, absolute-path, email, hostname, private-ip, secret-token, operator-identity, size-shape) fires against the corresponding fixture and the ledger is deterministic across two calls.",
|
|
56
|
+
"status": "pending",
|
|
57
|
+
"testPointer": "test/feedback/redact.test.js::redact rule 1: project root becomes <project> and paths under it keep their tail"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "TC-188-fingerprint-canonical-input",
|
|
61
|
+
"acId": "AC-15701-1",
|
|
62
|
+
"description": "Cover AC-15701-1 (canonical input) via the unit test: fingerprintInput uses <kind>|<targetKey>|<anchor>|<symptomClass>, upper-cases the anchor, excludes blueprint version, and switches to the <kind>|<targetKey>|<symptomClass>|<normalisedTitle> fallback when the anchor is absent.",
|
|
63
|
+
"status": "pending",
|
|
64
|
+
"testPointer": "test/feedback/fingerprint.test.js::missing anchor uses the title-fallback canonical input"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "TC-188-render-fingerprint-twin-and-labels",
|
|
68
|
+
"acId": "AC-15701-1",
|
|
69
|
+
"description": "Cover AC-15701-1 (render surface) via the unit test: renderIssue writes the fingerprint twice (visible line and HTML comment) and requests the six-label bootstrap subset for the entry's severity and kind.",
|
|
70
|
+
"status": "pending",
|
|
71
|
+
"testPointer": "test/feedback/render.test.js::renderIssue body carries the fingerprint twice and the Environment table"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"id": "TC-188-safeguard-whole-text-residual",
|
|
75
|
+
"acId": "AC-15601-4",
|
|
76
|
+
"description": "Cover AC-15601-4 (safeguard, per-entry) via the unit test: findResidualSecrets detects a multiline PEM shape in a rendered-body-shaped string, which a per-line scan could not see. Binds the whole-text/multiline shape of the residual pass introduced in fix round 2 (R-P0-2 root fix + defence).",
|
|
77
|
+
"status": "pending",
|
|
78
|
+
"testPointer": "test/cli/feedback-fix-round-2.test.js::AC-15601-4 safeguard: whole-text residual scan detects a multiline PEM in the rendered surface"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "TC-188-safeguard-submit-refuses-residual",
|
|
82
|
+
"acId": "AC-15601-4",
|
|
83
|
+
"description": "Cover AC-15601-4 (safeguard, submit half) via the CLI test: an entry whose stealth token slips the first-pass but is caught by the loose-pattern residual scan in the rendered body causes submit --yes --dry-run to exit 3 (entry stays pending; no create/comment path runs).",
|
|
84
|
+
"status": "pending",
|
|
85
|
+
"testPointer": "test/cli/feedback-fix-round-2.test.js::AC-15601-4 safeguard: submit refuses (exit 3) when a title-embedded token survives to the rendered body"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "TC-188-vocab-shared-constant",
|
|
89
|
+
"acId": "AC-15601-1",
|
|
90
|
+
"description": "Cover AC-15601-1 (fix round 4, F-P0-A) via the unit test: SECRET_KEY_VOCABULARY carries every shortname the HQ gate probes named as leaking (pw, pwd, pass, key, auth) and its regex source is right-bounded at a word edge so `keyword` and `authors` do not fold.",
|
|
91
|
+
"status": "pending",
|
|
92
|
+
"testPointer": "test/cli/feedback-fix-round-4.test.js::F-P0-A (round 4): SECRET_KEY_VOCABULARY carries every shortname the HQ gate probes named as leaking"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "TC-188-vocab-shortname-probes",
|
|
96
|
+
"acId": "AC-15601-1",
|
|
97
|
+
"description": "Cover AC-15601-1 (fix round 4, F-P0-A) via the probe suite: each of the ten HQ-gate leak inputs (pw=, pwd=, pass=, key=, auth= plus quoted / tab / caps / hyphen / JSON variants) folds under the kv-secret pass and leaves nothing on the residual scan.",
|
|
98
|
+
"status": "pending",
|
|
99
|
+
"testPointer": "test/cli/feedback-fix-round-4.test.js::F-P0-A (round 4): all ten shortname kv probes fold cleanly and leave nothing residual"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "TC-188-vocab-keyword-authors-negative",
|
|
103
|
+
"acId": "AC-15601-1",
|
|
104
|
+
"description": "Cover AC-15601-1 (fix round 4, F-P0-A negative case) via the unit test: keyword=X and authors=X are NOT folded (right-bound word-edge guard on the vocabulary alternation) so false-positive redactions do not swallow benign prose.",
|
|
105
|
+
"status": "pending",
|
|
106
|
+
"testPointer": "test/cli/feedback-fix-round-4.test.js::F-P0-A (round 4): keyword and authors kv pairs are NOT folded by the right-bound word-edge guard"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "TC-188-url-credential-webhook",
|
|
110
|
+
"acId": "AC-15601-1",
|
|
111
|
+
"description": "Cover AC-15601-1 (fix round 4, F-P0-B) via the unit test: rule 9 (url-credential) folds the Slack webhook path segment to <url-credential> before the rule-4 hostname pass folds the host to <host>, so a webhook URL in prose loses the token but keeps the surrounding text intact.",
|
|
112
|
+
"status": "pending",
|
|
113
|
+
"testPointer": "test/cli/feedback-fix-round-4.test.js::F-P0-B (round 4): Slack webhook path is folded before hostname folding (P07 from the gate)"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "TC-188-url-credential-userinfo",
|
|
117
|
+
"acId": "AC-15601-1",
|
|
118
|
+
"description": "Cover AC-15601-1 (fix round 4, F-P0-B) via the unit test: user:pass@host userinfo is dropped by rule 9 so the rule-4 hostname pass still sees a well-formed URL and folds a non-allowlisted host to <host>. The credential does not leak on the wire.",
|
|
119
|
+
"status": "pending",
|
|
120
|
+
"testPointer": "test/cli/feedback-fix-round-4.test.js::F-P0-B (round 4): userinfo (user:pass@host) is dropped and the host still folds via rule 4"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "TC-188-url-credential-query",
|
|
124
|
+
"acId": "AC-15601-1",
|
|
125
|
+
"description": "Cover AC-15601-1 (fix round 4, F-P0-B) via the unit test: URL query parameters whose name matches the shared vocabulary (`?token=`, `?api_key=`) or the presigned-URL set (`?X-Amz-Signature=`) have their values folded to <url-credential>, and a benign allowlisted URL (github.com/foo/bar) has no url-credential ledger row.",
|
|
126
|
+
"status": "pending",
|
|
127
|
+
"testPointer": "test/cli/feedback-fix-round-4.test.js::F-P0-B (round 4): presigned URL query parameter value is redacted"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "TC-188-safeguard-shortname-webhook",
|
|
131
|
+
"acId": "AC-15601-4",
|
|
132
|
+
"description": "Cover AC-15601-4 (fix round 4, safeguard) via the unit test: findResidualSecrets catches both a shortname-key kv shape (pw=...) and a webhook-path shape (/services/.../ or /api/webhooks/.../) in one pass, proving the safeguard shares the same vocabulary as the first-pass redactor.",
|
|
133
|
+
"status": "pending",
|
|
134
|
+
"testPointer": "test/cli/feedback-fix-round-4.test.js::F-P0-A/B (round 4): findResidualSecrets catches shortname kv AND webhook-path shapes in one pass"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"id": "TC-188-dryrun-writes-nothing",
|
|
138
|
+
"acId": "AC-15601-4",
|
|
139
|
+
"description": "Cover AC-15601-4 (fix round 4, F-01, design R3c) via the CLI test: `rcf feedback submit --yes --dry-run` writes no files under .rcf/feedback/outbox/ even for the unresolved-destination and whole-destination-fallback branches (previously the dry-run gate on the create/comment path let the bundle write run unconditionally).",
|
|
140
|
+
"status": "pending",
|
|
141
|
+
"testPointer": "test/cli/feedback-fix-round-4.test.js::F-01 (round 4, R3c): submit --dry-run --yes writes no outbox bundle for an unresolved destination"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "TC-188-r4-separator-probes",
|
|
145
|
+
"acId": "AC-15601-1",
|
|
146
|
+
"description": "Cover AC-15601-1 (fix round 5, F-05, design amendment R4) via the unit test: every re-gate R4 probe (markdown table pipes, whitespace runs, tabs, hyphens, em-dashes, HTML numeric entities, prose is / was / set to bridges, arrows) folds a vocabulary key labelling a value-shape token, the raw value never survives, and the residual scan is clean.",
|
|
147
|
+
"status": "pending",
|
|
148
|
+
"testPointer": "test/cli/feedback-fix-round-5.test.js::F-05 (round 5, R4): every re-gate R4 probe folds under the primary pass and leaves nothing residual"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "TC-188-r4-residual-safeguard",
|
|
152
|
+
"acId": "AC-15601-4",
|
|
153
|
+
"description": "Cover AC-15601-4 (fix round 5, R4 safeguard) via the unit test: findResidualSecrets flags a raw R4 shape (markdown table, prose bridge, HTML entity, em-dash separator) as kv-secret-r4 so submit refuses fail-closed on any R4 leak the first-pass missed.",
|
|
154
|
+
"status": "pending",
|
|
155
|
+
"testPointer": "test/cli/feedback-fix-round-5.test.js::F-05 (round 5, R4): findResidualSecrets flags a raw R4 shape as kv-secret-r4"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"id": "TC-188-r4-overredaction-guard",
|
|
159
|
+
"acId": "AC-15601-1",
|
|
160
|
+
"description": "Cover AC-15601-1 (fix round 5, R4 negative case) via the unit test: ordinary prose that carries a vocabulary word (`the password field is required`, `the password is required`, `see commit abc1234 at HEAD`, `keyword=abcdef`, `authors=joe,jane`) does NOT fold because the value-shape gate rejects single-class values and values under 8 characters.",
|
|
161
|
+
"status": "pending",
|
|
162
|
+
"testPointer": "test/cli/feedback-fix-round-5.test.js::F-05 (round 5, R4 guard): a vocabulary word in ordinary prose (single-class value, or short value) does NOT fold"
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"status": "draft"
|
|
166
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-16T16:20:01Z",
|
|
3
|
+
"updatedAt": "2026-09-16T16:20:01Z",
|
|
4
|
+
"purpose": "Cover AC-15801-1 (library.json:issues object snapshotted onto rcf/blueprint-libraries.json:entries[] as issuesRepo and issuesVisibility on rcf library add; the review-on-add card prints the Feedback destination line naming repo and visibility), AC-15801-2 (destination.resolve walks entry -> manifest -> registry issuesRepo, falls back to sourceRef derivation for github URLs with derived:true, returns unresolved when neither is available; shelf and core route to Stravica/rcf-lite) and AC-15801-3 (rcf doctor --check feedback-destinations lists every registered library with no resolvable destination as a warn-only row with refusedByFix:true; exit stays 0).",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-15801-1",
|
|
8
|
+
"AC-15801-2",
|
|
9
|
+
"AC-15801-3"
|
|
10
|
+
],
|
|
11
|
+
"id": "TS-189",
|
|
12
|
+
"usId": "US-15801",
|
|
13
|
+
"title": "Slice 3 (FBS-182): library.json issues field snapshotted on library add, destination resolver walks the manifest/registry chain, and rcf doctor feedback-destinations warns on libraries with no resolvable destination",
|
|
14
|
+
"testCases": [
|
|
15
|
+
{
|
|
16
|
+
"id": "TC-189-library-add-snapshots-issues-and-prints-review-line",
|
|
17
|
+
"acId": "AC-15801-1",
|
|
18
|
+
"description": "Cover AC-15801-1 via the CLI test: a library.json with an issues object of { repo, visibility: 'private' } is added to a fresh project; rcf/blueprint-libraries.json carries issuesRepo and issuesVisibility on the entry, the review-on-add stdout matches 'Feedback destination: OWNER/REPO (private)', and a second library without an issues field neither prints the line nor writes the fields on the registry entry.",
|
|
19
|
+
"status": "pending",
|
|
20
|
+
"testPointer": "test/cli/feedback-destinations.test.js::AC-15801-1: library.json issues is snapshotted onto the registry entry and the review card prints the Feedback destination line"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "TC-189-resolver-four-fixture-walk",
|
|
24
|
+
"acId": "AC-15801-2",
|
|
25
|
+
"description": "Cover AC-15801-2 via the unit test: destination.resolve returns the expected shape for each of the four fixture cases from the AC given: a shelf blueprint routes to CORE_REPO with derived:false; a library entry with explicit issues wins over derivation and reports source: library-manifest; a library entry with no issues but a github git+https sourceRef derives OWNER/REPO with derived:true and source: sourceRef-derivation; a library entry with neither issues nor a github source returns unresolved with reason no-github-source; a library entry that is completely absent returns unresolved with reason unknown-target.",
|
|
26
|
+
"status": "pending",
|
|
27
|
+
"testPointer": "test/feedback/destination.test.js::AC-15801-2 shelf fixture: a blueprint with no libraryPrefix routes to CORE_REPO"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "TC-189-doctor-feedback-destinations-warn-only",
|
|
31
|
+
"acId": "AC-15801-3",
|
|
32
|
+
"description": "Cover AC-15801-3 via the CLI test: rcf doctor --check feedback-destinations --json against a project with two registered libraries (one with issues, one without) returns exactly one drift row of item unresolved-library naming the second library, whose message includes the publisher.contact from the registry entry and whose refusedByFix flag is true; the overall doctor exit code stays 0 because the check is warn-only.",
|
|
33
|
+
"status": "pending",
|
|
34
|
+
"testPointer": "test/cli/feedback-destinations.test.js::AC-15801-3: rcf doctor --check feedback-destinations warns on a library without a resolvable destination and exits 0"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"status": "draft"
|
|
38
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-16T16:20:01Z",
|
|
3
|
+
"updatedAt": "2026-09-16T16:20:01Z",
|
|
4
|
+
"purpose": "Cover AC-15802-1 (rcf feedback preview on a shelf blueprint entry prints Stravica/rcf-lite as the destination and the CORE_REPO constant is pinned to packages/rcf-lite/package.json:bugs.url) and AC-15802-2 (a --kind core entry routes to Stravica/rcf-lite regardless of any library manifest content, including a library that names 'define validate' as a target).",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-15802-1",
|
|
8
|
+
"AC-15802-2"
|
|
9
|
+
],
|
|
10
|
+
"id": "TS-190",
|
|
11
|
+
"usId": "US-15802",
|
|
12
|
+
"title": "Slice 3 (FBS-182): shelf blueprints and --kind core entries route to Stravica/rcf-lite via the package.json:bugs.url constant",
|
|
13
|
+
"testCases": [
|
|
14
|
+
{
|
|
15
|
+
"id": "TC-190-core-repo-pinned-to-bugs-url",
|
|
16
|
+
"acId": "AC-15802-1",
|
|
17
|
+
"description": "Cover AC-15802-1 via the unit test: CORE_REPO equals parseBugsRepo(package.json), which today is Stravica/rcf-lite; the parser accepts the bare URL, the URL with the /issues suffix and the object form { bugs: { url } } so a rename ripples through the single package.json field.",
|
|
18
|
+
"status": "pending",
|
|
19
|
+
"testPointer": "test/feedback/destination.test.js::AC-15802-1: CORE_REPO is pinned to packages/rcf-lite/package.json:bugs.url"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "TC-190-core-kind-ignores-library-manifest-content",
|
|
23
|
+
"acId": "AC-15802-2",
|
|
24
|
+
"description": "Cover AC-15802-2 via the CLI test: a project with a registered library that declares a good issuesRepo, followed by a rcf feedback add --kind core --target 'define validate' entry; rcf feedback preview --json reports destination.repo Stravica/rcf-lite (kind: core, visibility: public) for that entry, ignoring the library declaration entirely.",
|
|
25
|
+
"status": "pending",
|
|
26
|
+
"testPointer": "test/cli/feedback-destinations.test.js::AC-15802-1: rcf feedback preview prints Stravica/rcf-lite (public) as the destination for a --kind core entry, and no library manifest content overrides it"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"status": "draft"
|
|
30
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": "2026-09-16T17:23:12Z",
|
|
3
|
+
"updatedAt": "2026-09-16T17:23:12Z",
|
|
4
|
+
"purpose": "Cover AC-15701-2 (submit calls gh search + create/comment per the zero/one/many hit table) and AC-15701-3 (search unavailable falls through to create with dedupe: unchecked; closed-state hit stamps a previously reported reference into the create body). Slice 4 arm of US-15701.",
|
|
5
|
+
"testLevel": "integration",
|
|
6
|
+
"acIds": [
|
|
7
|
+
"AC-15701-2",
|
|
8
|
+
"AC-15701-3"
|
|
9
|
+
],
|
|
10
|
+
"id": "TS-191",
|
|
11
|
+
"usId": "US-15701",
|
|
12
|
+
"title": "Slice 4 (FBS-183): dedupe search folds zero/one/many hits into create or +1 comment; search unavailable falls through with dedupe: unchecked and closed hits stamp a previously reported reference",
|
|
13
|
+
"testCases": [
|
|
14
|
+
{
|
|
15
|
+
"id": "TC-191-submit-zero-hit-creates",
|
|
16
|
+
"acId": "AC-15701-2",
|
|
17
|
+
"description": "Cover AC-15701-2 (zero-hit arm) via the CLI test: with the configurable gh fake returning { matches: [] }, submit --yes calls ghIssueCreate for each entry and stamps dedupe: new.",
|
|
18
|
+
"status": "pending",
|
|
19
|
+
"testPointer": "test/cli/feedback-submit.test.js::AC-15901-1: submit --yes with zero-hit search creates each entry, marks submitted, prints URL"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "TC-191-submit-one-hit-comments",
|
|
23
|
+
"acId": "AC-15701-2",
|
|
24
|
+
"description": "Cover AC-15701-2 (one-hit arm) via the CLI test: with matches returning one issue, submit calls ghIssueComment on that number and no ghIssueCreate.",
|
|
25
|
+
"status": "pending",
|
|
26
|
+
"testPointer": "test/cli/feedback-submit.test.js::AC-15701-2: one-hit search calls gh issue comment on that number"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "TC-191-submit-many-hit-comment-lowest",
|
|
30
|
+
"acId": "AC-15701-2",
|
|
31
|
+
"description": "Cover AC-15701-2 (many-hit arm) via the CLI test: with three matches returning numbers 30/12/47, submit comments on #12 (lowest) and the body mentions #30 and #47.",
|
|
32
|
+
"status": "pending",
|
|
33
|
+
"testPointer": "test/cli/feedback-submit.test.js::AC-15701-2: many-hit search comments on the lowest number and names the others"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "TC-191-submit-search-unchecked",
|
|
37
|
+
"acId": "AC-15701-3",
|
|
38
|
+
"description": "Cover AC-15701-3 (search failure arm) via the CLI test: with search returning { error: 'search-unavailable' }, submit falls through to create and stamps dedupe: unchecked on the entry state.",
|
|
39
|
+
"status": "pending",
|
|
40
|
+
"testPointer": "test/cli/feedback-submit.test.js::AC-15701-3: search error falls through to create with dedupe:unchecked"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "TC-191-submit-closed-reference",
|
|
44
|
+
"acId": "AC-15701-3",
|
|
45
|
+
"description": "Cover AC-15701-3 (closed-hit arm) via the CLI test: with open search empty and closed search returning #88, submit creates a new issue whose body carries 'Previously reported and closed as #88'.",
|
|
46
|
+
"status": "pending",
|
|
47
|
+
"testPointer": "test/cli/feedback-submit.test.js::AC-15701-3: closed-state hit produces a create with previously reported reference"
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"status": "draft"
|
|
51
|
+
}
|