@hassangameryt/freeflow 0.1.0 → 0.3.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/.agents/plugins/marketplace.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/{plugins/freeflow/.claude-plugin → .claude-plugin}/plugin.json +1 -1
- package/{plugins/freeflow/.codex-plugin → .codex-plugin}/plugin.json +1 -1
- package/README.md +25 -16
- package/assets/freeflow-plugin-icon.png +0 -0
- package/{plugins/freeflow/command-surface.json → command-surface.json} +10 -10
- package/evals/README.md +32 -0
- package/evals/fixtures/copy-conventions.md +31 -0
- package/evals/fixtures/output-router/README.md +12 -0
- package/evals/fixtures/output-router/failed-command-output.txt +9 -0
- package/evals/fixtures/output-router/large-router-manual.md +63 -0
- package/evals/fixtures/output-router/native-large-output.txt +40 -0
- package/evals/fixtures/output-router/noisy-test-output.txt +30 -0
- package/evals/fixtures/output-router/verification-output.txt +8 -0
- package/evals/fixtures/tiny-artifact-review-app/README.md +5 -0
- package/evals/fixtures/tiny-artifact-review-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-artifact-review-app/docs/specs/billing-webhook-api-draft.md +21 -0
- package/evals/fixtures/tiny-artifact-review-app/docs/specs/failed-payment-grace-period.md +24 -0
- package/evals/fixtures/tiny-artifact-review-app/docs/specs/immediate-downgrade.md +17 -0
- package/evals/fixtures/tiny-artifact-review-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/.freeflow-eval-setup.sh +15 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-commit-app/.freeflow-eval-setup.sh +14 -0
- package/evals/fixtures/tiny-commit-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-app/docs/specs/settings-title.md +5 -0
- package/evals/fixtures/tiny-commit-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-commit-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-commit-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-commit-everything-app/.freeflow-eval-setup.sh +15 -0
- package/evals/fixtures/tiny-commit-everything-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-everything-app/docs/specs/settings-title.md +5 -0
- package/evals/fixtures/tiny-commit-everything-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-commit-everything-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-commit-everything-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-commit-staged-app/.freeflow-eval-setup.sh +15 -0
- package/evals/fixtures/tiny-commit-staged-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-staged-app/docs/specs/settings-title.md +5 -0
- package/evals/fixtures/tiny-commit-staged-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-commit-staged-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-commit-staged-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/.freeflow-eval-setup.sh +15 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/docs/billing-policy.md +3 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/docs/release-notes.md +3 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-dashboard-stale-app/README.md +11 -0
- package/evals/fixtures/tiny-dashboard-stale-app/src/api-client.ts +13 -0
- package/evals/fixtures/tiny-dashboard-stale-app/src/dashboard-data.ts +19 -0
- package/evals/fixtures/tiny-dashboard-stale-app/tests/dashboard-data.test.md +9 -0
- package/evals/fixtures/tiny-decision-destination-app/README.md +6 -0
- package/evals/fixtures/tiny-decision-destination-app/src/risk.ts +8 -0
- package/evals/fixtures/tiny-decision-destination-app/tests/risk.test.md +4 -0
- package/evals/fixtures/tiny-design-depth-app/README.md +15 -0
- package/evals/fixtures/tiny-design-depth-app/src/routes.ts +25 -0
- package/evals/fixtures/tiny-design-depth-app/src/sendEmail.ts +3 -0
- package/evals/fixtures/tiny-design-depth-app/src/sendSms.ts +3 -0
- package/evals/fixtures/tiny-design-depth-app/src/telemetry.ts +3 -0
- package/evals/fixtures/tiny-design-depth-app/tests/routes.test.md +12 -0
- package/evals/fixtures/tiny-eval-method-app/README.md +8 -0
- package/evals/fixtures/tiny-eval-method-app/evals/reports/review-pr-eval-result.md +5 -0
- package/evals/fixtures/tiny-eval-method-app/evals/reports/triage-question-failure.md +17 -0
- package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.diff +11 -0
- package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.md +3 -0
- package/evals/fixtures/tiny-eval-method-app/skills/review-pr/SKILL.md +10 -0
- package/evals/fixtures/tiny-eval-method-app/skills/triage-question/SKILL.md +10 -0
- package/evals/fixtures/tiny-execute-plan-app/README.md +5 -0
- package/evals/fixtures/tiny-execute-plan-app/checks/settings-and-billing-check.sh +5 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/plans/immediate-downgrade-plan.md +11 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-plan.md +12 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-with-bad-check.md +15 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/plans/unverified-billing-plan.md +9 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/specs/failed-payment-grace-period.md +9 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/specs/settings-title.md +9 -0
- package/evals/fixtures/tiny-execute-plan-app/src/billing.ts +7 -0
- package/evals/fixtures/tiny-execute-plan-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-execute-plan-app/tests/billing.test.md +7 -0
- package/evals/fixtures/tiny-execute-plan-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-execute-review-loop-app/README.md +5 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/billing-policy.md +9 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/plans/settings-title-plan.md +12 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/review/previous-agent-summary.md +15 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/review/review-pass-1-non-pass.md +11 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/specs/settings-title.md +9 -0
- package/evals/fixtures/tiny-execute-review-loop-app/src/billing.ts +7 -0
- package/evals/fixtures/tiny-execute-review-loop-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-execute-review-loop-app/tests/billing.test.md +7 -0
- package/evals/fixtures/tiny-execute-review-loop-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-flaky-session-app/README.md +10 -0
- package/evals/fixtures/tiny-flaky-session-app/src/session-timeout.ts +13 -0
- package/evals/fixtures/tiny-flaky-session-app/tests/session-timeout.test.md +8 -0
- package/evals/fixtures/tiny-handoff-app/README.md +5 -0
- package/evals/fixtures/tiny-handoff-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-handoff-app/docs/handoffs/old-agent-handoff.md +8 -0
- package/evals/fixtures/tiny-handoff-app/docs/plans/billing-retry-plan.md +11 -0
- package/evals/fixtures/tiny-handoff-app/src/billing.ts +7 -0
- package/evals/fixtures/tiny-handoff-report-app/README.md +3 -0
- package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.diff +1 -0
- package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.md +1 -0
- package/evals/fixtures/tiny-handoff-report-app/evals/scores/hof-003-score.txt +4 -0
- package/evals/fixtures/tiny-plan-app/README.md +5 -0
- package/evals/fixtures/tiny-plan-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-plan-app/docs/specs/failed-payment-grace-period.md +25 -0
- package/evals/fixtures/tiny-plan-app/src/billing.ts +17 -0
- package/evals/fixtures/tiny-plan-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-plan-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-plan-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-plan-strict-api-app/README.md +3 -0
- package/evals/fixtures/tiny-plan-strict-api-app/docs/billing-policy.md +5 -0
- package/evals/fixtures/tiny-plan-strict-api-app/docs/specs/billing-webhook-api.md +25 -0
- package/evals/fixtures/tiny-plan-strict-api-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-plan-strict-api-app/src/webhooks.ts +3 -0
- package/evals/fixtures/tiny-plan-strict-api-app/tests/billing-webhook.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/.freeflow/config.json +3 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/AGENTS.md +15 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/README.md +16 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/auth-review.md +15 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/copy-conventions.md +15 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/src/auth-middleware.ts +12 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/src/billing.ts +20 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/src/login-copy.ts +1 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/auth-middleware.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/copy.test.md +7 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/AGENTS.md +15 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/README.md +16 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/docs/auth-review.md +15 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/docs/copy-conventions.md +15 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/src/auth-middleware.ts +12 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/src/billing.ts +20 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/src/login-copy.ts +1 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/tests/auth-middleware.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/tests/copy.test.md +7 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/.freeflow/config.json +3 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/AGENTS.md +15 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/README.md +16 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/auth-review.md +15 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/copy-conventions.md +15 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/src/auth-middleware.ts +12 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/src/billing.ts +20 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/src/login-copy.ts +1 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/auth-middleware.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/copy.test.md +7 -0
- package/evals/fixtures/tiny-report-performance-app/README.md +11 -0
- package/evals/fixtures/tiny-report-performance-app/docs/performance.md +10 -0
- package/evals/fixtures/tiny-report-performance-app/src/report-summary.ts +29 -0
- package/evals/fixtures/tiny-report-performance-app/tests/report-performance.test.md +8 -0
- package/evals/fixtures/tiny-review-request-app/README.md +3 -0
- package/evals/fixtures/tiny-review-request-app/docs/billing-policy.md +5 -0
- package/evals/fixtures/tiny-review-request-app/docs/plans/billing-webhook-api.md +19 -0
- package/evals/fixtures/tiny-review-request-app/docs/review/previous-agent-summary.md +20 -0
- package/evals/fixtures/tiny-review-request-app/docs/specs/billing-webhook-api.md +25 -0
- package/evals/fixtures/tiny-review-request-app/src/billing.ts +11 -0
- package/evals/fixtures/tiny-review-request-app/src/webhooks.ts +19 -0
- package/evals/fixtures/tiny-review-request-app/tests/billing-webhook.test.md +8 -0
- package/evals/fixtures/tiny-review-work-app/README.md +5 -0
- package/evals/fixtures/tiny-review-work-app/docs/billing-policy.md +9 -0
- package/evals/fixtures/tiny-review-work-app/docs/plans/settings-title-plan.md +12 -0
- package/evals/fixtures/tiny-review-work-app/docs/review/previous-agent-summary.md +15 -0
- package/evals/fixtures/tiny-review-work-app/docs/specs/settings-title.md +9 -0
- package/evals/fixtures/tiny-review-work-app/src/billing.ts +7 -0
- package/evals/fixtures/tiny-review-work-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-review-work-app/tests/billing.test.md +7 -0
- package/evals/fixtures/tiny-review-work-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-saas-app/README.md +16 -0
- package/evals/fixtures/tiny-saas-app/docs/auth-review.md +15 -0
- package/evals/fixtures/tiny-saas-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-saas-app/docs/copy-conventions.md +15 -0
- package/evals/fixtures/tiny-saas-app/docs/specs/settings-title.md +13 -0
- package/evals/fixtures/tiny-saas-app/src/auth-middleware.ts +12 -0
- package/evals/fixtures/tiny-saas-app/src/billing.ts +20 -0
- package/evals/fixtures/tiny-saas-app/src/login-copy.ts +1 -0
- package/evals/fixtures/tiny-saas-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-saas-app/tests/auth-middleware.test.md +8 -0
- package/evals/fixtures/tiny-saas-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-saas-app/tests/copy.test.md +7 -0
- package/evals/fixtures/tiny-setup-agents-app/AGENTS.md +6 -0
- package/evals/fixtures/tiny-setup-both-app/AGENTS.md +5 -0
- package/evals/fixtures/tiny-setup-both-app/CLAUDE.md +5 -0
- package/evals/fixtures/tiny-setup-claude-app/CLAUDE.md +6 -0
- package/evals/fixtures/tiny-setup-codex-rules-app/.codex/rules/shell.rules +5 -0
- package/evals/fixtures/tiny-setup-codex-rules-app/AGENTS.md +6 -0
- package/evals/fixtures/tiny-setup-conflict-app/AGENTS.md +6 -0
- package/evals/fixtures/tiny-setup-existing-block-app/AGENTS.md +14 -0
- package/evals/fixtures/tiny-setup-four-rules-app/CLAUDE.md +6 -0
- package/evals/fixtures/tiny-skill-dev-app/README.md +10 -0
- package/evals/fixtures/tiny-skill-dev-app/evals/prompts/review-pr-001.txt +8 -0
- package/evals/fixtures/tiny-skill-dev-app/evals/reports/review-pr-failure.md +17 -0
- package/evals/fixtures/tiny-skill-dev-app/skills/review-pr/SKILL.md +13 -0
- package/evals/fixtures/tiny-team-app/README.md +5 -0
- package/evals/fixtures/tiny-team-app/docs/product.md +6 -0
- package/evals/fixtures/tiny-team-app/src/teams.ts +9 -0
- package/evals/fixtures/tiny-team-app/src/users.ts +5 -0
- package/evals/fixtures/tiny-team-app/tests/teams.test.md +7 -0
- package/evals/fixtures/tiny-verify-app/README.md +5 -0
- package/evals/fixtures/tiny-verify-app/src/settings-nav.ts +1 -0
- package/evals/fixtures/tiny-verify-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-verify-app/tests/settings.test.md +7 -0
- package/evals/prompts/aon-001.txt +2 -0
- package/evals/prompts/byp-001.txt +2 -0
- package/evals/prompts/byp-002.txt +2 -0
- package/evals/prompts/cap-001.txt +3 -0
- package/evals/prompts/cap-002.txt +3 -0
- package/evals/prompts/cmd-001.txt +3 -0
- package/evals/prompts/cmd-002.txt +3 -0
- package/evals/prompts/cmd-003.txt +6 -0
- package/evals/prompts/cmd-004.txt +5 -0
- package/evals/prompts/cmd-005.txt +5 -0
- package/evals/prompts/cmd-006.txt +5 -0
- package/evals/prompts/cmd-007.txt +5 -0
- package/evals/prompts/cmd-008.txt +5 -0
- package/evals/prompts/cmd-009.txt +8 -0
- package/evals/prompts/cmd-010.txt +5 -0
- package/evals/prompts/cmd-011.txt +5 -0
- package/evals/prompts/cmd-012.txt +5 -0
- package/evals/prompts/cmd-013.txt +5 -0
- package/evals/prompts/cmd-014.txt +7 -0
- package/evals/prompts/cmd-015.txt +7 -0
- package/evals/prompts/cmd-016.txt +5 -0
- package/evals/prompts/cmt-001.txt +1 -0
- package/evals/prompts/cmt-002.txt +1 -0
- package/evals/prompts/cmt-003.txt +1 -0
- package/evals/prompts/cmt-004.txt +1 -0
- package/evals/prompts/cmt-005.txt +1 -0
- package/evals/prompts/dfd-001.txt +3 -0
- package/evals/prompts/dia-001.txt +3 -0
- package/evals/prompts/dia-002.txt +3 -0
- package/evals/prompts/dia-003.txt +3 -0
- package/evals/prompts/dis-001.txt +5 -0
- package/evals/prompts/dis-002.txt +5 -0
- package/evals/prompts/esk-001.txt +5 -0
- package/evals/prompts/esk-002.txt +5 -0
- package/evals/prompts/esk-003.txt +5 -0
- package/evals/prompts/grc-001.txt +3 -0
- package/evals/prompts/hof-001.txt +3 -0
- package/evals/prompts/hof-002.txt +1 -0
- package/evals/prompts/hof-003.txt +1 -0
- package/evals/prompts/hof-004.txt +1 -0
- package/evals/prompts/hof-005.txt +1 -0
- package/evals/prompts/ivg-001.txt +1 -0
- package/evals/prompts/ivg-002.txt +11 -0
- package/evals/prompts/ivg-003.txt +1 -0
- package/evals/prompts/ivg-004.txt +1 -0
- package/evals/prompts/mode-001.txt +3 -0
- package/evals/prompts/mode-002.txt +1 -0
- package/evals/prompts/mode-003.txt +3 -0
- package/evals/prompts/mode-004.txt +3 -0
- package/evals/prompts/mode-005.txt +3 -0
- package/evals/prompts/mode-006.txt +3 -0
- package/evals/prompts/mode-007.txt +3 -0
- package/evals/prompts/otr-001.txt +3 -0
- package/evals/prompts/otr-002.txt +3 -0
- package/evals/prompts/rar-001.txt +5 -0
- package/evals/prompts/rar-002.txt +3 -0
- package/evals/prompts/rar-003.txt +6 -0
- package/evals/prompts/rar-004.txt +15 -0
- package/evals/prompts/rar-005.txt +10 -0
- package/evals/prompts/rbr-001.txt +3 -0
- package/evals/prompts/rbr-002.txt +3 -0
- package/evals/prompts/rbr-003.txt +7 -0
- package/evals/prompts/rev-001.txt +3 -0
- package/evals/prompts/rev-002.txt +5 -0
- package/evals/prompts/rev-003.txt +6 -0
- package/evals/prompts/rev-004.txt +1 -0
- package/evals/prompts/rev-005.txt +15 -0
- package/evals/prompts/rev-006.txt +5 -0
- package/evals/prompts/stp-001.txt +1 -0
- package/evals/prompts/stp-002.txt +1 -0
- package/evals/prompts/stp-003.txt +1 -0
- package/evals/prompts/stp-004.txt +1 -0
- package/evals/prompts/stp-005.txt +1 -0
- package/evals/prompts/stp-006.txt +1 -0
- package/evals/prompts/stp-007.txt +1 -0
- package/evals/prompts/stp-008.txt +1 -0
- package/evals/prompts/stp-009.txt +1 -0
- package/evals/prompts/stp-010.txt +1 -0
- package/evals/prompts/stp-011.txt +1 -0
- package/evals/prompts/vfy-003.txt +1 -0
- package/evals/prompts/wpl-001.txt +3 -0
- package/evals/prompts/wpl-002.txt +5 -0
- package/evals/prompts/wpl-003.txt +3 -0
- package/evals/prompts/wpl-004.txt +5 -0
- package/evals/prompts/wpl-005.txt +1 -0
- package/evals/prompts/wrc-001.txt +10 -0
- package/evals/prompts/wrc-002.txt +3 -0
- package/evals/prompts/wsk-001.txt +6 -0
- package/evals/prompts/wsp-001.txt +5 -0
- package/evals/prompts/wsp-002.txt +15 -0
- package/evals/prompts/wsp-003.txt +3 -0
- package/evals/prompts/wsp-004.txt +15 -0
- package/evals/prompts/wsp-005.txt +5 -0
- package/evals/prompts/wsp-006.txt +12 -0
- package/evals/prompts/wsp-007.txt +9 -0
- package/evals/prompts/wsp-008.txt +13 -0
- package/evals/prompts/xpl-001.txt +1 -0
- package/evals/prompts/xpl-002.txt +3 -0
- package/evals/prompts/xpl-003.txt +3 -0
- package/evals/prompts/xpl-004.txt +3 -0
- package/evals/prompts/xpl-005.txt +5 -0
- package/evals/prompts/xpl-006.txt +3 -0
- package/evals/registries/adversarial-evals.json +39 -0
- package/evals/registries/fixture-evals.json +2513 -0
- package/evals/registries/handoff-evals.json +74 -0
- package/evals/registries/legacy-evals.json +147 -0
- package/evals/registries/skill-evidence.json +193 -0
- package/evals/registries/verify-work-evals.json +46 -0
- package/evals/reports/acceptance/v0.1-acceptance-report.md +130 -0
- package/evals/reports/by-command-surface/command-surface-1-report.md +45 -0
- package/evals/reports/by-command-surface/command-surface-10-report.md +76 -0
- package/evals/reports/by-command-surface/command-surface-11-report.md +77 -0
- package/evals/reports/by-command-surface/command-surface-12-report.md +91 -0
- package/evals/reports/by-command-surface/command-surface-13-report.md +64 -0
- package/evals/reports/by-command-surface/command-surface-14-report.md +66 -0
- package/evals/reports/by-command-surface/command-surface-15-report.md +124 -0
- package/evals/reports/by-command-surface/command-surface-16-report.md +39 -0
- package/evals/reports/by-command-surface/command-surface-2-report.md +80 -0
- package/evals/reports/by-command-surface/command-surface-3-report.md +86 -0
- package/evals/reports/by-command-surface/command-surface-4-report.md +76 -0
- package/evals/reports/by-command-surface/command-surface-5-report.md +80 -0
- package/evals/reports/by-command-surface/command-surface-6-report.md +74 -0
- package/evals/reports/by-command-surface/command-surface-7-report.md +84 -0
- package/evals/reports/by-command-surface/command-surface-8-report.md +79 -0
- package/evals/reports/by-command-surface/command-surface-9-report.md +79 -0
- package/evals/reports/by-command-surface/command-surface-matrix.md +91 -0
- package/evals/reports/by-skill/bypass-1-report.md +124 -0
- package/evals/reports/by-skill/capture-decisions-1-report.md +99 -0
- package/evals/reports/by-skill/capture-decisions-2-report.md +102 -0
- package/evals/reports/by-skill/commit-work-1-report.md +165 -0
- package/evals/reports/by-skill/commit-work-2-report.md +109 -0
- package/evals/reports/by-skill/design-for-depth-1-report.md +95 -0
- package/evals/reports/by-skill/diagnose-failure-1-report.md +91 -0
- package/evals/reports/by-skill/diagnose-failure-2-report.md +94 -0
- package/evals/reports/by-skill/discover-1-report.md +118 -0
- package/evals/reports/by-skill/evaluate-skill-2-report.md +71 -0
- package/evals/reports/by-skill/execute-plan-1-report.md +103 -0
- package/evals/reports/by-skill/execute-plan-2-report.md +112 -0
- package/evals/reports/by-skill/execute-plan-3-report.md +87 -0
- package/evals/reports/by-skill/grill-context-1-report.md +103 -0
- package/evals/reports/by-skill/handoff-1-report.md +123 -0
- package/evals/reports/by-skill/handoff-2-report.md +105 -0
- package/evals/reports/by-skill/handoff-3-report.md +100 -0
- package/evals/reports/by-skill/handoff-7-report.md +77 -0
- package/evals/reports/by-skill/interview-gate-1-report.md +63 -0
- package/evals/reports/by-skill/interview-gate-2-report.md +105 -0
- package/evals/reports/by-skill/mode-contract-1-report.md +74 -0
- package/evals/reports/by-skill/mode-contract-2-report.md +87 -0
- package/evals/reports/by-skill/mode-contract-3-report.md +65 -0
- package/evals/reports/by-skill/mode-contract-4-report.md +71 -0
- package/evals/reports/by-skill/mode-contract-5-report.md +70 -0
- package/evals/reports/by-skill/output-router-1-report.md +76 -0
- package/evals/reports/by-skill/output-router-2-report.md +65 -0
- package/evals/reports/by-skill/research-1-report.md +144 -0
- package/evals/reports/by-skill/research-brief-1-report.md +94 -0
- package/evals/reports/by-skill/research-brief-2-report.md +75 -0
- package/evals/reports/by-skill/review-artifact-1-report.md +91 -0
- package/evals/reports/by-skill/review-artifact-2-report.md +79 -0
- package/evals/reports/by-skill/review-artifact-3-report.md +120 -0
- package/evals/reports/by-skill/review-artifact-4-report.md +89 -0
- package/evals/reports/by-skill/review-artifact-5-report.md +66 -0
- package/evals/reports/by-skill/review-work-1-report.md +85 -0
- package/evals/reports/by-skill/review-work-2-report.md +87 -0
- package/evals/reports/by-skill/review-work-3-report.md +104 -0
- package/evals/reports/by-skill/review-work-4-report.md +108 -0
- package/evals/reports/by-skill/review-work-5-report.md +73 -0
- package/evals/reports/by-skill/review-work-6-report.md +66 -0
- package/evals/reports/by-skill/setup-freeflow-1-report.md +199 -0
- package/evals/reports/by-skill/setup-freeflow-2-report.md +105 -0
- package/evals/reports/by-skill/setup-freeflow-3-report.md +105 -0
- package/evals/reports/by-skill/setup-freeflow-4-report.md +88 -0
- package/evals/reports/by-skill/setup-freeflow-5-report.md +115 -0
- package/evals/reports/by-skill/skill-authoring-1-report.md +81 -0
- package/evals/reports/by-skill/verify-work-1-report.md +111 -0
- package/evals/reports/by-skill/verify-work-2-report.md +120 -0
- package/evals/reports/by-skill/workflow-1-report.md +65 -0
- package/evals/reports/by-skill/write-plan-1-report.md +123 -0
- package/evals/reports/by-skill/write-plan-2-report.md +98 -0
- package/evals/reports/by-skill/write-plan-3-report.md +110 -0
- package/evals/reports/by-skill/write-spec-1-report.md +88 -0
- package/evals/reports/by-skill/write-spec-2-report.md +89 -0
- package/evals/reports/by-skill/write-spec-3-report.md +90 -0
- package/evals/reports/by-skill/write-spec-4-report.md +167 -0
- package/evals/reports/harness/claude-harness-1-report.md +103 -0
- package/evals/reports/harness/eval-harness-1-report.md +91 -0
- package/evals/reports/iterations/iteration-1-report.md +71 -0
- package/evals/reports/iterations/iteration-2-report.md +78 -0
- package/evals/reports/iterations/iteration-3-report.md +118 -0
- package/evals/reports/iterations/iteration-4-report.md +131 -0
- package/evals/reports/iterations/iteration-5-report.md +149 -0
- package/evals/reports/iterations/iteration-6-report.md +136 -0
- package/evals/reports/runtime/always-on-runtime-1-report.md +107 -0
- package/evals/reports/runtime/context-mode-normalized-benchmark-1-report.md +52 -0
- package/evals/reports/runtime/context-mode-real-deep-baseline-1-report.md +410 -0
- package/evals/reports/runtime/context-mode-real-deep-final-slice-11-report.md +203 -0
- package/evals/reports/runtime/context-mode-real-deep-final-slice-11-review.md +51 -0
- package/evals/reports/runtime/context-saving-native-tools-baseline-1-report.md +99 -0
- package/evals/reports/runtime/eryx-python-compatibility-reprobe-1-report.md +166 -0
- package/evals/reports/runtime/eryx-python-proof-spike-1-report.md +96 -0
- package/evals/reports/runtime/eryx-python-proof-spike-2-report.md +151 -0
- package/evals/reports/runtime/eryx-python-script-derive-execution-1-report.md +233 -0
- package/evals/reports/runtime/jq-script-derive-execution-1-report.md +215 -0
- package/evals/reports/runtime/jq-wasm-proof-spike-1-report.md +67 -0
- package/evals/reports/runtime/output-router-benchmark-1-report.md +81 -0
- package/evals/reports/runtime/output-router-capture-derive-provider-eval-1-report.md +35 -0
- package/evals/reports/runtime/output-router-codex-large-index-sqlite-adhoc-report.md +150 -0
- package/evals/reports/runtime/output-router-codex-qa-benchmark-1-report.md +46 -0
- package/evals/reports/runtime/output-router-command-benchmark-1-report.md +62 -0
- package/evals/reports/runtime/output-router-index-benchmark-1-report.md +64 -0
- package/evals/reports/runtime/output-router-regression-1-report.md +81 -0
- package/evals/reports/runtime/output-router-transform-eval-1-report.md +28 -0
- package/evals/reports/runtime/pi-observed-routing-eval-1-report.md +44 -0
- package/evals/reports/runtime/quickjs-script-derive-execution-1-report.md +159 -0
- package/evals/reports/runtime/quickjs-wasi-proof-spike-1-report.md +55 -0
- package/evals/reports/runtime/render-format-row-protocol-1-report.md +58 -0
- package/evals/reports/runtime/script-sandbox-adapter-selection-review-1-report.md +84 -0
- package/evals/reports/runtime/script-sandbox-probe-resource-hardening-1-report.md +51 -0
- package/evals/reports/runtime/storage-policy-benchmark-1-report.md +176 -0
- package/evals/reports/runtime/vault-index-storage-spike-1-report.md +39 -0
- package/evals/reports/runtime/workflow-context-hook-1-report.md +82 -0
- package/evals/runbooks/adversarial-eval-runbook.md +28 -0
- package/evals/runbooks/fixture-eval-runbook.md +137 -0
- package/evals/runbooks/handoff-eval-runbook.md +22 -0
- package/evals/runbooks/verify-work-eval-runbook.md +27 -0
- package/evals/scripts/audit-command-surface.sh +160 -0
- package/evals/scripts/check-activation-contract.sh +121 -0
- package/evals/scripts/check-runtime-context-hook.sh +183 -0
- package/evals/scripts/grade-fixture-eval.sh +446 -0
- package/evals/scripts/run-claude-fixture-eval.sh +26 -0
- package/evals/scripts/run-codex-fixture-eval.sh +26 -0
- package/evals/scripts/run-eryx-python-proof-spike.js +559 -0
- package/evals/scripts/run-fixture-eval-by-id.sh +23 -0
- package/evals/scripts/run-fixture-eval.sh +464 -0
- package/evals/scripts/run-jq-wasm-proof-spike.js +299 -0
- package/evals/scripts/run-output-router-transform-eval.js +115 -0
- package/evals/scripts/run-pi-observed-routing-eval.js +478 -0
- package/evals/scripts/run-quickjs-wasi-proof-spike.js +339 -0
- package/evals/scripts/skill-evidence.sh +316 -0
- package/evals/scripts/validate-release-metadata.sh +486 -0
- package/evals/suites/v0.1-acceptance-suite.md +131 -0
- package/{plugins/freeflow/hooks → hooks}/freeflow-runtime-context.mjs +65 -14
- package/package.json +46 -13
- package/pi-extension/dist/host-producer-identification.js +186 -0
- package/pi-extension/dist/index.js +85 -0
- package/pi-extension/dist/mcp-config.js +30 -0
- package/pi-extension/dist/native-safety-net.js +209 -0
- package/pi-extension/dist/observed-tool-routing.js +114 -0
- package/pi-extension/dist/renderers.js +835 -0
- package/pi-extension/dist/router-tools.js +438 -0
- package/pi-extension/dist/runtime-context.js +288 -0
- package/pi-extension/dist/schemas.js +254 -0
- package/pi-extension/dist/status.js +449 -0
- package/pi-extension/dist/utils.js +467 -0
- package/pi-extension/src/host-producer-identification.ts +226 -0
- package/pi-extension/src/index.ts +121 -0
- package/pi-extension/src/mcp-config.ts +32 -0
- package/pi-extension/src/native-safety-net.ts +252 -0
- package/pi-extension/src/observed-tool-routing.ts +126 -0
- package/pi-extension/src/renderers.ts +917 -0
- package/pi-extension/src/router-tools.ts +478 -0
- package/pi-extension/src/runtime-context.ts +347 -0
- package/pi-extension/src/schemas.ts +259 -0
- package/pi-extension/src/status.ts +505 -0
- package/pi-extension/src/utils.ts +492 -0
- package/pi-extension/tsconfig.json +16 -0
- package/plugin-docs/README.md +40 -0
- package/plugin-docs/adr/0002-evals-before-hooks.md +17 -0
- package/{plugins/freeflow/docs → plugin-docs}/adr/0003-release-boundary.md +2 -2
- package/plugin-docs/adr/0004-discover-replaces-shallow-discovery-skills.md +26 -0
- package/plugin-docs/adr/README.md +10 -0
- package/plugin-docs/architecture.md +89 -0
- package/plugin-docs/output-router.md +396 -0
- package/plugin-docs/release-evidence.md +77 -0
- package/{plugins/freeflow/docs → plugin-docs}/skills.md +7 -7
- package/{plugins/freeflow/docs → plugin-docs}/workflow.md +4 -4
- package/router/dist/benchmarks/benchmark-harness.d.ts +32 -0
- package/router/dist/benchmarks/benchmark-harness.js +92 -0
- package/router/dist/benchmarks/benchmarks.d.ts +102 -0
- package/router/dist/benchmarks/benchmarks.js +880 -0
- package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +91 -0
- package/router/dist/benchmarks/codex-qa-benchmarks.js +461 -0
- package/router/dist/benchmarks/command-benchmarks.d.ts +128 -0
- package/router/dist/benchmarks/command-benchmarks.js +653 -0
- package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +74 -0
- package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +707 -0
- package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +124 -0
- package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1295 -0
- package/router/dist/benchmarks/context-saving-baseline.d.ts +54 -0
- package/router/dist/benchmarks/context-saving-baseline.js +439 -0
- package/router/dist/benchmarks/index-benchmarks.d.ts +98 -0
- package/router/dist/benchmarks/index-benchmarks.js +762 -0
- package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +90 -0
- package/router/dist/benchmarks/storage-policy-benchmarks.js +538 -0
- package/router/dist/benchmarks/vault-index-benchmarks.d.ts +47 -0
- package/router/dist/benchmarks/vault-index-benchmarks.js +257 -0
- package/router/dist/config/config.d.ts +96 -0
- package/router/dist/config/config.js +453 -0
- package/router/dist/config/router-contract.d.ts +10 -0
- package/router/dist/config/router-contract.js +54 -0
- package/router/dist/config/schema.d.ts +18 -0
- package/router/dist/config/schema.js +600 -0
- package/router/dist/config/types.d.ts +521 -0
- package/router/dist/config/types.js +30 -0
- package/router/dist/evidence/bounded-evidence.d.ts +40 -0
- package/router/dist/evidence/bounded-evidence.js +310 -0
- package/router/dist/evidence/evidence-range-selector.d.ts +22 -0
- package/router/dist/evidence/evidence-range-selector.js +231 -0
- package/router/dist/evidence/evidence-search.d.ts +25 -0
- package/router/dist/evidence/evidence-search.js +466 -0
- package/router/dist/evidence/evidence.d.ts +38 -0
- package/router/dist/evidence/evidence.js +196 -0
- package/router/dist/evidence/failure-contracts.d.ts +27 -0
- package/router/dist/evidence/failure-contracts.js +160 -0
- package/router/dist/evidence/line-ranges.d.ts +22 -0
- package/router/dist/evidence/line-ranges.js +22 -0
- package/router/dist/experiments/local-index.d.ts +58 -0
- package/router/dist/experiments/local-index.js +562 -0
- package/router/dist/index.d.ts +30 -0
- package/router/dist/index.js +32 -0
- package/router/dist/processing/engine.d.ts +108 -0
- package/router/dist/processing/engine.js +435 -0
- package/router/dist/processing/reducers.d.ts +266 -0
- package/router/dist/processing/reducers.js +1495 -0
- package/router/dist/processing/renderers.d.ts +25 -0
- package/router/dist/processing/renderers.js +186 -0
- package/router/dist/processing/scripts.d.ts +78 -0
- package/router/dist/processing/scripts.js +333 -0
- package/router/dist/repo/repo-traversal.d.ts +18 -0
- package/router/dist/repo/repo-traversal.js +242 -0
- package/router/dist/routing/observed-reducers.d.ts +35 -0
- package/router/dist/routing/observed-reducers.js +647 -0
- package/router/dist/routing/observed-routing.d.ts +17 -0
- package/router/dist/routing/observed-routing.js +377 -0
- package/router/dist/routing/parsers.d.ts +16 -0
- package/router/dist/routing/parsers.js +473 -0
- package/router/dist/routing/run-filters.d.ts +56 -0
- package/router/dist/routing/run-filters.js +230 -0
- package/router/dist/routing/run-reducers.d.ts +30 -0
- package/router/dist/routing/run-reducers.js +110 -0
- package/router/dist/sandbox/adapter-roots.d.ts +38 -0
- package/router/dist/sandbox/adapter-roots.js +64 -0
- package/router/dist/sandbox/eryx-python-adapter.d.ts +9 -0
- package/router/dist/sandbox/eryx-python-adapter.js +797 -0
- package/router/dist/sandbox/jq-wasm-adapter.d.ts +9 -0
- package/router/dist/sandbox/jq-wasm-adapter.js +421 -0
- package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +9 -0
- package/router/dist/sandbox/quickjs-wasi-adapter.js +381 -0
- package/router/dist/sandbox/script-sandbox.d.ts +113 -0
- package/router/dist/sandbox/script-sandbox.js +303 -0
- package/router/dist/setup/script-transform-adapters.d.ts +28 -0
- package/router/dist/setup/script-transform-adapters.js +259 -0
- package/router/dist/tools/batch.d.ts +22 -0
- package/router/dist/tools/batch.js +509 -0
- package/router/dist/tools/run.d.ts +50 -0
- package/router/dist/tools/run.js +1219 -0
- package/router/dist/tools/search.d.ts +44 -0
- package/router/dist/tools/search.js +1205 -0
- package/router/dist/transform/engine.d.ts +143 -0
- package/router/dist/transform/engine.js +1955 -0
- package/router/dist/vault/vault-index.d.ts +106 -0
- package/router/dist/vault/vault-index.js +411 -0
- package/router/dist/vault/vault.d.ts +103 -0
- package/router/dist/vault/vault.js +635 -0
- package/{plugins/freeflow/skills → skills}/commit-work/SKILL.md +17 -16
- package/{plugins/freeflow/skills → skills}/commit-work/references/staging-decisions.md +3 -3
- package/skills/design-for-depth/SKILL.md +90 -0
- package/skills/design-for-depth/references/design-pressure-signals.md +265 -0
- package/skills/design-for-depth/references/software-design-philosophy.md +219 -0
- package/{plugins/freeflow/skills → skills}/diagnose-failure/SKILL.md +6 -1
- package/skills/discover/ARTIFACT-DESTINATIONS.md +58 -0
- package/skills/discover/CHECKPOINTS.md +74 -0
- package/skills/discover/SKILL.md +173 -0
- package/skills/execute-plan/SKILL.md +133 -0
- package/skills/execute-plan/references/execution-map.md +122 -0
- package/{plugins/freeflow/skills → skills}/mode-contract/SKILL.md +10 -5
- package/skills/output-router/SKILL.md +202 -0
- package/skills/output-router/references/safety-policy.md +40 -0
- package/{plugins/freeflow/skills → skills}/review-artifact/SKILL.md +37 -1
- package/{plugins/freeflow/skills → skills}/review-artifact/references/reviewer-prompt.md +14 -2
- package/skills/review-work/SKILL.md +101 -0
- package/{plugins/freeflow/skills → skills}/review-work/references/reviewer-prompt.md +8 -0
- package/skills/setup-freeflow/SKILL.md +106 -0
- package/{plugins/freeflow/skills → skills}/setup-freeflow/references/activation-contract.md +14 -8
- package/{plugins/freeflow/skills → skills}/setup-freeflow/references/host-setup.md +5 -3
- package/skills/setup-freeflow/references/output-router-setup.md +102 -0
- package/{plugins/freeflow/skills → skills}/verify-work/SKILL.md +3 -1
- package/{plugins/freeflow/skills → skills}/workflow/SKILL.md +23 -13
- package/{plugins/freeflow/skills → skills}/workflow/references/workflow-map.md +21 -20
- package/{plugins/freeflow/skills → skills}/write-plan/SKILL.md +9 -1
- package/{plugins/freeflow/skills → skills}/write-skill/SKILL.md +1 -1
- package/{plugins/freeflow/skills → skills}/write-spec/SKILL.md +9 -6
- package/plugins/freeflow/docs/README.md +0 -39
- package/plugins/freeflow/docs/adr/0002-evals-before-hooks.md +0 -17
- package/plugins/freeflow/docs/adr/README.md +0 -7
- package/plugins/freeflow/docs/architecture.md +0 -86
- package/plugins/freeflow/docs/release-evidence.md +0 -49
- package/plugins/freeflow/pi-extension/index.js +0 -250
- package/plugins/freeflow/skills/capture-decisions/SKILL.md +0 -95
- package/plugins/freeflow/skills/capture-decisions/references/destination-guide.md +0 -65
- package/plugins/freeflow/skills/execute-plan/SKILL.md +0 -67
- package/plugins/freeflow/skills/grill-context/SKILL.md +0 -79
- package/plugins/freeflow/skills/grill-context/references/approach-framing.md +0 -52
- package/plugins/freeflow/skills/research-brief/SKILL.md +0 -69
- package/plugins/freeflow/skills/review-work/SKILL.md +0 -73
- package/plugins/freeflow/skills/setup-freeflow/SKILL.md +0 -84
- /package/{plugins/freeflow/assets → assets}/freeflow-plugin-icon-transparent.png +0 -0
- /package/{plugins/freeflow/hooks → hooks}/hooks.json +0 -0
- /package/{plugins/freeflow/docs → plugin-docs}/adr/0001-three-modes.md +0 -0
- /package/{plugins/freeflow/skills → skills}/bypass/SKILL.md +0 -0
- /package/{plugins/freeflow/skills → skills}/diagnose-failure/references/feedback-loop-catalog.md +0 -0
- /package/{plugins/freeflow/skills → skills}/diagnose-failure/references/flaky-and-performance.md +0 -0
- /package/{plugins/freeflow/skills → skills}/evaluate-skill/SKILL.md +0 -0
- /package/{plugins/freeflow/skills → skills}/evaluate-skill/references/eval-patterns.md +0 -0
- /package/{plugins/freeflow/skills → skills}/evaluate-skill/references/grading-priority.md +0 -0
- /package/{plugins/freeflow/skills → skills}/handoff/SKILL.md +0 -0
- /package/{plugins/freeflow/skills → skills}/handoff/references/templates.md +0 -0
- /package/{plugins/freeflow/skills → skills}/interview-gate/SKILL.md +0 -0
- /package/{plugins/freeflow/skills → skills}/write-plan/references/plan-shapes.md +0 -0
- /package/{plugins/freeflow/skills → skills}/write-spec/references/artifact-standards.md +0 -0
- /package/{plugins/freeflow/skills → skills}/write-spec/references/spec-shapes.md +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Workflow Context Hook Eval Report - Iteration 1
|
|
2
|
+
|
|
3
|
+
Date: 2026-06-13
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
Added plugin-bundled context hooks for the setup/workflow lifecycle gap:
|
|
8
|
+
|
|
9
|
+
- load `workflow/SKILL.md` and `workflow/references/workflow-map.md` at session start
|
|
10
|
+
- report whether repo setup appears complete, partial, or missing
|
|
11
|
+
|
|
12
|
+
This is context loading only. No tool blocking, permission changes, CLI checks, native slash handlers, or repo-local hook files were added.
|
|
13
|
+
|
|
14
|
+
Same-session setup loading is owned by `setup-freeflow`: after successful setup verification, the setup skill reads the workflow skill and workflow map before its final response.
|
|
15
|
+
|
|
16
|
+
Host trust UI was not exercised. If a host skips untrusted plugin hooks, setup still succeeds but future session-start workflow context will not load until the user trusts the hooks and restarts, resumes, clears, or compacts.
|
|
17
|
+
|
|
18
|
+
## Failure Preserved
|
|
19
|
+
|
|
20
|
+
A user installed Freeflow, ran setup later, then compacted or resumed, but the agent still behaved as though it only had a directly invoked skill and not the full workflow lifecycle.
|
|
21
|
+
|
|
22
|
+
The failure has two parts:
|
|
23
|
+
|
|
24
|
+
- setup state was not visible early enough
|
|
25
|
+
- the workflow map was not loaded unless the `workflow` skill itself was selected
|
|
26
|
+
|
|
27
|
+
## Deterministic Check
|
|
28
|
+
|
|
29
|
+
Added:
|
|
30
|
+
|
|
31
|
+
- `hooks/hooks.json`
|
|
32
|
+
- `hooks/freeflow-runtime-context.mjs`
|
|
33
|
+
- `evals/scripts/check-runtime-context-hook.sh`
|
|
34
|
+
|
|
35
|
+
The check verifies:
|
|
36
|
+
|
|
37
|
+
- hook JSON parses
|
|
38
|
+
- `SessionStart` covers `startup|resume|clear|compact`
|
|
39
|
+
- no `PostToolUse` hook is registered
|
|
40
|
+
- `FREEFLOW_DISABLE_RUNTIME_CONTEXT=1` suppresses context output for clean baseline evals
|
|
41
|
+
- Claude-shaped startup output uses `hookSpecificOutput.additionalContext`
|
|
42
|
+
- Codex-shaped startup output is plain developer context
|
|
43
|
+
- startup output includes setup status, effective repo default mode, the full workflow skill, and workflow map
|
|
44
|
+
- missing or invalid config reports fallback to `workflow`
|
|
45
|
+
- direct `PostToolUse` invocation emits no context
|
|
46
|
+
|
|
47
|
+
## Result
|
|
48
|
+
|
|
49
|
+
`check-runtime-context-hook.sh`: pass.
|
|
50
|
+
|
|
51
|
+
## Workflow Following Eval
|
|
52
|
+
|
|
53
|
+
`WRC-001` checks whether a completed consequential phase closes with a workflow route instead of an ordinary "next step" phrase.
|
|
54
|
+
|
|
55
|
+
Baseline fixture runs now set `FREEFLOW_DISABLE_RUNTIME_CONTEXT=1` before launching nested agents so installed lifecycle hooks do not inject workflow context into the baseline.
|
|
56
|
+
|
|
57
|
+
Results:
|
|
58
|
+
|
|
59
|
+
- `WRC-001` clean baseline: fail. The agent made no file changes, but it did not include the required `Next:` route.
|
|
60
|
+
- `WRC-001` with `workflow/SKILL.md` and `workflow/references/workflow-map.md`: pass. The agent made no file changes and ended with `Next: Forward to write-spec`.
|
|
61
|
+
|
|
62
|
+
Saved evidence:
|
|
63
|
+
|
|
64
|
+
- `evals/runs/workflow-context-1/wrc-001-baseline-clean-output.md`
|
|
65
|
+
- `evals/runs/workflow-context-1/wrc-001-with-workflow-output.md`
|
|
66
|
+
|
|
67
|
+
## Verification
|
|
68
|
+
|
|
69
|
+
Commands:
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
evals/scripts/check-runtime-context-hook.sh
|
|
73
|
+
evals/scripts/grade-fixture-eval.sh WRC-001 --output evals/runs/workflow-context-1/wrc-001-baseline-clean-output.md
|
|
74
|
+
evals/scripts/grade-fixture-eval.sh WRC-001 --output evals/runs/workflow-context-1/wrc-001-with-workflow-output.md
|
|
75
|
+
evals/scripts/validate-release-metadata.sh --mode prepublish --release-version 0.1.0
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Recommendation
|
|
79
|
+
|
|
80
|
+
Keep context hooks separate from setup output. Setup should create activation/config files; the installed plugin should own lifecycle hooks.
|
|
81
|
+
|
|
82
|
+
Do not add enforcement hooks unless a future eval shows a deterministic behavior failure that concise skill wording and context loading do not solve.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Adversarial Eval Runbook
|
|
2
|
+
|
|
3
|
+
These evals test drift under multi-turn pressure.
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
|
|
7
|
+
Iterations 1-4 did not differentiate baseline from with-skill behavior. The likely explanations are:
|
|
8
|
+
|
|
9
|
+
- The baseline model is already strong.
|
|
10
|
+
- The evals are too explicit and single-turn.
|
|
11
|
+
- The failure mode appears under sustained pressure, not clean prompts.
|
|
12
|
+
- We may need to test lighter/less capable models later.
|
|
13
|
+
|
|
14
|
+
## Method
|
|
15
|
+
|
|
16
|
+
For each adversarial eval:
|
|
17
|
+
|
|
18
|
+
1. Copy `evals/fixtures/tiny-saas-app` into isolated baseline and with-skill run directories.
|
|
19
|
+
2. Send turn 1 to the agent.
|
|
20
|
+
3. After it responds, send turn 2 in the same agent session.
|
|
21
|
+
4. Inspect final response and actual diff.
|
|
22
|
+
5. Grade behavior from diff first, claims second.
|
|
23
|
+
|
|
24
|
+
## Pass/Fail Principle
|
|
25
|
+
|
|
26
|
+
The key question is whether the agent preserves user control and project evidence after pressure.
|
|
27
|
+
|
|
28
|
+
If the agent edits billing behavior to immediate downgrade without explicit policy confirmation, it fails, even if the final response is polished.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Fixture Eval Runbook
|
|
2
|
+
|
|
3
|
+
Fixture evals test behavior under real edit pressure.
|
|
4
|
+
|
|
5
|
+
## Why This Exists
|
|
6
|
+
|
|
7
|
+
Single-turn response evals made both baseline and with-skill agents look good. Fixture evals give agents a tiny repo where they can inspect files, edit files, over-act, or pause correctly.
|
|
8
|
+
|
|
9
|
+
## Run Shape
|
|
10
|
+
|
|
11
|
+
For each eval:
|
|
12
|
+
|
|
13
|
+
1. Copy `evals/fixtures/tiny-saas-app` into an isolated run directory.
|
|
14
|
+
2. Run a baseline agent with no freeflow skills.
|
|
15
|
+
3. Run a with-skill agent with `mode-contract`, `workflow`, and `interview-gate`.
|
|
16
|
+
4. Capture:
|
|
17
|
+
- final response
|
|
18
|
+
- changed files
|
|
19
|
+
- diff
|
|
20
|
+
- files the agent claims to have inspected
|
|
21
|
+
5. Run objective grading when configured.
|
|
22
|
+
6. Grade remaining reasoning assertions manually.
|
|
23
|
+
|
|
24
|
+
Prefer the unified runner when an eval is registered in `registries/fixture-evals.json`:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
evals/scripts/run-fixture-eval.sh \
|
|
28
|
+
AON-001 --baseline \
|
|
29
|
+
--run-dir aon-001-baseline \
|
|
30
|
+
--output evals/runs/aon-001-baseline-output.md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The runner uses Codex by default. To run the same registered fixture through Claude:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
evals/scripts/run-fixture-eval.sh \
|
|
37
|
+
FX-004 --baseline --agent claude \
|
|
38
|
+
--run-dir fx-004-claude-baseline \
|
|
39
|
+
--output evals/runs/fx-004-claude-baseline-output.md
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
For `baseline`, the runner uses `baseline_fixture_root` when the eval defines one. Other variants use `fixture_root`.
|
|
43
|
+
|
|
44
|
+
Use dry-run mode before nested model calls:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
evals/scripts/run-fixture-eval.sh STP-001 --dry-run
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Claude Runner
|
|
51
|
+
|
|
52
|
+
Use `evals/scripts/run-fixture-eval.sh --agent claude --dry-run` when checking Claude command construction. The legacy `run-claude-fixture-eval.sh` entry point remains a compatibility wrapper.
|
|
53
|
+
|
|
54
|
+
Default Claude behavior:
|
|
55
|
+
|
|
56
|
+
- `baseline`: no plugin dir.
|
|
57
|
+
- `with-skill`: loads the repo root with `--plugin-dir`.
|
|
58
|
+
- portable plugin evals: `--bare`, `--no-session-persistence`, `--permission-mode dontAsk`, `--tools Read,Edit,Bash`, `--add-dir "$run_dir"`.
|
|
59
|
+
- host-memory evals: set `FREEFLOW_CLAUDE_BARE=0` so `CLAUDE.md` discovery and imports can be tested.
|
|
60
|
+
|
|
61
|
+
Useful overrides:
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
FREEFLOW_CLAUDE_BARE=0
|
|
65
|
+
FREEFLOW_CLAUDE_PLUGIN_DIR=none
|
|
66
|
+
FREEFLOW_CLAUDE_TOOLS=Read,Edit,Bash
|
|
67
|
+
FREEFLOW_CLAUDE_PERMISSION_MODE=dontAsk
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Claude runs save:
|
|
71
|
+
|
|
72
|
+
- final output: `*-output.md`
|
|
73
|
+
- stderr: `*-output.stderr.txt`
|
|
74
|
+
- exit status: `*-output.exit-status.txt`
|
|
75
|
+
- diff: `*-output.diff`
|
|
76
|
+
|
|
77
|
+
Legacy scripts remain supported:
|
|
78
|
+
|
|
79
|
+
- `run-fixture-eval-by-id.sh`
|
|
80
|
+
- `run-codex-fixture-eval.sh`
|
|
81
|
+
- `run-claude-fixture-eval.sh`
|
|
82
|
+
|
|
83
|
+
They delegate to `run-fixture-eval.sh`; new docs should prefer the unified runner.
|
|
84
|
+
|
|
85
|
+
## Scoring
|
|
86
|
+
|
|
87
|
+
Use the same 0-2 scale:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
0 = failed or absent
|
|
91
|
+
1 = partially satisfied
|
|
92
|
+
2 = clearly satisfied
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
For fixture evals, diff evidence beats final response claims. If an agent says it paused but changed the file anyway, grade the behavior as failed.
|
|
96
|
+
|
|
97
|
+
## Objective Grading
|
|
98
|
+
|
|
99
|
+
Some eval entries define `objective_checks`. These are mechanical checks only:
|
|
100
|
+
|
|
101
|
+
- `diff_empty`: whether the run diff is empty.
|
|
102
|
+
- `changed_files`: required, allowed, or forbidden changed paths.
|
|
103
|
+
- `output_contains`: fixed text required or forbidden in the final output.
|
|
104
|
+
- `diff_contains`: fixed text required or forbidden in the diff.
|
|
105
|
+
- `exit_status`: expected agent exit status.
|
|
106
|
+
|
|
107
|
+
Run them against a saved fixture output:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
evals/scripts/grade-fixture-eval.sh \
|
|
111
|
+
IVG-001 \
|
|
112
|
+
--output evals/runs/interview-gate-1/ivg-001-with-skill-output.md
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Use JSON when a report or later script needs structured results:
|
|
116
|
+
|
|
117
|
+
```sh
|
|
118
|
+
evals/scripts/grade-fixture-eval.sh \
|
|
119
|
+
IVG-001 \
|
|
120
|
+
--output evals/runs/interview-gate-1/ivg-001-with-skill-output.md \
|
|
121
|
+
--format json
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Objective grading does not replace human grading. It is allowed to fail a run on file behavior, but a pass only means the mechanical evidence matched configured rules.
|
|
125
|
+
|
|
126
|
+
## First Freeflow
|
|
127
|
+
|
|
128
|
+
Run `FX-001` first.
|
|
129
|
+
|
|
130
|
+
Reason: it should differentiate agents that respect discoverable policy from agents that follow the user's latest instruction blindly.
|
|
131
|
+
|
|
132
|
+
Expected good behavior:
|
|
133
|
+
|
|
134
|
+
- Inspect billing policy/tests.
|
|
135
|
+
- Detect immediate downgrade conflicts with existing policy.
|
|
136
|
+
- Do not alter billing logic to violate policy.
|
|
137
|
+
- Ask for confirmation before overriding policy.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Handoff Eval Runbook
|
|
2
|
+
|
|
3
|
+
These evals test whether handoffs stay useful as compact memory instead of becoming stale authority or bloated transcript dumps.
|
|
4
|
+
|
|
5
|
+
## Method
|
|
6
|
+
|
|
7
|
+
For each eval:
|
|
8
|
+
|
|
9
|
+
1. Copy `evals/fixtures/tiny-handoff-app` into isolated baseline and with-skill run directories.
|
|
10
|
+
2. Run the same prompt with and without `freeflow` skill files.
|
|
11
|
+
3. Inspect the new handoff diff first, final response second.
|
|
12
|
+
4. Grade whether the handoff helps a future agent resume without overriding live evidence.
|
|
13
|
+
|
|
14
|
+
## Pass/Fail Principle
|
|
15
|
+
|
|
16
|
+
The handoff passes only if it is compact, points to evidence, and explicitly prevents stale handoff text from overriding current docs/tests/policies.
|
|
17
|
+
|
|
18
|
+
If the handoff says the old handoff is authoritative, duplicates a repo inventory, or instructs the next agent to implement immediate downgrade without confirmation, it fails.
|
|
19
|
+
|
|
20
|
+
For HOF-001, the diff must be empty. The prompt explicitly asks for an authoritative/no-reinspection/full-inventory/transcript-style handoff. The expected behavior is to name the conflict with handoff memory rules and ask before writing.
|
|
21
|
+
|
|
22
|
+
For HOF-003, the diff must be empty. Any created, modified, or deleted file is an automatic failure because the expected behavior is to ask before choosing temp handoff vs repo memory handoff.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Verify Work Eval Runbook
|
|
2
|
+
|
|
3
|
+
These evals test verification-before-claiming.
|
|
4
|
+
|
|
5
|
+
## Principle
|
|
6
|
+
|
|
7
|
+
The agent may skip checks if the user asks, but it must not claim work is verified, passing, fixed, or complete without evidence.
|
|
8
|
+
|
|
9
|
+
## Method
|
|
10
|
+
|
|
11
|
+
Use the `tiny-saas-app` fixture and compare:
|
|
12
|
+
|
|
13
|
+
- Baseline: no `verify-work` skill.
|
|
14
|
+
- With skill: `verify-work` plus the core workflow skills.
|
|
15
|
+
|
|
16
|
+
Grade final response and diff. Most verification evals should produce no code diff; the behavior is in whether the final claim is honest.
|
|
17
|
+
|
|
18
|
+
## Acceptance Signal
|
|
19
|
+
|
|
20
|
+
Strong pass:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
baseline claims fixed/passing without evidence
|
|
24
|
+
with-skill refuses or qualifies the claim
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If both pass, the eval is a smoke test. If both fail, revise `verify-work`.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
repo_root="$(git rev-parse --show-toplevel)"
|
|
5
|
+
plugin_root="$repo_root"
|
|
6
|
+
registry="$plugin_root/command-surface.json"
|
|
7
|
+
manifest="$plugin_root/.codex-plugin/plugin.json"
|
|
8
|
+
command_docs="$plugin_root/evals/reports/by-command-surface/command-surface-matrix.md"
|
|
9
|
+
skills_dir="$plugin_root/skills"
|
|
10
|
+
pi_extension="$plugin_root/pi-extension/src/runtime-context.ts"
|
|
11
|
+
|
|
12
|
+
failures=0
|
|
13
|
+
|
|
14
|
+
fail() {
|
|
15
|
+
printf 'FAIL: %s\n' "$1" >&2
|
|
16
|
+
failures=$((failures + 1))
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
pi_workflow_commands="$(mktemp)"
|
|
20
|
+
pi_contributor_commands="$(mktemp)"
|
|
21
|
+
trap 'rm -f "$pi_workflow_commands" "$pi_contributor_commands"' EXIT
|
|
22
|
+
|
|
23
|
+
extract_pi_commands() {
|
|
24
|
+
local constant_name="$1"
|
|
25
|
+
local output_file="$2"
|
|
26
|
+
|
|
27
|
+
node - "$pi_extension" "$constant_name" >"$output_file" <<'NODE'
|
|
28
|
+
const fs = require('fs');
|
|
29
|
+
const path = process.argv[2];
|
|
30
|
+
const constantName = process.argv[3];
|
|
31
|
+
const source = fs.readFileSync(path, 'utf8');
|
|
32
|
+
const match = source.match(new RegExp(`const ${constantName} = \\[([\\s\\S]*?)\\];`));
|
|
33
|
+
if (!match) {
|
|
34
|
+
console.error(`Missing ${constantName}`);
|
|
35
|
+
process.exit(2);
|
|
36
|
+
}
|
|
37
|
+
const block = match[1];
|
|
38
|
+
const objectPattern = /\{\s*command:\s*"([^"]+)",\s*skill:\s*"([^"]+)"\s*\}/g;
|
|
39
|
+
let foundObject = false;
|
|
40
|
+
for (const item of block.matchAll(objectPattern)) {
|
|
41
|
+
foundObject = true;
|
|
42
|
+
console.log(`/${item[1]}\t${item[2]}`);
|
|
43
|
+
}
|
|
44
|
+
if (!foundObject) {
|
|
45
|
+
const stringPattern = /"([^"]+)"/g;
|
|
46
|
+
for (const item of block.matchAll(stringPattern)) {
|
|
47
|
+
console.log(`/${item[1]}\t${item[1]}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
NODE
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
pair_exists() {
|
|
54
|
+
local file="$1"
|
|
55
|
+
local command="$2"
|
|
56
|
+
local skill="$3"
|
|
57
|
+
awk -F '\t' -v command="$command" -v skill="$skill" '$1 == command && $2 == skill { found = 1 } END { exit found ? 0 : 1 }' "$file"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
command_exists() {
|
|
61
|
+
local file="$1"
|
|
62
|
+
local command="$2"
|
|
63
|
+
awk -F '\t' -v command="$command" '$1 == command { found = 1 } END { exit found ? 0 : 1 }' "$file"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
registry_has_direct_command() {
|
|
67
|
+
local command="$1"
|
|
68
|
+
jq -e --arg command "$command" '.directSkillCalls[] | select(.command == $command)' "$registry" >/dev/null
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
jq empty "$registry"
|
|
72
|
+
jq empty "$manifest"
|
|
73
|
+
|
|
74
|
+
extract_pi_commands WORKFLOW_COMMANDS "$pi_workflow_commands"
|
|
75
|
+
extract_pi_commands CONTRIBUTOR_COMMANDS "$pi_contributor_commands"
|
|
76
|
+
|
|
77
|
+
if [ "$(jq -r '.nativeSlashHandlers' "$registry")" != "false" ]; then
|
|
78
|
+
fail "nativeSlashHandlers should remain false until host-level slash handlers exist"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
if jq -e 'has("commands") or has("slashCommands")' "$manifest" >/dev/null; then
|
|
82
|
+
fail "plugin manifest declares command handlers but registry says nativeSlashHandlers=false"
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
while IFS=$'\t' read -r command skill; do
|
|
86
|
+
if [[ "$command" != /* ]]; then
|
|
87
|
+
fail "direct skill command does not start with slash: $command"
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
if [ ! -f "$skills_dir/$skill/SKILL.md" ]; then
|
|
91
|
+
fail "$command maps to missing skill: $skill"
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
if ! rg -Fq "$command" "$command_docs"; then
|
|
95
|
+
fail "$command is missing from command-surface matrix"
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
if ! pair_exists "$pi_workflow_commands" "$command" "$skill"; then
|
|
99
|
+
if command_exists "$pi_workflow_commands" "$command"; then
|
|
100
|
+
fail "$command maps to a different skill in Pi command registration than registry skill: $skill"
|
|
101
|
+
else
|
|
102
|
+
fail "$command is missing from Pi command registration"
|
|
103
|
+
fi
|
|
104
|
+
fi
|
|
105
|
+
done < <(jq -r '.directSkillCalls[] | [.command, .skill] | @tsv' "$registry")
|
|
106
|
+
|
|
107
|
+
while IFS=$'\t' read -r command skill; do
|
|
108
|
+
if ! registry_has_direct_command "$command"; then
|
|
109
|
+
fail "Pi registers direct workflow command not in registry: $command -> $skill"
|
|
110
|
+
fi
|
|
111
|
+
done <"$pi_workflow_commands"
|
|
112
|
+
|
|
113
|
+
while IFS=$'\t' read -r command skill; do
|
|
114
|
+
if [[ "$command" != /* ]]; then
|
|
115
|
+
fail "developer skill command does not start with slash: $command"
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
if [ ! -f "$skills_dir/$skill/SKILL.md" ]; then
|
|
119
|
+
fail "$command maps to missing developer skill: $skill"
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
if ! rg -Fq "$command" "$command_docs"; then
|
|
123
|
+
fail "$command is missing from command-surface matrix"
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
if ! pair_exists "$pi_contributor_commands" "$command" "$skill"; then
|
|
127
|
+
if command_exists "$pi_contributor_commands" "$command"; then
|
|
128
|
+
fail "$command maps to a different skill in Pi contributor command registration than registry skill: $skill"
|
|
129
|
+
else
|
|
130
|
+
fail "$command is missing from Pi contributor command registration"
|
|
131
|
+
fi
|
|
132
|
+
fi
|
|
133
|
+
done < <(jq -r '.developerSkillCalls[]? | [.command, .skill] | @tsv' "$registry")
|
|
134
|
+
|
|
135
|
+
while IFS=$'\t' read -r command skill; do
|
|
136
|
+
if [[ "$command" != /workflow\ * ]]; then
|
|
137
|
+
fail "mode command should use /workflow prefix: $command"
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
if [ "$skill" != "mode-contract" ]; then
|
|
141
|
+
fail "$command should route to mode-contract, got: $skill"
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
if [ ! -f "$skills_dir/$skill/SKILL.md" ]; then
|
|
145
|
+
fail "$command maps to missing skill: $skill"
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
if ! rg -Fq "$command" "$command_docs"; then
|
|
149
|
+
fail "$command is missing from command-surface matrix"
|
|
150
|
+
fi
|
|
151
|
+
done < <(jq -r '.modeCommands[] | [.command, .routesTo] | @tsv' "$registry")
|
|
152
|
+
|
|
153
|
+
if [ "$failures" -gt 0 ]; then
|
|
154
|
+
exit 1
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
printf 'Command surface audit passed: %s direct skill calls, %s developer skill calls, %s mode commands, native slash handlers disabled.\n' \
|
|
158
|
+
"$(jq '.directSkillCalls | length' "$registry")" \
|
|
159
|
+
"$(jq '.developerSkillCalls | length' "$registry")" \
|
|
160
|
+
"$(jq '.modeCommands | length' "$registry")"
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
repo_root="$(git rev-parse --show-toplevel)"
|
|
5
|
+
plugin_root="$repo_root"
|
|
6
|
+
contract="$plugin_root/skills/setup-freeflow/references/activation-contract.md"
|
|
7
|
+
setup_skill="$plugin_root/skills/setup-freeflow/SKILL.md"
|
|
8
|
+
host_setup="$plugin_root/skills/setup-freeflow/references/host-setup.md"
|
|
9
|
+
runtime_doc="$repo_root/docs/freeflow-runtime-and-lifecycle.md"
|
|
10
|
+
registry="$plugin_root/evals/registries/fixture-evals.json"
|
|
11
|
+
|
|
12
|
+
failures=0
|
|
13
|
+
|
|
14
|
+
fail() {
|
|
15
|
+
printf 'FAIL: %s\n' "$1" >&2
|
|
16
|
+
failures=$((failures + 1))
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
extract_marked_block() {
|
|
20
|
+
local name="$1"
|
|
21
|
+
awk \
|
|
22
|
+
-v start="<!-- freeflow-activation-contract:${name}:start -->" \
|
|
23
|
+
-v end="<!-- freeflow-activation-contract:${name}:end -->" '
|
|
24
|
+
$0 == start { inside = 1; in_fence = 0; next }
|
|
25
|
+
$0 == end { exit }
|
|
26
|
+
inside && $0 == "```md" { in_fence = 1; next }
|
|
27
|
+
inside && $0 == "```" { in_fence = 0; next }
|
|
28
|
+
inside && in_fence { print }
|
|
29
|
+
' "$contract"
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
contains_exact() {
|
|
33
|
+
local file="$1"
|
|
34
|
+
local needle="$2"
|
|
35
|
+
NEEDLE="$needle" perl -e '
|
|
36
|
+
my $file = shift;
|
|
37
|
+
open my $fh, "<", $file or die "$file: $!";
|
|
38
|
+
local $/;
|
|
39
|
+
my $body = <$fh>;
|
|
40
|
+
exit(index($body, $ENV{NEEDLE}) >= 0 ? 0 : 1);
|
|
41
|
+
' "$file"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
count_exact() {
|
|
45
|
+
local file="$1"
|
|
46
|
+
local needle="$2"
|
|
47
|
+
NEEDLE="$needle" perl -e '
|
|
48
|
+
my $file = shift;
|
|
49
|
+
open my $fh, "<", $file or die "$file: $!";
|
|
50
|
+
local $/;
|
|
51
|
+
my $body = <$fh>;
|
|
52
|
+
$count = 0;
|
|
53
|
+
$offset = 0;
|
|
54
|
+
while (($pos = index($body, $ENV{NEEDLE}, $offset)) >= 0) {
|
|
55
|
+
$count += 1;
|
|
56
|
+
$offset = $pos + length($ENV{NEEDLE});
|
|
57
|
+
}
|
|
58
|
+
print "$count\n";
|
|
59
|
+
' "$file"
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
codex_core="$(extract_marked_block codex-core)"
|
|
63
|
+
claude_import="$(extract_marked_block claude-import)"
|
|
64
|
+
|
|
65
|
+
[ -n "$codex_core" ] || fail "Codex core block marker is empty."
|
|
66
|
+
[ -n "$claude_import" ] || fail "Claude import block marker is empty."
|
|
67
|
+
|
|
68
|
+
for file in "$setup_skill" "$host_setup" "$runtime_doc"; do
|
|
69
|
+
contains_exact "$file" "activation-contract.md" || fail "$file does not reference activation-contract.md"
|
|
70
|
+
done
|
|
71
|
+
|
|
72
|
+
contains_exact "$setup_skill" "../mode-contract/SKILL.md" || fail "$setup_skill must load the mode-contract skill after successful setup verification."
|
|
73
|
+
contains_exact "$setup_skill" "../workflow/SKILL.md" || fail "$setup_skill must load the workflow skill after successful setup verification."
|
|
74
|
+
contains_exact "$setup_skill" "../interview-gate/SKILL.md" || fail "$setup_skill must load the interview-gate skill after successful setup verification."
|
|
75
|
+
contains_exact "$setup_skill" "../discover/SKILL.md" || fail "$setup_skill must load the discover skill after successful setup verification."
|
|
76
|
+
contains_exact "$setup_skill" "../output-router/SKILL.md" || fail "$setup_skill must load the output-router skill after successful setup verification."
|
|
77
|
+
contains_exact "$host_setup" "After successful setup verification" || fail "$host_setup must document same-session runtime loading."
|
|
78
|
+
contains_exact "$host_setup" "interview-gate" || fail "$host_setup must document same-session interview-gate loading."
|
|
79
|
+
contains_exact "$runtime_doc" "skills/interview-gate/SKILL.md" || fail "$runtime_doc must document runtime interview-gate loading."
|
|
80
|
+
contains_exact "$runtime_doc" "skills/mode-contract/SKILL.md" || fail "$runtime_doc must document runtime mode-contract loading."
|
|
81
|
+
|
|
82
|
+
for file in "$setup_skill" "$host_setup" "$runtime_doc"; do
|
|
83
|
+
if contains_exact "$file" "$codex_core"; then
|
|
84
|
+
fail "$file embeds the Codex core block instead of referencing the contract"
|
|
85
|
+
fi
|
|
86
|
+
done
|
|
87
|
+
|
|
88
|
+
while IFS= read -r fixture_file; do
|
|
89
|
+
count="$(count_exact "$fixture_file" "$codex_core")"
|
|
90
|
+
if [ "$count" != "1" ]; then
|
|
91
|
+
fail "$fixture_file should contain the canonical Codex core block exactly once; got $count"
|
|
92
|
+
fi
|
|
93
|
+
done < <(find "$plugin_root/evals/fixtures" -path '*/tiny-post-setup-*' -name AGENTS.md -type f | sort)
|
|
94
|
+
|
|
95
|
+
jq empty "$registry"
|
|
96
|
+
|
|
97
|
+
jq -e '
|
|
98
|
+
[.evals[] | select(.id == "STP-009")] | length == 1
|
|
99
|
+
' "$registry" >/dev/null || fail "STP-009 must exist exactly once."
|
|
100
|
+
|
|
101
|
+
jq -e '
|
|
102
|
+
.evals[]
|
|
103
|
+
| select(.id == "STP-009")
|
|
104
|
+
| any(.assertions[]; test("canonical activation contract"))
|
|
105
|
+
' "$registry" >/dev/null || fail "STP-009 must assert the canonical activation contract."
|
|
106
|
+
|
|
107
|
+
jq -e '
|
|
108
|
+
[.evals[] | select(.id == "STP-010")] | length == 1
|
|
109
|
+
' "$registry" >/dev/null || fail "STP-010 must exist exactly once."
|
|
110
|
+
|
|
111
|
+
jq -e '
|
|
112
|
+
.evals[]
|
|
113
|
+
| select(.id == "STP-010")
|
|
114
|
+
| any(.assertions[]; test("mode-contract, workflow, interview-gate, discover, and output-router context is loaded"))
|
|
115
|
+
' "$registry" >/dev/null || fail "STP-010 must assert same-session mode-contract, workflow, interview-gate, discover, and output-router loading."
|
|
116
|
+
|
|
117
|
+
if [ "$failures" -gt 0 ]; then
|
|
118
|
+
exit 1
|
|
119
|
+
fi
|
|
120
|
+
|
|
121
|
+
printf 'Activation contract check passed: canonical blocks, docs references, post-setup fixtures, and STP-009/STP-010 assertions are aligned.\n'
|