@haposoft/cafekit 0.16.0-rc.8 → 0.16.1
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/README.md +117 -28
- package/bin/__tests__/codex-hooks-ownership.test.js +239 -0
- package/bin/__tests__/codex-hooks.test.js +175 -0
- package/bin/__tests__/codex-native.test.js +1882 -70
- package/bin/__tests__/develop-contract.test.js +442 -23
- package/bin/__tests__/grok-envelope.test.js +271 -0
- package/bin/__tests__/grok-platform.test.js +133 -0
- package/bin/__tests__/hook-payload.test.js +194 -0
- package/bin/__tests__/installer-safety.test.js +3 -3
- package/bin/__tests__/omp-bridge.test.js +168 -0
- package/bin/__tests__/omp-hooks.test.js +178 -0
- package/bin/__tests__/omp-runtime.test.js +150 -0
- package/bin/__tests__/optional-skill-inventory.test.js +249 -0
- package/bin/__tests__/output-styles.test.js +214 -0
- package/bin/__tests__/package-inventory.test.js +1735 -98
- package/bin/__tests__/runtime-dir.test.js +158 -0
- package/bin/__tests__/runtime-schema.test.js +113 -0
- package/bin/__tests__/secret-output-guardrail.test.js +122 -0
- package/bin/__tests__/skill-routing-source.test.js +172 -0
- package/bin/__tests__/specs-v2-execution-closeout.test.js +28 -1
- package/bin/install.js +15 -5
- package/bin/lib/codex-install.js +170 -5
- package/bin/lib/context.js +64 -3
- package/bin/lib/i18n.js +15 -36
- package/bin/lib/skill-deps.js +5 -5
- package/bin/phases/claude-runtime.js +23 -0
- package/bin/phases/claude-settings.js +8 -0
- package/bin/phases/codex-hooks.js +156 -0
- package/bin/phases/codex-runtime.js +29 -38
- package/bin/phases/copy-payload.js +15 -2
- package/bin/phases/omp-runtime.js +140 -0
- package/bin/phases/root-config.js +3 -0
- package/bin/phases/select-platform.js +22 -1
- package/bin/phases/select-skill-bundles.js +96 -0
- package/bin/phases/skill-inventory.js +71 -0
- package/bin/phases/skills-setup.js +9 -2
- package/bin/phases/summary.js +0 -4
- package/bin/phases/write-metadata.js +8 -5
- package/package.json +8 -2
- package/src/claude/CLAUDE.md +3 -3
- package/src/claude/agents/brainstormer.md +52 -69
- package/src/claude/agents/code-auditor.md +32 -14
- package/src/claude/agents/debugger.md +35 -20
- package/src/claude/agents/deployer.md +12 -5
- package/src/claude/agents/docs-keeper.md +11 -1
- package/src/claude/agents/implementer.md +25 -13
- package/src/claude/agents/inspector.md +6 -3
- package/src/claude/agents/project-manager.md +1 -1
- package/src/claude/agents/researcher.md +26 -55
- package/src/claude/agents/spec-maker.md +12 -7
- package/src/claude/agents/strategist.md +52 -0
- package/src/claude/agents/test-runner.md +117 -132
- package/src/claude/agents/ui-ux-designer.md +1 -1
- package/src/claude/hooks/__tests__/fixtures/statusline-default.golden +1 -0
- package/src/claude/hooks/__tests__/precompact.test.js +158 -0
- package/src/claude/hooks/__tests__/semantic-review-authority.test.js +2 -0
- package/src/claude/hooks/__tests__/spec-gate.test.js +348 -3
- package/src/claude/hooks/__tests__/state.test.js +7 -0
- package/src/claude/hooks/__tests__/statusline.test.js +196 -0
- package/src/claude/hooks/agent.cjs +13 -8
- package/src/claude/hooks/completion-authority.cjs +10 -4
- package/src/claude/hooks/docs-sync.cjs +14 -11
- package/src/claude/hooks/inspect-block.cjs +28 -8
- package/src/claude/hooks/lib/config.cjs +8 -2
- package/src/claude/hooks/lib/counter.cjs +7 -5
- package/src/claude/hooks/lib/hook-payload.cjs +160 -0
- package/src/claude/hooks/lib/hook-state-dir.cjs +39 -0
- package/src/claude/hooks/lib/runtime-dir.cjs +49 -0
- package/src/claude/hooks/lib/secret-keywords.cjs +42 -0
- package/src/claude/hooks/precompact.cjs +106 -0
- package/src/claude/hooks/privacy-block.cjs +4 -2
- package/src/claude/hooks/rules.cjs +5 -3
- package/src/claude/hooks/secret-output-guardrail.cjs +44 -0
- package/src/claude/hooks/semantic-review-authority.cjs +6 -4
- package/src/claude/hooks/session.cjs +37 -9
- package/src/claude/hooks/spec-gate.cjs +21 -11
- package/src/claude/hooks/spec-state.cjs +11 -7
- package/src/claude/hooks/state.cjs +7 -5
- package/src/claude/hooks/task-scaffold-guard.cjs +30 -9
- package/src/claude/hooks/usage.cjs +6 -5
- package/src/claude/migration-manifest.json +31 -15
- package/src/claude/output-styles/coding-level-0-eli5.md +103 -0
- package/src/claude/output-styles/coding-level-1-junior.md +124 -0
- package/src/claude/output-styles/coding-level-2-mid.md +146 -0
- package/src/claude/output-styles/coding-level-3-senior.md +148 -0
- package/src/claude/output-styles/coding-level-4-lead.md +159 -0
- package/src/claude/output-styles/coding-level-5-god.md +91 -0
- package/src/claude/references/debugger/core-philosophy.md +5 -3
- package/src/claude/references/debugger/frontend-verification.md +2 -2
- package/src/claude/references/debugger/log-ci-analysis.md +13 -1
- package/src/claude/references/debugger/parallel-agent-hydration.md +19 -34
- package/src/claude/references/debugger/performance-diagnostics.md +2 -2
- package/src/claude/references/debugger/root-cause-tracing.md +37 -6
- package/src/claude/references/debugger/side-effect-gate.md +3 -1
- package/src/claude/references/debugger/verification-protocol.md +13 -12
- package/src/claude/rules/orchestrator.md +7 -1
- package/src/claude/rules/process-management.md +39 -0
- package/src/claude/rules/review-audit-self-decision.md +48 -0
- package/src/claude/rules/skill-domain-routing.md +26 -24
- package/src/claude/rules/skill-workflow-routing.md +22 -14
- package/src/claude/rules/state-sync.md +7 -1
- package/src/claude/rules/workflow.md +5 -3
- package/src/claude/runtime.json +1 -0
- package/src/claude/runtime.schema.json +205 -0
- package/src/claude/scripts/generate-skill-catalog.cjs +156 -122
- package/src/claude/scripts/provenance.cjs +29 -9
- package/src/claude/scripts/spec-receipt.cjs +65 -4
- package/src/claude/scripts/workflow-policy.cjs +1 -1
- package/src/claude/settings/settings.json +16 -0
- package/src/claude/skills/agent-browser/SKILL.md +1 -1
- package/src/claude/skills/ai-multimodal/SKILL.md +1 -1
- package/src/claude/skills/brainstorm/SKILL.md +193 -172
- package/src/claude/skills/brainstorm/references/question-framework.md +105 -167
- package/src/claude/skills/chrome-devtools/SKILL.md +1 -1
- package/src/claude/skills/code-review/SKILL.md +43 -25
- package/src/claude/skills/code-review/references/spec-compliance-review.md +3 -4
- package/src/claude/skills/code-review/references/verification-gate.md +1 -1
- package/src/claude/skills/debug/SKILL.md +48 -19
- package/src/claude/skills/delegate/SKILL.md +1 -1
- package/src/claude/skills/develop/SKILL.md +92 -65
- package/src/claude/skills/develop/references/parallel-waves.md +36 -63
- package/src/claude/skills/develop/references/quality-gate.md +31 -4
- package/src/claude/skills/develop/references/subagent-patterns.md +21 -7
- package/src/claude/skills/docs/SKILL.md +42 -23
- package/src/claude/skills/docs/references/init-workflow.md +4 -4
- package/src/claude/skills/docs/references/reconstruct-workflow.md +6 -6
- package/src/claude/skills/docs/references/standard-docs-workflow.md +6 -2
- package/src/claude/skills/docs/references/summarize-workflow.md +2 -2
- package/src/claude/skills/docs/references/update-workflow.md +9 -7
- package/src/claude/skills/docs/templates/requirements-as-is.md +1 -1
- package/src/claude/skills/docx/SKILL.md +1 -1
- package/src/claude/skills/git/SKILL.md +1 -1
- package/src/claude/skills/git/references/commit-protocols.md +1 -1
- package/src/claude/skills/git/references/finish-branch.md +1 -1
- package/src/claude/skills/hotfix/SKILL.md +159 -170
- package/src/claude/skills/hotfix/references/diagnosis-protocol.md +14 -9
- package/src/claude/skills/hotfix/references/parallel-patterns.md +27 -13
- package/src/claude/skills/hotfix/references/prevention-gate.md +5 -0
- package/src/claude/skills/hotfix/references/review-cycle.md +21 -15
- package/src/claude/skills/hotfix/references/workflow-specialized.md +53 -21
- package/src/claude/skills/inspect/SKILL.md +55 -46
- package/src/claude/skills/inspect/references/internal-inspection.md +21 -5
- package/src/claude/skills/loop/SKILL.md +114 -0
- package/src/claude/skills/loop/references/bounded-loop-protocol.md +104 -0
- package/src/claude/skills/loop/references/metric-and-guard-contract.md +76 -0
- package/src/claude/skills/pdf/SKILL.md +1 -1
- package/src/claude/skills/pptx/SKILL.md +1 -1
- package/src/claude/skills/question/SKILL.md +16 -13
- package/src/claude/skills/research/SKILL.md +70 -43
- package/src/claude/skills/route/SKILL.md +94 -0
- package/src/claude/skills/route/references/agent-timing.md +46 -0
- package/src/claude/skills/route/references/chaining-patterns.md +53 -0
- package/src/claude/skills/route/references/task-taxonomy.md +48 -0
- package/src/claude/skills/specs/SKILL.md +51 -71
- package/src/claude/skills/specs/references/review.md +11 -8
- package/src/claude/skills/specs/references/templates.md +34 -18
- package/src/claude/skills/specs/templates/requirements-init.md +1 -1
- package/src/claude/skills/specs/templates/research.md +2 -2
- package/src/claude/skills/sync/SKILL.md +6 -6
- package/src/claude/skills/sync/references/sync-protocols.md +1 -1
- package/src/claude/skills/test/SKILL.md +120 -120
- package/src/claude/skills/test/references/execution-strategy.md +208 -361
- package/src/claude/skills/test/references/failure-triage.md +55 -121
- package/src/claude/skills/test/references/test-memory.md +20 -34
- package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
- package/src/claude/skills/web-testing/SKILL.md +1 -1
- package/src/claude/skills/xlsx/SKILL.md +1 -1
- package/src/claude/status.cjs +135 -33
- package/src/codex/AGENTS.md +14 -4
- package/src/codex/hooks/docs-sync.cjs +8 -3
- package/src/codex/hooks/lib/hook-context.cjs +18 -4
- package/src/codex/hooks/rules.cjs +29 -1
- package/src/codex/hooks/secret-output-guardrail.cjs +30 -0
- package/src/codex/hooks/spec-gate.cjs +3 -8
- package/src/codex/hooks/spec-state.cjs +3 -2
- package/src/codex/hooks.json +5 -0
- package/src/codex/rules/state-sync.md +7 -1
- package/src/codex/runtime.json +2 -0
- package/src/common/.env.example +1 -1
- package/src/omp/extensions/cafekit-bridge.mjs +233 -0
- package/src/omp/hooks/privacy-block.cjs +250 -0
- package/src/omp/runtime.json +33 -0
- package/bin/lib/rtk-run.js +0 -28
- package/bin/phases/setup-rtk.js +0 -159
- package/src/claude/skills/backend-development/SKILL.md +0 -101
- package/src/claude/skills/backend-development/references/backend-api-design.md +0 -495
- package/src/claude/skills/backend-development/references/backend-architecture.md +0 -454
- package/src/claude/skills/backend-development/references/backend-authentication.md +0 -338
- package/src/claude/skills/backend-development/references/backend-code-quality.md +0 -659
- package/src/claude/skills/backend-development/references/backend-debugging.md +0 -904
- package/src/claude/skills/backend-development/references/backend-devops.md +0 -491
- package/src/claude/skills/backend-development/references/backend-mindset.md +0 -387
- package/src/claude/skills/backend-development/references/backend-performance.md +0 -397
- package/src/claude/skills/backend-development/references/backend-security.md +0 -342
- package/src/claude/skills/backend-development/references/backend-technologies.md +0 -256
- package/src/claude/skills/backend-development/references/backend-testing.md +0 -429
- package/src/claude/skills/devops/.env.example +0 -76
- package/src/claude/skills/devops/SKILL.md +0 -102
- package/src/claude/skills/devops/references/browser-rendering.md +0 -305
- package/src/claude/skills/devops/references/cloudflare-d1-kv.md +0 -123
- package/src/claude/skills/devops/references/cloudflare-platform.md +0 -271
- package/src/claude/skills/devops/references/cloudflare-r2-storage.md +0 -280
- package/src/claude/skills/devops/references/cloudflare-workers-advanced.md +0 -312
- package/src/claude/skills/devops/references/cloudflare-workers-apis.md +0 -309
- package/src/claude/skills/devops/references/cloudflare-workers-basics.md +0 -418
- package/src/claude/skills/devops/references/docker-basics.md +0 -297
- package/src/claude/skills/devops/references/docker-compose.md +0 -292
- package/src/claude/skills/devops/references/gcloud-platform.md +0 -297
- package/src/claude/skills/devops/references/gcloud-services.md +0 -304
- package/src/claude/skills/devops/references/kubernetes-basics.md +0 -95
- package/src/claude/skills/devops/references/kubernetes-helm-advanced.md +0 -70
- package/src/claude/skills/devops/references/kubernetes-helm.md +0 -81
- package/src/claude/skills/devops/references/kubernetes-kubectl.md +0 -74
- package/src/claude/skills/devops/references/kubernetes-security-advanced.md +0 -94
- package/src/claude/skills/devops/references/kubernetes-security.md +0 -89
- package/src/claude/skills/devops/references/kubernetes-troubleshooting-advanced.md +0 -74
- package/src/claude/skills/devops/references/kubernetes-troubleshooting.md +0 -49
- package/src/claude/skills/devops/references/kubernetes-workflows-advanced.md +0 -75
- package/src/claude/skills/devops/references/kubernetes-workflows.md +0 -76
- package/src/claude/skills/devops/scripts/cloudflare_deploy.py +0 -269
- package/src/claude/skills/devops/scripts/docker_optimize.py +0 -332
- package/src/claude/skills/devops/scripts/requirements.txt +0 -20
- package/src/claude/skills/devops/scripts/tests/requirements.txt +0 -3
- package/src/claude/skills/devops/scripts/tests/test_cloudflare_deploy.py +0 -285
- package/src/claude/skills/devops/scripts/tests/test_docker_optimize.py +0 -436
- package/src/claude/skills/frontend-design/SKILL.md +0 -135
- package/src/claude/skills/frontend-design/references/ai-multimodal-overview.md +0 -165
- package/src/claude/skills/frontend-design/references/analysis-best-practices.md +0 -80
- package/src/claude/skills/frontend-design/references/analysis-prompts.md +0 -141
- package/src/claude/skills/frontend-design/references/analysis-techniques.md +0 -118
- package/src/claude/skills/frontend-design/references/animejs.md +0 -396
- package/src/claude/skills/frontend-design/references/anti-slop-rules.md +0 -103
- package/src/claude/skills/frontend-design/references/asset-generation.md +0 -337
- package/src/claude/skills/frontend-design/references/bento-motion-engine.md +0 -142
- package/src/claude/skills/frontend-design/references/design-extraction-overview.md +0 -71
- package/src/claude/skills/frontend-design/references/extraction-best-practices.md +0 -141
- package/src/claude/skills/frontend-design/references/extraction-output-templates.md +0 -162
- package/src/claude/skills/frontend-design/references/extraction-prompts.md +0 -127
- package/src/claude/skills/frontend-design/references/magicui-components.md +0 -129
- package/src/claude/skills/frontend-design/references/performance-guardrails.md +0 -169
- package/src/claude/skills/frontend-design/references/premium-design-patterns.md +0 -93
- package/src/claude/skills/frontend-design/references/redesign-audit-checklist.md +0 -114
- package/src/claude/skills/frontend-design/references/technical-accessibility.md +0 -119
- package/src/claude/skills/frontend-design/references/technical-best-practices.md +0 -97
- package/src/claude/skills/frontend-design/references/technical-optimization.md +0 -44
- package/src/claude/skills/frontend-design/references/technical-overview.md +0 -90
- package/src/claude/skills/frontend-design/references/technical-workflows.md +0 -150
- package/src/claude/skills/frontend-design/references/visual-analysis-overview.md +0 -95
- package/src/claude/skills/frontend-design/references/workflow-3d.md +0 -102
- package/src/claude/skills/frontend-design/references/workflow-describe.md +0 -87
- package/src/claude/skills/frontend-design/references/workflow-immersive.md +0 -87
- package/src/claude/skills/frontend-design/references/workflow-quick.md +0 -57
- package/src/claude/skills/frontend-design/references/workflow-screenshot.md +0 -63
- package/src/claude/skills/frontend-design/references/workflow-video.md +0 -74
- package/src/claude/skills/frontend-development/SKILL.md +0 -406
- package/src/claude/skills/frontend-development/resources/common-patterns.md +0 -331
- package/src/claude/skills/frontend-development/resources/complete-examples.md +0 -872
- package/src/claude/skills/frontend-development/resources/component-patterns.md +0 -502
- package/src/claude/skills/frontend-development/resources/data-fetching.md +0 -767
- package/src/claude/skills/frontend-development/resources/file-organization.md +0 -502
- package/src/claude/skills/frontend-development/resources/loading-and-error-states.md +0 -501
- package/src/claude/skills/frontend-development/resources/performance.md +0 -406
- package/src/claude/skills/frontend-development/resources/routing-guide.md +0 -364
- package/src/claude/skills/frontend-development/resources/styling-guide.md +0 -428
- package/src/claude/skills/frontend-development/resources/typescript-standards.md +0 -418
- package/src/claude/skills/mobile-development/SKILL.md +0 -218
- package/src/claude/skills/mobile-development/references/mobile-android.md +0 -604
- package/src/claude/skills/mobile-development/references/mobile-best-practices.md +0 -544
- package/src/claude/skills/mobile-development/references/mobile-debugging.md +0 -1089
- package/src/claude/skills/mobile-development/references/mobile-frameworks.md +0 -465
- package/src/claude/skills/mobile-development/references/mobile-ios.md +0 -496
- package/src/claude/skills/mobile-development/references/mobile-mindset.md +0 -542
- package/src/claude/skills/react-best-practices/AGENTS.md +0 -2249
- package/src/claude/skills/react-best-practices/README.md +0 -123
- package/src/claude/skills/react-best-practices/SKILL.md +0 -128
- package/src/claude/skills/react-best-practices/metadata.json +0 -15
- package/src/claude/skills/react-best-practices/rules/_sections.md +0 -46
- package/src/claude/skills/react-best-practices/rules/_template.md +0 -28
- package/src/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/src/claude/skills/react-best-practices/rules/advanced-use-latest.md +0 -49
- package/src/claude/skills/react-best-practices/rules/async-api-routes.md +0 -38
- package/src/claude/skills/react-best-practices/rules/async-defer-await.md +0 -80
- package/src/claude/skills/react-best-practices/rules/async-dependencies.md +0 -36
- package/src/claude/skills/react-best-practices/rules/async-parallel.md +0 -28
- package/src/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/src/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
- package/src/claude/skills/react-best-practices/rules/bundle-conditional.md +0 -31
- package/src/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/src/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/src/claude/skills/react-best-practices/rules/bundle-preload.md +0 -50
- package/src/claude/skills/react-best-practices/rules/client-event-listeners.md +0 -74
- package/src/claude/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
- package/src/claude/skills/react-best-practices/rules/js-batch-dom-css.md +0 -82
- package/src/claude/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
- package/src/claude/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
- package/src/claude/skills/react-best-practices/rules/js-cache-storage.md +0 -70
- package/src/claude/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
- package/src/claude/skills/react-best-practices/rules/js-early-exit.md +0 -50
- package/src/claude/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/src/claude/skills/react-best-practices/rules/js-index-maps.md +0 -37
- package/src/claude/skills/react-best-practices/rules/js-length-check-first.md +0 -49
- package/src/claude/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
- package/src/claude/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/src/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/src/claude/skills/react-best-practices/rules/rendering-activity.md +0 -26
- package/src/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/src/claude/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/src/claude/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/src/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/src/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/src/claude/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/src/claude/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/src/claude/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
- package/src/claude/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
- package/src/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/src/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/src/claude/skills/react-best-practices/rules/rerender-memo.md +0 -44
- package/src/claude/skills/react-best-practices/rules/rerender-transitions.md +0 -40
- package/src/claude/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/src/claude/skills/react-best-practices/rules/server-cache-lru.md +0 -41
- package/src/claude/skills/react-best-practices/rules/server-cache-react.md +0 -26
- package/src/claude/skills/react-best-practices/rules/server-parallel-fetching.md +0 -79
- package/src/claude/skills/react-best-practices/rules/server-serialization.md +0 -38
|
@@ -1,365 +1,212 @@
|
|
|
1
|
-
# Execution
|
|
1
|
+
# Execution strategy
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Load this reference when Test needs packet routing, proof construction, blast
|
|
4
|
+
radius selection, UI safety, or report details.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
## 1. Classify the target before execution
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Inspect current filesystem entries with `lstat`; a broken link is still a
|
|
9
|
+
marker. Resolve all accepted paths inside the target feature directory.
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
### Phase C-3: Network Error Audit (network.js)
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
node network.js --url <url> --types xhr,fetch
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Collects: request/response pairs.
|
|
221
|
-
Flag as `UI Network Error` if any response status is `4xx` or `5xx`.
|
|
222
|
-
|
|
223
|
-
---
|
|
224
|
-
|
|
225
|
-
### Phase C-4: Performance Metrics (performance.js)
|
|
226
|
-
|
|
227
|
-
```bash
|
|
228
|
-
node performance.js --url <url> --metrics
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
Collects Core Web Vitals: `LCP`, `FID`, `CLS`, `FCP`, `TTFB`, `JSHeapUsedSize`.
|
|
232
|
-
|
|
233
|
-
| Metric | Good | Needs Work | Poor (BLOCK) |
|
|
234
|
-
|--------------|---------|------------|--------------|
|
|
235
|
-
| LCP | < 2.5s | 2.5–4s | > 4s |
|
|
236
|
-
| CLS | < 0.1 | 0.1–0.25 | > 0.25 |
|
|
237
|
-
| FCP | < 1.8s | 1.8–3s | > 3s |
|
|
238
|
-
| TTFB | < 800ms | 800ms–1.8s | > 1.8s |
|
|
239
|
-
| JSHeapUsedSize | < 50MB | 50–100MB | > 100MB (memory leak flag) |
|
|
240
|
-
|
|
241
|
-
---
|
|
242
|
-
|
|
243
|
-
### Phase C-5: Responsive Screenshots (screenshot.js & gemini_batch_process.py)
|
|
244
|
-
|
|
245
|
-
```bash
|
|
246
|
-
# Capture screenshots
|
|
247
|
-
node screenshot.js --url <url> --output screenshots/mobile-375.png --full-page true
|
|
248
|
-
node screenshot.js --url <url> --output screenshots/desktop-1440.png --full-page true
|
|
249
|
-
|
|
250
|
-
# AI Visual Analysis (Delegate to hapo:ai-multimodal Hub)
|
|
251
|
-
pushd ../../ai-multimodal/scripts
|
|
252
|
-
python gemini_batch_process.py --files "../../chrome-devtools/scripts/screenshots/mobile-375.png" --task analyze --prompt "Check for layout overlap"
|
|
253
|
-
python gemini_batch_process.py --files "../../chrome-devtools/scripts/screenshots/desktop-1440.png" --task analyze --prompt "Check for layout overlap"
|
|
254
|
-
popd
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
Flag as `UI Visual Error` if the AI analysis output reports any of the following:
|
|
258
|
-
- Overlapping/overflowing elements (layout broken)
|
|
259
|
-
- Text cut off or unreadable
|
|
260
|
-
- Images not loading (broken img placeholders)
|
|
261
|
-
|
|
262
|
-
---
|
|
263
|
-
|
|
264
|
-
### Phase C-5b: User Flow Testing (click.js + fill.js) — `--ui-flow` only
|
|
265
|
-
|
|
266
|
-
Test critical user journeys (login, form submission, checkout flow):
|
|
267
|
-
|
|
268
|
-
```bash
|
|
269
|
-
# Step 1: Navigate to form page
|
|
270
|
-
node navigate.js --url <url>/login
|
|
271
|
-
|
|
272
|
-
# Step 2: Fill in form fields
|
|
273
|
-
node fill.js --selector "#email" --value "test@example.com"
|
|
274
|
-
node fill.js --selector "#password" --value "testpassword123"
|
|
275
|
-
|
|
276
|
-
# Step 3: Click submit
|
|
277
|
-
node click.js --selector "button[type=submit]"
|
|
278
|
-
|
|
279
|
-
# Step 4: Verify success state
|
|
280
|
-
node navigate.js --url <url>/dashboard # Expect redirect to dashboard
|
|
281
|
-
node screenshot.js --output screenshots/after-login.png
|
|
282
|
-
node console.js --url <url>/dashboard --types error # Should be 0 errors
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
Common flows to test:
|
|
286
|
-
- **Auth flow**: Login → Dashboard → Logout
|
|
287
|
-
- **Form submission**: Fill → Submit → Success/Error state
|
|
288
|
-
- **CRUD flow**: Create → Read → Update → Delete (if applicable)
|
|
289
|
-
|
|
290
|
-
Flag as `User Flow Error` if: redirect fails, form shows error, or console errors appear post-submit.
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
### Phase C-6: Accessibility Snapshot (aria-snapshot.js)
|
|
295
|
-
|
|
296
|
-
```bash
|
|
297
|
-
node aria-snapshot.js --url <url> --output snapshots/aria.yaml
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
Flag as `Accessibility Error` if:
|
|
301
|
-
- Interactive elements have no accessible name (`aria-label`, `aria-labelledby`, or visible text)
|
|
302
|
-
- Form inputs lack associated `<label>` elements
|
|
303
|
-
- Images missing `alt` text (role `img` with no name)
|
|
304
|
-
|
|
305
|
-
---
|
|
306
|
-
|
|
307
|
-
### Phase C-7: SEO Audit (evaluate.js)
|
|
308
|
-
|
|
309
|
-
Check SEO meta tags and structure via in-page JavaScript:
|
|
310
|
-
|
|
311
|
-
```bash
|
|
312
|
-
node evaluate.js --script "({
|
|
313
|
-
title: document.title,
|
|
314
|
-
description: document.querySelector('meta[name=description]')?.content,
|
|
315
|
-
og_title: document.querySelector('meta[property=\"og:title\"]')?.content,
|
|
316
|
-
og_image: document.querySelector('meta[property=\"og:image\"]')?.content,
|
|
317
|
-
canonical: document.querySelector('link[rel=canonical]')?.href,
|
|
318
|
-
h1_count: document.querySelectorAll('h1').length,
|
|
319
|
-
robots: document.querySelector('meta[name=robots]')?.content,
|
|
320
|
-
structured_data: !!document.querySelector('script[type=\"application/ld+json\"]')
|
|
321
|
-
})"
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
Flag as `SEO Error` if:
|
|
325
|
-
- `title` is empty or > 60 characters
|
|
326
|
-
- `description` is missing or > 160 characters
|
|
327
|
-
- `h1_count` is 0 (no H1) or > 1 (multiple H1)
|
|
328
|
-
- `canonical` is missing
|
|
329
|
-
- `og:title` or `og:image` is missing (important for social sharing)
|
|
330
|
-
|
|
331
|
-
Also check `robots.txt` and `sitemap.xml` exist:
|
|
332
|
-
```bash
|
|
333
|
-
node navigate.js --url <url>/robots.txt
|
|
334
|
-
node navigate.js --url <url>/sitemap.xml
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
---
|
|
338
|
-
|
|
339
|
-
### Phase C-8: Security Check (network.js + evaluate.js)
|
|
340
|
-
|
|
341
|
-
Basic client-side security checks:
|
|
342
|
-
|
|
343
|
-
```bash
|
|
344
|
-
# Check response headers for security headers
|
|
345
|
-
node network.js --url <url>
|
|
346
|
-
|
|
347
|
-
# Check for visible secrets in page source
|
|
348
|
-
node evaluate.js --script "
|
|
349
|
-
const src = document.documentElement.innerHTML;
|
|
350
|
-
const patterns = [
|
|
351
|
-
/api[_-]?key\s*=\s*['\"][a-zA-Z0-9]{20,}/i,
|
|
352
|
-
/secret[_-]?key\s*=\s*['\"][a-zA-Z0-9]{20,}/i,
|
|
353
|
-
/Bearer\s+[a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]+/,
|
|
354
|
-
/password\s*=\s*['\"][^'\"]{6,}/i
|
|
355
|
-
];
|
|
356
|
-
patterns.map(p => ({pattern: p.source, found: p.test(src)}))
|
|
357
|
-
.filter(r => r.found)
|
|
358
|
-
"
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
Flag as `Security Warning` if:
|
|
362
|
-
- Missing security headers: `X-Content-Type-Options`, `X-Frame-Options`, `Content-Security-Policy`
|
|
363
|
-
- API keys, secrets, or JWT tokens visible in page HTML
|
|
364
|
-
- Mixed content (HTTP resources on HTTPS page) detected via network audit
|
|
365
|
-
- `autocomplete="off"` missing on password fields
|
|
11
|
+
### Process-first markers
|
|
12
|
+
|
|
13
|
+
- Flat markers are direct-child `plan.md` and `task-NN-*.md` entries.
|
|
14
|
+
- The plan must be a regular file whose second line is exactly
|
|
15
|
+
`Specs-Contract: process-first-ready-v1`.
|
|
16
|
+
- At least one task must be a regular direct child. Each task has one unique
|
|
17
|
+
identity, exactly one `Status:`, one `## Verification Plan`, a nonempty exact
|
|
18
|
+
`Command`, and nonempty exact unique `Named probes`.
|
|
19
|
+
- A flat task without a plan, a plan without tasks, wrong/missing process
|
|
20
|
+
marker, malformed or duplicate task fields, symlink, directory, device, or
|
|
21
|
+
other nonregular flat marker returns `BLOCKED`.
|
|
22
|
+
|
|
23
|
+
### Legacy markers
|
|
24
|
+
|
|
25
|
+
- Legacy markers are `spec.json`, nested legacy tasks, or separate legacy
|
|
26
|
+
receipts. Detect them even when orphaned or broken.
|
|
27
|
+
- Legacy is selected only when a regular schema-valid `spec.json` has one
|
|
28
|
+
consistent identity and registry resolving every contained nested task and
|
|
29
|
+
receipt, and no flat marker exists.
|
|
30
|
+
- Orphan nested tasks/receipts, absent or schema-invalid root, conflicting
|
|
31
|
+
identities, symlinks, nonregular markers, or unresolved/out-of-root entries
|
|
32
|
+
return `BLOCKED`.
|
|
33
|
+
|
|
34
|
+
### Precedence truth table
|
|
35
|
+
|
|
36
|
+
| Flat state | Legacy state | Result |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| valid | absent | process-first |
|
|
39
|
+
| absent | valid | legacy adapter |
|
|
40
|
+
| absent | absent | ordinary non-Spec scope |
|
|
41
|
+
| any marker | any marker | `BLOCKED` mixed state |
|
|
42
|
+
| invalid | absent | `BLOCKED` |
|
|
43
|
+
| absent | invalid | `BLOCKED` |
|
|
44
|
+
|
|
45
|
+
Do not infer that an invalid marker is absent. Testing never repairs, migrates,
|
|
46
|
+
renames, deletes, or chooses between conflicting packet identities.
|
|
47
|
+
|
|
48
|
+
## 2. Select the smallest adequate proof
|
|
49
|
+
|
|
50
|
+
For process-first work, read current plan and active task bytes. The exact task
|
|
51
|
+
Verification Plan is authoritative for command, named probes, reachability,
|
|
52
|
+
oracle, counterexample, proof level, and artifacts. Run every required named
|
|
53
|
+
probe exactly once unless the command's runner legitimately reports multiple
|
|
54
|
+
executions; preserve those counts without deduplicating output.
|
|
55
|
+
|
|
56
|
+
For ordinary scope, derive commands from current project files. Map changed
|
|
57
|
+
files to co-located tests, reverse imports, entrypoints, consumers, configuration,
|
|
58
|
+
and runtime surfaces. Escalate to a wider suite when configuration or shared
|
|
59
|
+
infrastructure changes, mapped scope exceeds roughly 60 percent, or a required
|
|
60
|
+
surface cannot be isolated. `--full` widens selection; it does not loosen proof.
|
|
61
|
+
|
|
62
|
+
Run cheap project-provided prechecks before expensive tests. Do not auto-install
|
|
63
|
+
missing runners, packages, browsers, or linters. A missing prerequisite is
|
|
64
|
+
`BLOCKED`; a precheck that actually runs and fails is `FAIL`.
|
|
65
|
+
|
|
66
|
+
An exit-zero command with zero executed tests, any required skip/todo/cancel,
|
|
67
|
+
or a required named probe that did not execute is not `PASS`.
|
|
68
|
+
|
|
69
|
+
## 3. Side-effect boundary
|
|
70
|
+
|
|
71
|
+
Before proof, record:
|
|
72
|
+
|
|
73
|
+
- runtime Base and Head;
|
|
74
|
+
- tracked and untracked state;
|
|
75
|
+
- ignored project paths relevant to the command;
|
|
76
|
+
- absence or SHA-256 of `.hapo/test-memory.json`;
|
|
77
|
+
- absence or bytes of any known Test-owned report, cache, or auth-state path.
|
|
78
|
+
|
|
79
|
+
Use a Test-owned temporary directory outside the project only when the command
|
|
80
|
+
needs an ephemeral output location. Record contained artifacts before cleanup,
|
|
81
|
+
then remove only that exact Test-owned temporary directory. Never clean project
|
|
82
|
+
drift or overwrite user-owned files.
|
|
83
|
+
|
|
84
|
+
After proof, compare all observations. Report project-command tracked,
|
|
85
|
+
untracked, and ignored drift separately from runtime Head. A command may
|
|
86
|
+
legitimately change project bytes, but Test must surface that drift; it cannot
|
|
87
|
+
silently delete it, hide it, or call unchanged Head sufficient evidence.
|
|
88
|
+
|
|
89
|
+
Test-owned memory, reports, caches, lazy installs, and auth state must remain
|
|
90
|
+
byte-for-byte absent/unchanged. Any mutation makes required proof `FAIL`.
|
|
91
|
+
|
|
92
|
+
## 4. `test-proof-v1` schema
|
|
93
|
+
|
|
94
|
+
Return canonical UTF-8 JSON with exactly these top-level keys and no others:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
schema_version, target, verdict, command, exit, counts, provenance,
|
|
98
|
+
proof_level, expected, observed, reachability, artifacts, branches,
|
|
99
|
+
raw_output, redactions, payload_sha256
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Validate every nested object against a closed shape:
|
|
103
|
+
|
|
104
|
+
- `schema_version`: exactly `test-proof-v1`.
|
|
105
|
+
- `target`: exact keys `{feature, task_path}`. Both are nonempty strings;
|
|
106
|
+
`task_path` is a contained regular flat task path.
|
|
107
|
+
- `verdict`: exactly `PASS | PASS_WITH_WARNINGS | FAIL | BLOCKED`.
|
|
108
|
+
- `command`: exact task command string; nullable only for pre-execution
|
|
109
|
+
`BLOCKED`.
|
|
110
|
+
- `exit`: integer; nullable only for pre-execution `BLOCKED`.
|
|
111
|
+
- `counts`: exact keys `{executed, passed, failed, skipped}` with nonnegative
|
|
112
|
+
integers and `passed + failed + skipped === executed`.
|
|
113
|
+
- `provenance`: exact keys `{base, head}`. Values are lowercase canonical Git
|
|
114
|
+
SHAs matching current runtime anchors; the whole field is nullable only for
|
|
115
|
+
pre-execution `BLOCKED` before repository identity is available.
|
|
116
|
+
- `proof_level`: exactly `source | installed | live`; never promote one level
|
|
117
|
+
into another.
|
|
118
|
+
- `expected`, `observed`, `raw_output`: nonempty redacted strings after any
|
|
119
|
+
attempted execution. For pre-execution `BLOCKED`, `observed` and `raw_output`
|
|
120
|
+
name the changed prerequisite and `expected` remains nonempty.
|
|
121
|
+
- `reachability`: exact keys `{status, evidence}` where status is
|
|
122
|
+
`PASS | FAIL | BLOCKED` and evidence is an array of unique nonempty strings.
|
|
123
|
+
- `artifacts`: sorted array of exact `{path, sha256}` rows. Every path is
|
|
124
|
+
contained and every digest is lowercase SHA-256.
|
|
125
|
+
- `redactions`: unique sorted labels drawn only from `authorization`, `cookie`,
|
|
126
|
+
`set-cookie`, `credential`, `session-token`, `pii`; never include secret values.
|
|
127
|
+
- `payload_sha256`: lowercase SHA-256 of canonical stable JSON after removing
|
|
128
|
+
only `payload_sha256`. The controller recomputes it.
|
|
129
|
+
|
|
130
|
+
`branches` is a nonempty sorted array. Each row has exact keys:
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
id, required, verdict, command, exit, counts, proof_level
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
- IDs equal the Verification Plan's exact unique Named probes, one row each.
|
|
137
|
+
- `required` is exactly `true`; branch verdict and proof level use the same
|
|
138
|
+
closed enums.
|
|
139
|
+
- `command` equals the task's exact command; `exit` is an integer; branch counts
|
|
140
|
+
use the same closed shape. Execution fields may be null only for a required
|
|
141
|
+
pre-execution `BLOCKED` branch, whose counts are all zero.
|
|
142
|
+
- Reject unknown nested keys, duplicate/missing/extra branch IDs, contradictory
|
|
143
|
+
aggregate counts, command drift, proof-level promotion, and unsorted rows.
|
|
144
|
+
|
|
145
|
+
Payload counts cover required Named-probe executions only, not unrelated support
|
|
146
|
+
tests reported by the same suite. Attribute each required execution to exactly
|
|
147
|
+
one branch with no overlap or omission. Payload `executed`, `passed`, `failed`,
|
|
148
|
+
and `skipped` each equal the element-wise sum of that field across every branch;
|
|
149
|
+
any unattributed, multiply attributed, or unequal count is contradictory and
|
|
150
|
+
returns `BLOCKED`.
|
|
151
|
+
|
|
152
|
+
## 5. Aggregation and integrity
|
|
153
|
+
|
|
154
|
+
Aggregate required branches in strict order:
|
|
155
|
+
|
|
156
|
+
1. Any attempted required `FAIL` branch makes the payload `FAIL`.
|
|
157
|
+
2. Any missing, invalid, unknown, or pre-execution blocked required branch makes
|
|
158
|
+
it `BLOCKED` unless a required attempted failure already exists.
|
|
159
|
+
3. Any warning branch makes it `PASS_WITH_WARNINGS` unless a stronger result
|
|
160
|
+
exists.
|
|
161
|
+
4. Only every required branch at literal `PASS` can reach payload `PASS`.
|
|
162
|
+
|
|
163
|
+
Attempted `FAIL` has at least one of: nonzero exit, failed count, or
|
|
164
|
+
`reachability.status: FAIL`. A payload may be `PASS` only with the exact command,
|
|
165
|
+
exit 0, executed > 0, failed 0, skipped 0, matching current provenance, every
|
|
166
|
+
branch `PASS`, reachability `PASS`, valid artifacts, safe redaction, and a valid
|
|
167
|
+
digest. A contradictory payload returns `BLOCKED`; never repair it by guessing.
|
|
168
|
+
|
|
169
|
+
## 6. Authenticated UI proof
|
|
170
|
+
|
|
171
|
+
Use UI proof only for a reachable UI requirement.
|
|
172
|
+
|
|
173
|
+
1. Confirm the exact target is HTTPS or localhost, expected environment, and
|
|
174
|
+
safe origin before opening auth state.
|
|
175
|
+
2. Prefer the project's native test login/helper. Otherwise require an
|
|
176
|
+
explicitly selected user-controlled browser profile.
|
|
177
|
+
3. Confirm profile identity, permissions, tenant/environment, and allowed action
|
|
178
|
+
scope without exposing credentials.
|
|
179
|
+
4. Bind approval to the confirmed origin. Stop on cross-origin redirects,
|
|
180
|
+
unexpected identity/permission, or auth challenges.
|
|
181
|
+
5. Obtain fresh consent before a destructive production action. If consent or
|
|
182
|
+
safe isolation is unavailable, return `BLOCKED`.
|
|
183
|
+
6. Never ask the user to paste credentials, cookies, bearer tokens, session
|
|
184
|
+
tokens, or local-storage auth; never export or persist them.
|
|
185
|
+
|
|
186
|
+
Redact Authorization, Cookie, Set-Cookie, session tokens, credentials, and
|
|
187
|
+
scoped PII from commands, request/response headers and bodies, console/network
|
|
188
|
+
logs, screenshots, filenames, artifact metadata, raw output, and reports. If a
|
|
189
|
+
required assertion cannot be shown without disclosure, return `BLOCKED`.
|
|
190
|
+
|
|
191
|
+
UI depth is proportional: smoke/navigation first; add console/network,
|
|
192
|
+
interaction flow, viewport/visual, accessibility, performance, SEO, or security
|
|
193
|
+
only when the Verification Plan, behavior, or risk requires them. Multiple
|
|
194
|
+
workers may own disjoint phases, but their outputs aggregate into one proof and
|
|
195
|
+
must not write project state.
|
|
196
|
+
|
|
197
|
+
## 7. Human report versus machine proof
|
|
198
|
+
|
|
199
|
+
Return the validated `test-proof-v1` handoff to the controller and a separate
|
|
200
|
+
concise report containing only verdict, scope, exact redacted command, exit,
|
|
201
|
+
counts, reachability, proof level, project-command drift, and next action.
|
|
202
|
+
|
|
203
|
+
Do not paste verbose raw output, full JSON, credentials, PII, or screenshots into
|
|
204
|
+
the report. Do not write a report file during proof. Process-first Status and
|
|
205
|
+
inline `## Receipt` remain controller-only.
|
|
206
|
+
|
|
207
|
+
## Legacy workflow compatibility
|
|
208
|
+
|
|
209
|
+
After a valid legacy route, preserve its v2.1 task/receipt adapter and existing
|
|
210
|
+
proof rules. Separate legacy receipts remain legacy-only. Never search for or
|
|
211
|
+
create a separate receipt for a process-first task, and never copy a legacy
|
|
212
|
+
receipt into a flat task.
|