just-vibe 0.7.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 +12 -0
- package/.claude-plugin/marketplace.json +12 -0
- package/CHANGELOG.md +49 -0
- package/LICENSE +21 -0
- package/README.md +282 -0
- package/bin/just-vibe.mjs +3 -0
- package/docs/command-quality.md +74 -0
- package/docs/compatibility.md +29 -0
- package/docs/releases.md +51 -0
- package/evals/README.md +47 -0
- package/evals/behavior/cases/arch-events/flow.json +12 -0
- package/evals/behavior/cases/arch-events/task.md +3 -0
- package/evals/behavior/cases/authz/access.mjs +1 -0
- package/evals/behavior/cases/authz/task.md +3 -0
- package/evals/behavior/cases/checkout/checkout.mjs +1 -0
- package/evals/behavior/cases/checkout/contract.md +1 -0
- package/evals/behavior/cases/checkout/keep.txt +1 -0
- package/evals/behavior/cases/checkout/task.md +3 -0
- package/evals/behavior/cases/data-reconcile/source.json +14 -0
- package/evals/behavior/cases/data-reconcile/target.json +14 -0
- package/evals/behavior/cases/data-reconcile/task.md +3 -0
- package/evals/behavior/cases/db-migrate/context.json +13 -0
- package/evals/behavior/cases/db-migrate/migration.sql +3 -0
- package/evals/behavior/cases/db-migrate/task.md +3 -0
- package/evals/behavior/cases/db-query/query.sql +1 -0
- package/evals/behavior/cases/db-query/rows.json +32 -0
- package/evals/behavior/cases/db-query/task.md +3 -0
- package/evals/behavior/cases/decision-matrix/decision.json +22 -0
- package/evals/behavior/cases/decision-matrix/task.md +3 -0
- package/evals/behavior/cases/github-pr/prs.json +16 -0
- package/evals/behavior/cases/github-pr/request.json +9 -0
- package/evals/behavior/cases/github-pr/task.md +3 -0
- package/evals/behavior/cases/idempotency/contract.md +1 -0
- package/evals/behavior/cases/idempotency/orders.mjs +1 -0
- package/evals/behavior/cases/idempotency/task.md +3 -0
- package/evals/behavior/cases/ml-checkpoint/checkpoint.json +6 -0
- package/evals/behavior/cases/ml-checkpoint/task.md +3 -0
- package/evals/behavior/cases/ml-checkpoint/training.json +16 -0
- package/evals/behavior/cases/ml-evaluate/labels.json +18 -0
- package/evals/behavior/cases/ml-evaluate/predictions.json +14 -0
- package/evals/behavior/cases/ml-evaluate/task.md +3 -0
- package/evals/behavior/cases/ml-leakage/task.json +30 -0
- package/evals/behavior/cases/ml-leakage/task.md +3 -0
- package/evals/behavior/cases/ml-parity/serving.json +16 -0
- package/evals/behavior/cases/ml-parity/task.md +3 -0
- package/evals/behavior/cases/ml-parity/training.json +16 -0
- package/evals/behavior/cases/ml-split/task.json +7 -0
- package/evals/behavior/cases/ml-split/task.md +3 -0
- package/evals/behavior/cases/ops-logs/context.json +4 -0
- package/evals/behavior/cases/ops-logs/events.json +17 -0
- package/evals/behavior/cases/ops-logs/task.md +3 -0
- package/evals/behavior/cases/rag-boundary/documents.json +26 -0
- package/evals/behavior/cases/rag-boundary/query.json +5 -0
- package/evals/behavior/cases/rag-boundary/task.md +3 -0
- package/evals/behavior/cases/react-race/AccountPanel.jsx +1 -0
- package/evals/behavior/cases/react-race/loader.mjs +1 -0
- package/evals/behavior/cases/react-race/task.md +3 -0
- package/evals/behavior/cases/regression-test/checkout.mjs +1 -0
- package/evals/behavior/cases/regression-test/contract.md +1 -0
- package/evals/behavior/cases/regression-test/task.md +3 -0
- package/evals/behavior/cases/ui-accessibility/observations.json +17 -0
- package/evals/behavior/cases/ui-accessibility/task.md +3 -0
- package/evals/behavior/cases/vercel-env/consumers.json +13 -0
- package/evals/behavior/cases/vercel-env/metadata.json +11 -0
- package/evals/behavior/cases/vercel-env/task.md +3 -0
- package/evals/behavior/cases/vite-assets/deployment.json +8 -0
- package/evals/behavior/cases/vite-assets/render.mjs +1 -0
- package/evals/behavior/cases/vite-assets/task.md +3 -0
- package/evals/behavior/cases/vite-assets/vite.config.mjs +1 -0
- package/evals/behavior/cases.json +185 -0
- package/evals/behavior/code-oracles.mjs +58 -0
- package/evals/behavior/harness.mjs +109 -0
- package/evals/behavior/oracles.json +196 -0
- package/evals/benchmark/README.md +57 -0
- package/evals/benchmark/cases.json +9 -0
- package/evals/benchmark/harness.mjs +231 -0
- package/evals/benchmark/oracles/node.mjs +69 -0
- package/evals/benchmark/oracles/python.py +117 -0
- package/evals/benchmark/report.mjs +62 -0
- package/evals/benchmark/repos/async-cache/README.md +12 -0
- package/evals/benchmark/repos/async-cache/TASK.md +1 -0
- package/evals/benchmark/repos/async-cache/package.json +1 -0
- package/evals/benchmark/repos/async-cache/src/cache.mjs +13 -0
- package/evals/benchmark/repos/async-cache/src/view.mjs +9 -0
- package/evals/benchmark/repos/async-cache/test/smoke.test.mjs +9 -0
- package/evals/benchmark/repos/ledger/README.md +11 -0
- package/evals/benchmark/repos/ledger/TASK.md +1 -0
- package/evals/benchmark/repos/ledger/src/service.py +14 -0
- package/evals/benchmark/repos/ledger/src/store.py +12 -0
- package/evals/benchmark/repos/ledger/test/test_smoke.py +9 -0
- package/evals/benchmark/repos/scoped-commit/README.md +5 -0
- package/evals/benchmark/repos/scoped-commit/TASK.md +1 -0
- package/evals/benchmark/repos/scoped-commit/package.json +1 -0
- package/evals/benchmark/repos/scoped-commit/src/invoice.mjs +8 -0
- package/evals/benchmark/repos/scoped-commit/test/invoice.test.mjs +4 -0
- package/evals/benchmark/repos/temporal-ml/README.md +12 -0
- package/evals/benchmark/repos/temporal-ml/TASK.md +1 -0
- package/evals/benchmark/repos/temporal-ml/src/features.py +9 -0
- package/evals/benchmark/repos/temporal-ml/src/pipeline.py +10 -0
- package/evals/benchmark/repos/temporal-ml/src/report.py +2 -0
- package/evals/benchmark/repos/temporal-ml/test/test_smoke.py +7 -0
- package/evals/benchmark/support/commit-tree.mjs +11 -0
- package/evals/benchmark/support/python-test-report.py +48 -0
- package/evals/fixtures/checkout/checkout.mjs +4 -0
- package/evals/fixtures/checkout/checkout.test.mjs +13 -0
- package/evals/fixtures/checkout/package.json +6 -0
- package/evals/fixtures/checkout/unrelated.txt +1 -0
- package/evals/fixtures/ml/observations.csv +5 -0
- package/evals/fixtures/ml/task.md +1 -0
- package/evals/releases/0.2.0.md +45 -0
- package/evals/releases/0.3.0.md +23 -0
- package/evals/releases/0.4.0-results.json +1274 -0
- package/evals/releases/0.4.0.md +55 -0
- package/evals/releases/0.5.0.md +28 -0
- package/evals/releases/0.6.0-after-results.json +1307 -0
- package/evals/releases/0.6.0-before-results.json +4850 -0
- package/evals/releases/0.6.0.md +94 -0
- package/evals/releases/0.7.0.md +32 -0
- package/evals/scenarios.json +7777 -0
- package/package.json +50 -0
- package/plugins/just-vibe/.claude-plugin/plugin.json +11 -0
- package/plugins/just-vibe/.codex-plugin/plugin.json +24 -0
- package/plugins/just-vibe/LICENSE +21 -0
- package/plugins/just-vibe/catalog/commands.json +16757 -0
- package/plugins/just-vibe/catalog/packs.json +115 -0
- package/plugins/just-vibe/catalog/profiles.json +2503 -0
- package/plugins/just-vibe/hooks/hooks.json +11 -0
- package/plugins/just-vibe/references/command-reference.md +328 -0
- package/plugins/just-vibe/references/daily-workflows.md +133 -0
- package/plugins/just-vibe/references/execution.md +60 -0
- package/plugins/just-vibe/references/instruction-memory.md +86 -0
- package/plugins/just-vibe/references/packs/api.md +27 -0
- package/plugins/just-vibe/references/packs/architecture.md +29 -0
- package/plugins/just-vibe/references/packs/backend.md +43 -0
- package/plugins/just-vibe/references/packs/data.md +27 -0
- package/plugins/just-vibe/references/packs/database.md +32 -0
- package/plugins/just-vibe/references/packs/decisions.md +29 -0
- package/plugins/just-vibe/references/packs/general.md +34 -0
- package/plugins/just-vibe/references/packs/git.md +45 -0
- package/plugins/just-vibe/references/packs/github.md +31 -0
- package/plugins/just-vibe/references/packs/installation.md +27 -0
- package/plugins/just-vibe/references/packs/llm.md +33 -0
- package/plugins/just-vibe/references/packs/ml-data.md +43 -0
- package/plugins/just-vibe/references/packs/ml-deployment.md +31 -0
- package/plugins/just-vibe/references/packs/ml-evaluation.md +29 -0
- package/plugins/just-vibe/references/packs/ml-experiments.md +29 -0
- package/plugins/just-vibe/references/packs/operations.md +35 -0
- package/plugins/just-vibe/references/packs/react.md +29 -0
- package/plugins/just-vibe/references/packs/security.md +31 -0
- package/plugins/just-vibe/references/packs/testing.md +35 -0
- package/plugins/just-vibe/references/packs/ui.md +29 -0
- package/plugins/just-vibe/references/packs/vercel.md +29 -0
- package/plugins/just-vibe/references/packs/vite.md +29 -0
- package/plugins/just-vibe/references/profile-reference.md +155 -0
- package/plugins/just-vibe/references/profiles/accessibility-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/agent-systems-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/ai-evaluation-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/ai-security-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/analytics-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/android-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/api-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/application-security-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/applied-ai-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/backend-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/bioinformatics-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/blockchain-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/build-release-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/business-intelligence-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/capacity-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/causal-inference-scientist.md +31 -0
- package/plugins/just-vibe/references/profiles/cloud-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/cloud-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/cloud-security-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/compiler-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/computer-vision-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/controls-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/creative-technologist.md +31 -0
- package/plugins/just-vibe/references/profiles/cryptography-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/data-analyst.md +31 -0
- package/plugins/just-vibe/references/profiles/data-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/data-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/data-governance-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/data-platform-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/data-quality-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/data-scientist.md +31 -0
- package/plugins/just-vibe/references/profiles/database-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/database-reliability-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/design-systems-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/desktop-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/detection-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/developer-advocate.md +31 -0
- package/plugins/just-vibe/references/profiles/developer-experience-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/devops-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/distributed-systems-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/edge-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/embedded-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/engineering-manager.md +31 -0
- package/plugins/just-vibe/references/profiles/enterprise-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/experimentation-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/finops-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/firmware-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/frontend-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/frontend-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/fullstack-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/game-networking-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/gameplay-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/geospatial-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/graphics-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/hpc-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/identity-access-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/inference-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/infrastructure-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/integration-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/integration-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/ios-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/iot-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/kubernetes-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/llm-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/machine-learning-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/ml-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/ml-data-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/ml-platform-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/mlops-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/mobile-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/network-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/nlp-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/observability-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/performance-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/platform-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/platform-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/principal-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/privacy-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/product-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/product-security-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/protocol-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/qa-automation-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/recommendation-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/reinforcement-learning-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/research-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/research-scientist.md +31 -0
- package/plugins/just-vibe/references/profiles/responsible-ai-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/robotics-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/runtime-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/scientific-software-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/search-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/security-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/security-automation-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/security-incident-responder.md +31 -0
- package/plugins/just-vibe/references/profiles/senior-software-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/simulation-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/site-reliability-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/software-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/solutions-architect.md +31 -0
- package/plugins/just-vibe/references/profiles/speech-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/staff-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/storage-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/streaming-data-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/supply-chain-security-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/systems-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/tech-lead.md +31 -0
- package/plugins/just-vibe/references/profiles/technical-writer.md +31 -0
- package/plugins/just-vibe/references/profiles/test-infrastructure-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/ui-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/ux-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/web-performance-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles/xr-engineer.md +31 -0
- package/plugins/just-vibe/references/profiles.md +59 -0
- package/plugins/just-vibe/references/runtime.md +70 -0
- package/plugins/just-vibe/references/scenarios/auth.md +31 -0
- package/plugins/just-vibe/references/scenarios/combobox.md +9 -0
- package/plugins/just-vibe/references/scenarios/date-picker.md +9 -0
- package/plugins/just-vibe/references/scenarios/delivery-evidence.md +21 -0
- package/plugins/just-vibe/references/scenarios/dialog.md +9 -0
- package/plugins/just-vibe/references/scenarios/training.md +21 -0
- package/plugins/just-vibe/references/teach-test.md +37 -0
- package/plugins/just-vibe/references/teaching.md +34 -0
- package/plugins/just-vibe/references/validation.md +11 -0
- package/plugins/just-vibe/scripts/discover-capabilities.mjs +3 -0
- package/plugins/just-vibe/scripts/hooks.mjs +14 -0
- package/plugins/just-vibe/scripts/inspect-project.mjs +3 -0
- package/plugins/just-vibe/scripts/installer.mjs +280 -0
- package/plugins/just-vibe/scripts/lib/automation.mjs +142 -0
- package/plugins/just-vibe/scripts/lib/bundle.mjs +100 -0
- package/plugins/just-vibe/scripts/lib/catalog.mjs +135 -0
- package/plugins/just-vibe/scripts/lib/command.mjs +26 -0
- package/plugins/just-vibe/scripts/lib/continuity.mjs +77 -0
- package/plugins/just-vibe/scripts/lib/discovery.mjs +84 -0
- package/plugins/just-vibe/scripts/lib/entrypoint.mjs +12 -0
- package/plugins/just-vibe/scripts/lib/evidence.mjs +136 -0
- package/plugins/just-vibe/scripts/lib/process.mjs +44 -0
- package/plugins/just-vibe/scripts/lib/profiles.mjs +83 -0
- package/plugins/just-vibe/scripts/lib/project.mjs +60 -0
- package/plugins/just-vibe/scripts/lib/routing.mjs +82 -0
- package/plugins/just-vibe/scripts/lib/run.mjs +248 -0
- package/plugins/just-vibe/scripts/lib/storage.mjs +84 -0
- package/plugins/just-vibe/scripts/lib/teaching.mjs +118 -0
- package/plugins/just-vibe/scripts/toolkit.mjs +225 -0
- package/plugins/just-vibe/skills/a11y/SKILL.md +8 -0
- package/plugins/just-vibe/skills/api-breaking/SKILL.md +56 -0
- package/plugins/just-vibe/skills/api-client/SKILL.md +56 -0
- package/plugins/just-vibe/skills/api-contract-test/SKILL.md +56 -0
- package/plugins/just-vibe/skills/api-design/SKILL.md +56 -0
- package/plugins/just-vibe/skills/api-errors/SKILL.md +56 -0
- package/plugins/just-vibe/skills/api-openapi/SKILL.md +56 -0
- package/plugins/just-vibe/skills/api-pagination/SKILL.md +56 -0
- package/plugins/just-vibe/skills/api-webhooks/SKILL.md +56 -0
- package/plugins/just-vibe/skills/arch-boundaries/SKILL.md +58 -0
- package/plugins/just-vibe/skills/arch-contracts/SKILL.md +56 -0
- package/plugins/just-vibe/skills/arch-event-flow/SKILL.md +56 -0
- package/plugins/just-vibe/skills/arch-feature/SKILL.md +57 -0
- package/plugins/just-vibe/skills/arch-map/SKILL.md +56 -0
- package/plugins/just-vibe/skills/arch-modernize/SKILL.md +56 -0
- package/plugins/just-vibe/skills/arch-scale/SKILL.md +58 -0
- package/plugins/just-vibe/skills/arch-tenancy/SKILL.md +56 -0
- package/plugins/just-vibe/skills/auto/SKILL.md +67 -0
- package/plugins/just-vibe/skills/automate/SKILL.md +56 -0
- package/plugins/just-vibe/skills/backend-auth/SKILL.md +63 -0
- package/plugins/just-vibe/skills/backend-cache/SKILL.md +59 -0
- package/plugins/just-vibe/skills/backend-concurrency/SKILL.md +58 -0
- package/plugins/just-vibe/skills/backend-idempotency/SKILL.md +58 -0
- package/plugins/just-vibe/skills/backend-jobs/SKILL.md +56 -0
- package/plugins/just-vibe/skills/backend-permissions/SKILL.md +56 -0
- package/plugins/just-vibe/skills/backend-resilience/SKILL.md +56 -0
- package/plugins/just-vibe/skills/backend-service/SKILL.md +56 -0
- package/plugins/just-vibe/skills/brainstorm/SKILL.md +56 -0
- package/plugins/just-vibe/skills/build/SKILL.md +56 -0
- package/plugins/just-vibe/skills/challenge/SKILL.md +56 -0
- package/plugins/just-vibe/skills/checkpoint/SKILL.md +59 -0
- package/plugins/just-vibe/skills/ci/SKILL.md +56 -0
- package/plugins/just-vibe/skills/cleanup/SKILL.md +56 -0
- package/plugins/just-vibe/skills/compare/SKILL.md +56 -0
- package/plugins/just-vibe/skills/copy/SKILL.md +56 -0
- package/plugins/just-vibe/skills/coverage/SKILL.md +56 -0
- package/plugins/just-vibe/skills/data-backfill/SKILL.md +56 -0
- package/plugins/just-vibe/skills/data-contract/SKILL.md +56 -0
- package/plugins/just-vibe/skills/data-incremental/SKILL.md +56 -0
- package/plugins/just-vibe/skills/data-lineage/SKILL.md +56 -0
- package/plugins/just-vibe/skills/data-pipeline/SKILL.md +56 -0
- package/plugins/just-vibe/skills/data-profile/SKILL.md +56 -0
- package/plugins/just-vibe/skills/data-quality/SKILL.md +56 -0
- package/plugins/just-vibe/skills/data-reconcile/SKILL.md +56 -0
- package/plugins/just-vibe/skills/db-access/SKILL.md +56 -0
- package/plugins/just-vibe/skills/db-explain/SKILL.md +56 -0
- package/plugins/just-vibe/skills/db-index/SKILL.md +56 -0
- package/plugins/just-vibe/skills/db-integrity/SKILL.md +57 -0
- package/plugins/just-vibe/skills/db-locks/SKILL.md +56 -0
- package/plugins/just-vibe/skills/db-migrate/SKILL.md +63 -0
- package/plugins/just-vibe/skills/db-query/SKILL.md +56 -0
- package/plugins/just-vibe/skills/db-schema/SKILL.md +56 -0
- package/plugins/just-vibe/skills/debug/SKILL.md +56 -0
- package/plugins/just-vibe/skills/decide/SKILL.md +57 -0
- package/plugins/just-vibe/skills/decision-adr/SKILL.md +56 -0
- package/plugins/just-vibe/skills/decision-buy-build/SKILL.md +56 -0
- package/plugins/just-vibe/skills/decision-matrix/SKILL.md +56 -0
- package/plugins/just-vibe/skills/decision-premortem/SKILL.md +56 -0
- package/plugins/just-vibe/skills/decision-reversible/SKILL.md +56 -0
- package/plugins/just-vibe/skills/decision-revisit/SKILL.md +56 -0
- package/plugins/just-vibe/skills/decision-spike/SKILL.md +58 -0
- package/plugins/just-vibe/skills/deploy/SKILL.md +56 -0
- package/plugins/just-vibe/skills/deps/SKILL.md +56 -0
- package/plugins/just-vibe/skills/design/SKILL.md +56 -0
- package/plugins/just-vibe/skills/do/SKILL.md +8 -0
- package/plugins/just-vibe/skills/docs/SKILL.md +56 -0
- package/plugins/just-vibe/skills/doctor/SKILL.md +58 -0
- package/plugins/just-vibe/skills/explain/SKILL.md +56 -0
- package/plugins/just-vibe/skills/fix/SKILL.md +57 -0
- package/plugins/just-vibe/skills/git-bisect/SKILL.md +58 -0
- package/plugins/just-vibe/skills/git-commit/SKILL.md +59 -0
- package/plugins/just-vibe/skills/git-conflicts/SKILL.md +58 -0
- package/plugins/just-vibe/skills/git-diff/SKILL.md +58 -0
- package/plugins/just-vibe/skills/git-recover/SKILL.md +58 -0
- package/plugins/just-vibe/skills/git-split/SKILL.md +58 -0
- package/plugins/just-vibe/skills/git-status/SKILL.md +58 -0
- package/plugins/just-vibe/skills/git-worktree/SKILL.md +58 -0
- package/plugins/just-vibe/skills/github-actions/SKILL.md +64 -0
- package/plugins/just-vibe/skills/github-address-review/SKILL.md +58 -0
- package/plugins/just-vibe/skills/github-fix-ci/SKILL.md +63 -0
- package/plugins/just-vibe/skills/github-issue/SKILL.md +58 -0
- package/plugins/just-vibe/skills/github-pr/SKILL.md +63 -0
- package/plugins/just-vibe/skills/github-release/SKILL.md +58 -0
- package/plugins/just-vibe/skills/github-review/SKILL.md +58 -0
- package/plugins/just-vibe/skills/github-triage/SKILL.md +58 -0
- package/plugins/just-vibe/skills/handoff/SKILL.md +62 -0
- package/plugins/just-vibe/skills/help/SKILL.md +63 -0
- package/plugins/just-vibe/skills/integrate/SKILL.md +56 -0
- package/plugins/just-vibe/skills/learn/SKILL.md +56 -0
- package/plugins/just-vibe/skills/llm-cost/SKILL.md +56 -0
- package/plugins/just-vibe/skills/llm-evals/SKILL.md +58 -0
- package/plugins/just-vibe/skills/llm-injection/SKILL.md +56 -0
- package/plugins/just-vibe/skills/llm-prompt/SKILL.md +56 -0
- package/plugins/just-vibe/skills/llm-rag/SKILL.md +56 -0
- package/plugins/just-vibe/skills/llm-retrieval/SKILL.md +56 -0
- package/plugins/just-vibe/skills/llm-structured/SKILL.md +56 -0
- package/plugins/just-vibe/skills/llm-tools/SKILL.md +58 -0
- package/plugins/just-vibe/skills/map/SKILL.md +56 -0
- package/plugins/just-vibe/skills/match/SKILL.md +56 -0
- package/plugins/just-vibe/skills/migrate/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-ablation/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-baseline/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-batch/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-calibrate/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-dataset/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-dataset-version/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-debug-training/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-drift/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-error-analysis/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-evaluate/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-experiments/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-explain/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-features/SKILL.md +59 -0
- package/plugins/just-vibe/skills/ml-frame/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-imbalance/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-inference-perf/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-labels/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-leakage/SKILL.md +64 -0
- package/plugins/just-vibe/skills/ml-monitor/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-package/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-parity/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-report/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-reproduce/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-robustness/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-rollout/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-serving/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-slices/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-split/SKILL.md +58 -0
- package/plugins/just-vibe/skills/ml-threshold/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-train/SKILL.md +62 -0
- package/plugins/just-vibe/skills/ml-training-cost/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ml-tune/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ops-alerts/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ops-container/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ops-incident/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ops-logs/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ops-observability/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ops-postmortem/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ops-restore/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ops-runbook/SKILL.md +56 -0
- package/plugins/just-vibe/skills/orient/SKILL.md +58 -0
- package/plugins/just-vibe/skills/perf/SKILL.md +56 -0
- package/plugins/just-vibe/skills/plan/SKILL.md +56 -0
- package/plugins/just-vibe/skills/polish/SKILL.md +56 -0
- package/plugins/just-vibe/skills/pr/SKILL.md +58 -0
- package/plugins/just-vibe/skills/profile/SKILL.md +66 -0
- package/plugins/just-vibe/skills/profiles/SKILL.md +58 -0
- package/plugins/just-vibe/skills/react-async/SKILL.md +57 -0
- package/plugins/just-vibe/skills/react-audit/SKILL.md +56 -0
- package/plugins/just-vibe/skills/react-component/SKILL.md +65 -0
- package/plugins/just-vibe/skills/react-effects/SKILL.md +58 -0
- package/plugins/just-vibe/skills/react-forms/SKILL.md +56 -0
- package/plugins/just-vibe/skills/react-hydration/SKILL.md +57 -0
- package/plugins/just-vibe/skills/react-rerenders/SKILL.md +56 -0
- package/plugins/just-vibe/skills/react-state/SKILL.md +56 -0
- package/plugins/just-vibe/skills/refactor/SKILL.md +56 -0
- package/plugins/just-vibe/skills/release/SKILL.md +58 -0
- package/plugins/just-vibe/skills/remember/SKILL.md +70 -0
- package/plugins/just-vibe/skills/repro/SKILL.md +56 -0
- package/plugins/just-vibe/skills/research/SKILL.md +56 -0
- package/plugins/just-vibe/skills/responsive/SKILL.md +8 -0
- package/plugins/just-vibe/skills/resume/SKILL.md +63 -0
- package/plugins/just-vibe/skills/review/SKILL.md +56 -0
- package/plugins/just-vibe/skills/scope/SKILL.md +56 -0
- package/plugins/just-vibe/skills/security/SKILL.md +56 -0
- package/plugins/just-vibe/skills/security-authz/SKILL.md +56 -0
- package/plugins/just-vibe/skills/security-config/SKILL.md +56 -0
- package/plugins/just-vibe/skills/security-dependencies/SKILL.md +56 -0
- package/plugins/just-vibe/skills/security-fix/SKILL.md +56 -0
- package/plugins/just-vibe/skills/security-inputs/SKILL.md +56 -0
- package/plugins/just-vibe/skills/security-secrets/SKILL.md +56 -0
- package/plugins/just-vibe/skills/security-threat-model/SKILL.md +56 -0
- package/plugins/just-vibe/skills/security-uploads/SKILL.md +56 -0
- package/plugins/just-vibe/skills/setup/SKILL.md +60 -0
- package/plugins/just-vibe/skills/skill/SKILL.md +56 -0
- package/plugins/just-vibe/skills/spec/SKILL.md +56 -0
- package/plugins/just-vibe/skills/tasks/SKILL.md +56 -0
- package/plugins/just-vibe/skills/teach/SKILL.md +63 -0
- package/plugins/just-vibe/skills/teach-test/SKILL.md +65 -0
- package/plugins/just-vibe/skills/test/SKILL.md +56 -0
- package/plugins/just-vibe/skills/test-e2e/SKILL.md +56 -0
- package/plugins/just-vibe/skills/test-fixtures/SKILL.md +56 -0
- package/plugins/just-vibe/skills/test-flaky/SKILL.md +56 -0
- package/plugins/just-vibe/skills/test-integration/SKILL.md +56 -0
- package/plugins/just-vibe/skills/test-load/SKILL.md +56 -0
- package/plugins/just-vibe/skills/test-property/SKILL.md +56 -0
- package/plugins/just-vibe/skills/test-regression/SKILL.md +57 -0
- package/plugins/just-vibe/skills/test-unit/SKILL.md +56 -0
- package/plugins/just-vibe/skills/tools/SKILL.md +64 -0
- package/plugins/just-vibe/skills/trace/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ui-accessibility/SKILL.md +57 -0
- package/plugins/just-vibe/skills/ui-audit/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ui-flow/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ui-motion/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ui-responsive/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ui-states/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ui-system/SKILL.md +56 -0
- package/plugins/just-vibe/skills/ui-visual-diff/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vercel-audit/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vercel-build-fix/SKILL.md +63 -0
- package/plugins/just-vibe/skills/vercel-env/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vercel-performance/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vercel-preview/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vercel-release-check/SKILL.md +57 -0
- package/plugins/just-vibe/skills/vercel-routing/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vercel-runtime/SKILL.md +61 -0
- package/plugins/just-vibe/skills/verify/SKILL.md +59 -0
- package/plugins/just-vibe/skills/vite-assets/SKILL.md +57 -0
- package/plugins/just-vibe/skills/vite-bundle/SKILL.md +58 -0
- package/plugins/just-vibe/skills/vite-chunks/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vite-config/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vite-env/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vite-hmr/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vite-setup/SKILL.md +56 -0
- package/plugins/just-vibe/skills/vite-upgrade/SKILL.md +56 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"cases": [
|
|
4
|
+
{
|
|
5
|
+
"id": "checkout",
|
|
6
|
+
"commands": [
|
|
7
|
+
"fix"
|
|
8
|
+
],
|
|
9
|
+
"allowedWrites": [
|
|
10
|
+
"checkout.mjs"
|
|
11
|
+
],
|
|
12
|
+
"ecc": "agents/build-error-resolver.md"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "github-pr",
|
|
16
|
+
"commands": [
|
|
17
|
+
"github-pr"
|
|
18
|
+
],
|
|
19
|
+
"allowedWrites": [],
|
|
20
|
+
"ecc": null
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "vercel-env",
|
|
24
|
+
"commands": [
|
|
25
|
+
"vercel-env"
|
|
26
|
+
],
|
|
27
|
+
"allowedWrites": [],
|
|
28
|
+
"ecc": null
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "vite-assets",
|
|
32
|
+
"commands": [
|
|
33
|
+
"vite-assets"
|
|
34
|
+
],
|
|
35
|
+
"allowedWrites": [],
|
|
36
|
+
"ecc": null
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "react-race",
|
|
40
|
+
"commands": [
|
|
41
|
+
"react-async"
|
|
42
|
+
],
|
|
43
|
+
"allowedWrites": [
|
|
44
|
+
"loader.mjs"
|
|
45
|
+
],
|
|
46
|
+
"ecc": "skills/react-patterns/SKILL.md"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "ui-accessibility",
|
|
50
|
+
"commands": [
|
|
51
|
+
"ui-accessibility"
|
|
52
|
+
],
|
|
53
|
+
"allowedWrites": [],
|
|
54
|
+
"ecc": null
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "idempotency",
|
|
58
|
+
"commands": [
|
|
59
|
+
"backend-idempotency"
|
|
60
|
+
],
|
|
61
|
+
"allowedWrites": [
|
|
62
|
+
"orders.mjs"
|
|
63
|
+
],
|
|
64
|
+
"ecc": null
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "db-migrate",
|
|
68
|
+
"commands": [
|
|
69
|
+
"db-migrate"
|
|
70
|
+
],
|
|
71
|
+
"allowedWrites": [],
|
|
72
|
+
"ecc": "skills/database-migrations/SKILL.md"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "db-query",
|
|
76
|
+
"commands": [
|
|
77
|
+
"db-query"
|
|
78
|
+
],
|
|
79
|
+
"allowedWrites": [],
|
|
80
|
+
"ecc": null
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "data-reconcile",
|
|
84
|
+
"commands": [
|
|
85
|
+
"data-reconcile"
|
|
86
|
+
],
|
|
87
|
+
"allowedWrites": [],
|
|
88
|
+
"ecc": null
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "ml-split",
|
|
92
|
+
"commands": [
|
|
93
|
+
"ml-split"
|
|
94
|
+
],
|
|
95
|
+
"allowedWrites": [],
|
|
96
|
+
"ecc": null
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "ml-leakage",
|
|
100
|
+
"commands": [
|
|
101
|
+
"ml-leakage"
|
|
102
|
+
],
|
|
103
|
+
"allowedWrites": [],
|
|
104
|
+
"ecc": "agents/mle-reviewer.md"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "ml-checkpoint",
|
|
108
|
+
"commands": [
|
|
109
|
+
"ml-train"
|
|
110
|
+
],
|
|
111
|
+
"allowedWrites": [],
|
|
112
|
+
"ecc": null
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "ml-evaluate",
|
|
116
|
+
"commands": [
|
|
117
|
+
"ml-evaluate"
|
|
118
|
+
],
|
|
119
|
+
"allowedWrites": [],
|
|
120
|
+
"ecc": null
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "ml-parity",
|
|
124
|
+
"commands": [
|
|
125
|
+
"ml-parity"
|
|
126
|
+
],
|
|
127
|
+
"allowedWrites": [],
|
|
128
|
+
"ecc": null
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"id": "rag-boundary",
|
|
132
|
+
"commands": [
|
|
133
|
+
"llm-rag",
|
|
134
|
+
"llm-injection"
|
|
135
|
+
],
|
|
136
|
+
"allowedWrites": [],
|
|
137
|
+
"ecc": null
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"id": "regression-test",
|
|
141
|
+
"commands": [
|
|
142
|
+
"test-regression"
|
|
143
|
+
],
|
|
144
|
+
"allowedWrites": [
|
|
145
|
+
"regression.test.mjs"
|
|
146
|
+
],
|
|
147
|
+
"ecc": null
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "authz",
|
|
151
|
+
"commands": [
|
|
152
|
+
"security-authz",
|
|
153
|
+
"security-fix"
|
|
154
|
+
],
|
|
155
|
+
"allowedWrites": [
|
|
156
|
+
"access.mjs"
|
|
157
|
+
],
|
|
158
|
+
"ecc": null
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "ops-logs",
|
|
162
|
+
"commands": [
|
|
163
|
+
"ops-logs"
|
|
164
|
+
],
|
|
165
|
+
"allowedWrites": [],
|
|
166
|
+
"ecc": null
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"id": "arch-events",
|
|
170
|
+
"commands": [
|
|
171
|
+
"arch-event-flow"
|
|
172
|
+
],
|
|
173
|
+
"allowedWrites": [],
|
|
174
|
+
"ecc": null
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "decision-matrix",
|
|
178
|
+
"commands": [
|
|
179
|
+
"decision-matrix"
|
|
180
|
+
],
|
|
181
|
+
"allowedWrites": [],
|
|
182
|
+
"ecc": null
|
|
183
|
+
}
|
|
184
|
+
]
|
|
185
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { readFileSync, writeFileSync, mkdtempSync, cpSync, rmSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { pathToFileURL } from 'node:url';
|
|
6
|
+
import { spawnSync } from 'node:child_process';
|
|
7
|
+
const [id, root] = process.argv.slice(2);
|
|
8
|
+
const moduleAt = name => import(pathToFileURL(join(root, name)).href);
|
|
9
|
+
function deferred() { let resolve, reject; const promise = new Promise((a,b) => {resolve=a;reject=b;});return {promise,resolve,reject}; }
|
|
10
|
+
if (id === 'checkout') {
|
|
11
|
+
const {total} = await moduleAt('checkout.mjs');
|
|
12
|
+
assert.equal(total([{price:100,quantity:2}],null),200);
|
|
13
|
+
assert.equal(total([{price:100,quantity:2}],{amount:0}),200);
|
|
14
|
+
assert.equal(total([{price:100,quantity:2}],{amount:25}),175);
|
|
15
|
+
assert.equal(total([],{amount:25}),-25);
|
|
16
|
+
} else if (id === 'react-race') {
|
|
17
|
+
const {createLoader} = await moduleAt('loader.mjs');
|
|
18
|
+
const events=[], requests=[];
|
|
19
|
+
const loader=createLoader(() => {const d=deferred();requests.push(d);return d.promise;},e=>events.push(e));
|
|
20
|
+
const a=loader.select('A'), b=loader.select('B');
|
|
21
|
+
requests[1].resolve({id:'B'});await b; requests[0].resolve({id:'A'});await a;
|
|
22
|
+
assert.equal(events.at(-1).account.id,'B');
|
|
23
|
+
const c=loader.select('C'),d=loader.select('D');
|
|
24
|
+
requests[3].resolve({id:'D'});await d;requests[2].reject(Error('stale failure'));await c;
|
|
25
|
+
assert.equal(events.at(-1).account.id,'D');
|
|
26
|
+
const e=loader.select('E');loader.dispose();const count=events.length;requests[4].resolve({id:'E'});await e;
|
|
27
|
+
assert.equal(events.length,count);
|
|
28
|
+
} else if (id === 'idempotency') {
|
|
29
|
+
const {service} = await moduleAt('orders.mjs');
|
|
30
|
+
let calls=0; const gate=deferred();
|
|
31
|
+
const order=service(async payload => {calls++;await gate.promise;return {orderId:'one',...payload};});
|
|
32
|
+
const p=order('key',{sku:'a',quantity:2}),q=order('key',{quantity:2,sku:'a'});
|
|
33
|
+
gate.resolve(); const [a,b]=await Promise.all([p,q]);assert.deepEqual(a,b);assert.equal(calls,1);
|
|
34
|
+
await assert.rejects(async()=>order('key',{sku:'a',quantity:3}));assert.equal(calls,1);
|
|
35
|
+
const next=await order('different',{sku:'a',quantity:2});assert.equal(calls,2);assert.equal(next.sku,'a');
|
|
36
|
+
} else if (id === 'authz') {
|
|
37
|
+
const {canRead} = await moduleAt('access.mjs');
|
|
38
|
+
const doc={ownerId:'u1',tenantId:'t1'};
|
|
39
|
+
assert.equal(canRead({id:'u1',tenantId:'t1',role:'user'},doc),true);
|
|
40
|
+
assert.equal(canRead({id:'u2',tenantId:'t1',role:'admin'},doc),true);
|
|
41
|
+
assert.equal(canRead({id:'u2',tenantId:'t1',role:'user'},doc),false);
|
|
42
|
+
assert.equal(canRead({id:'u1',tenantId:'t2',role:'user'},doc),false);
|
|
43
|
+
assert.equal(canRead({id:'u2',tenantId:'t2',role:'admin'},doc),false);
|
|
44
|
+
} else if (id === 'regression-test') {
|
|
45
|
+
const scratch=mkdtempSync(join(tmpdir(),'just-vibe-mutation-'));
|
|
46
|
+
try {
|
|
47
|
+
cpSync(join(root,'regression.test.mjs'),join(scratch,'regression.test.mjs'));
|
|
48
|
+
const good=readFileSync(join(root,'checkout.mjs'),'utf8');
|
|
49
|
+
for (const [source,shouldPass] of [[good,true],[good.replace('(coupon?.amount ?? 0)','coupon.amount'),false],[good.replace('(coupon?.amount ?? 0)','(coupon?.amount || 17)'),false]]) {
|
|
50
|
+
writeFileSync(join(scratch,'checkout.mjs'),source);
|
|
51
|
+
const r=spawnSync(process.execPath,['--test','regression.test.mjs'],{cwd:scratch,encoding:'utf8',timeout:5000});
|
|
52
|
+
if(r.error)throw r.error;
|
|
53
|
+
assert.equal(r.status===0,shouldPass,`Regression sensitivity mismatch: ${r.stdout}\n${r.stderr}`);
|
|
54
|
+
if(!shouldPass)assert.match(r.stdout,/AssertionError|TypeError/,'Mutation must fail behavior, not environment setup');
|
|
55
|
+
}
|
|
56
|
+
} finally {rmSync(scratch,{recursive:true,force:true});}
|
|
57
|
+
} else throw Error('Unknown code oracle');
|
|
58
|
+
console.log(`${id}: independent behavior checks passed`);
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync, writeFileSync, readdirSync, mkdirSync, cpSync, existsSync, realpathSync } from 'node:fs';
|
|
3
|
+
import { resolve, relative, join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { createHash } from 'node:crypto';
|
|
6
|
+
import { spawnSync } from 'node:child_process';
|
|
7
|
+
import { loadCatalog, getCommand, pluginRoot } from '../../plugins/just-vibe/scripts/lib/catalog.mjs';
|
|
8
|
+
|
|
9
|
+
const here = fileURLToPath(new URL('./', import.meta.url));
|
|
10
|
+
const read = path => JSON.parse(readFileSync(path, 'utf8'));
|
|
11
|
+
export const suite = read(join(here, 'cases.json'));
|
|
12
|
+
export function snapshot(root) {
|
|
13
|
+
const result = {};
|
|
14
|
+
function walk(dir) { for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
15
|
+
const path = join(dir, entry.name), key = relative(root, path).replaceAll('\\', '/');
|
|
16
|
+
if (entry.isSymbolicLink()) { result[key] = 'symlink'; continue; }
|
|
17
|
+
if (entry.isDirectory()) walk(path);
|
|
18
|
+
else result[key] = createHash('sha256').update(readFileSync(path)).digest('hex');
|
|
19
|
+
} }
|
|
20
|
+
walk(root); return result;
|
|
21
|
+
}
|
|
22
|
+
export function prepare({ id, out, arm = 'just-vibe', eccRoot }) {
|
|
23
|
+
const fixture = suite.cases.find(c => c.id === id);
|
|
24
|
+
if (!fixture) throw Error(`Unknown case: ${id}`);
|
|
25
|
+
if (!['just-vibe', 'baseline', 'ecc'].includes(arm)) throw Error('Unknown evaluation arm.');
|
|
26
|
+
if (existsSync(out)) throw Error('Use a fresh output directory; existing runs are never overwritten.');
|
|
27
|
+
const root = resolve(out), workspace = join(root, 'workspace');
|
|
28
|
+
if (arm === 'ecc' && (!fixture.ecc || !eccRoot || !existsSync(join(eccRoot, fixture.ecc)))) throw Error('This case needs its matched ECC source and explicit --ecc-root.');
|
|
29
|
+
mkdirSync(root, { recursive: true });
|
|
30
|
+
cpSync(join(here, 'cases', id), workspace, { recursive: true, errorOnExist: true, force: false });
|
|
31
|
+
const instructions = [];
|
|
32
|
+
const catalog = loadCatalog();
|
|
33
|
+
if (arm === 'just-vibe') {
|
|
34
|
+
const target = join(workspace, '_instructions/just-vibe');
|
|
35
|
+
for (const name of ['scripts', 'catalog']) cpSync(join(pluginRoot, name), join(target, name), { recursive: true });
|
|
36
|
+
for (const name of ['execution.md', 'runtime.md', 'teaching.md', 'teach-test.md', 'profiles.md', 'profile-reference.md']) {
|
|
37
|
+
mkdirSync(join(target, 'references'), { recursive: true });
|
|
38
|
+
cpSync(join(pluginRoot, 'references', name), join(target, 'references', name));
|
|
39
|
+
}
|
|
40
|
+
cpSync(join(pluginRoot, 'references/profiles'), join(target, 'references/profiles'), { recursive: true });
|
|
41
|
+
for (const id of fixture.commands) {
|
|
42
|
+
const c = getCommand(catalog, id, { canonical: true });
|
|
43
|
+
cpSync(join(pluginRoot, 'skills', c.id), join(target, 'skills', c.id), { recursive: true });
|
|
44
|
+
mkdirSync(join(target, 'references/packs'), { recursive: true });
|
|
45
|
+
cpSync(join(pluginRoot, 'references/packs', `${c.pack}.md`), join(target, 'references/packs', `${c.pack}.md`));
|
|
46
|
+
instructions.push(`_instructions/just-vibe/skills/${c.id}/SKILL.md`);
|
|
47
|
+
}
|
|
48
|
+
} else if (arm === 'ecc') {
|
|
49
|
+
mkdirSync(join(workspace, '_instructions'), { recursive: true });
|
|
50
|
+
cpSync(join(eccRoot, fixture.ecc), join(workspace, '_instructions/ecc.md'));
|
|
51
|
+
instructions.push('_instructions/ecc.md');
|
|
52
|
+
}
|
|
53
|
+
const task = readFileSync(join(workspace, 'task.md'), 'utf8');
|
|
54
|
+
const prompt = `Work only in ${workspace}. Read ${instructions.length ? instructions.join(', ') : 'the raw project files; no toolkit instructions are supplied'}. Then complete task.md. Do not inspect the source repository, other runs, graders, or evaluator oracles. Do not spawn agents. Report actual checks and limitations. Write your final JSON to ${join(root, 'answer.json')}.\n\n${task}`;
|
|
55
|
+
writeFileSync(join(root, 'prompt.txt'), prompt);
|
|
56
|
+
const manifest = { schemaVersion: 1, case: id, arm, commands: fixture.commands, allowedWrites: fixture.allowedWrites, preparedAt: new Date().toISOString(), workspace,
|
|
57
|
+
inputs: snapshot(workspace), instructions, instructionBytes: instructions.reduce((n, p) => n + readFileSync(join(workspace, p)).length, 0),
|
|
58
|
+
note: 'Preparation is not a model run. Timings and token/cost usage must come from actual host records; they are not inferred from file timestamps.' };
|
|
59
|
+
writeFileSync(join(root, 'run.json'), JSON.stringify(manifest, null, 2) + '\n');
|
|
60
|
+
return { root, workspace, prompt: join(root, 'prompt.txt') };
|
|
61
|
+
}
|
|
62
|
+
function same(actual, expected, ordered) {
|
|
63
|
+
if (Array.isArray(expected) && Array.isArray(actual) && !ordered) return JSON.stringify([...actual].sort()) === JSON.stringify([...expected].sort());
|
|
64
|
+
return JSON.stringify(actual) === JSON.stringify(expected);
|
|
65
|
+
}
|
|
66
|
+
export function grade({ run, answer }) {
|
|
67
|
+
const root = resolve(run), manifest = read(join(root, 'run.json'));
|
|
68
|
+
const workspace = realpathSync(join(root, 'workspace'));
|
|
69
|
+
if (workspace !== realpathSync(manifest.workspace)) throw Error('Run workspace identity mismatch.');
|
|
70
|
+
const oracle = read(join(here, 'oracles.json')).cases[manifest.case];
|
|
71
|
+
if (!oracle) throw Error('Missing independent oracle.');
|
|
72
|
+
const answerPath = resolve(answer || join(root, 'answer.json'));
|
|
73
|
+
const report = read(answerPath);
|
|
74
|
+
const current = snapshot(workspace);
|
|
75
|
+
const modified = [...new Set([...Object.keys(manifest.inputs), ...Object.keys(current)])].filter(p => manifest.inputs[p] !== current[p]);
|
|
76
|
+
const checks = [{ name: 'Preserve input and instruction files outside allowed writes', pass: modified.every(p => manifest.allowedWrites.includes(p)) },
|
|
77
|
+
{ name: 'No symlink artifacts', pass: !Object.values(current).includes('symlink') }];
|
|
78
|
+
for (const [key, value] of Object.entries(oracle.expected)) checks.push({ name: key, pass: same(report[key], value, key === 'eventOrder') });
|
|
79
|
+
if (oracle.code && checks.every(c => c.pass)) {
|
|
80
|
+
const env = { ...process.env };
|
|
81
|
+
for (const key of ['NODE_OPTIONS', 'NODE_TEST_CONTEXT', 'NODE_V8_COVERAGE']) delete env[key];
|
|
82
|
+
const result = spawnSync(process.execPath, [join(here, 'code-oracles.mjs'), oracle.code, workspace], { encoding: 'utf8', timeout: 20000, maxBuffer: 2 * 1024 * 1024, env });
|
|
83
|
+
checks.push({ name: 'Independent behavioral assertions', pass: result.status === 0, detail: result.error?.message || result.stdout.trim() || result.stderr.trim() });
|
|
84
|
+
} else if (oracle.code) checks.push({ name: 'Independent behavioral assertions', pass: false, detail: 'Execution withheld because integrity or report checks failed.' });
|
|
85
|
+
return { schemaVersion: 1, case: manifest.case, arm: manifest.arm, gradedAt: new Date().toISOString(), checks, modified,
|
|
86
|
+
status: checks.every(c => c.pass) ? 'passed-fixture' : 'failed-fixture',
|
|
87
|
+
limits: 'Bounded fixture assertions, not a universal quality or host-parity claim. A reported JSON field is checked against raw-artifact facts; prose rationale still needs review.',
|
|
88
|
+
answerSha256: createHash('sha256').update(readFileSync(answerPath)).digest('hex') };
|
|
89
|
+
}
|
|
90
|
+
function args(argv) {
|
|
91
|
+
const [operation, ...rest] = argv, options = {};
|
|
92
|
+
for (let i = 0; i < rest.length; i += 2) {
|
|
93
|
+
if (!['--case', '--out', '--arm', '--ecc-root', '--run', '--answer'].includes(rest[i]) || !rest[i+1] || rest[i+1].startsWith('--')) throw Error('Invalid harness arguments.');
|
|
94
|
+
const key = rest[i].slice(2); if (key in options) throw Error('Duplicate option.'); options[key] = rest[i+1];
|
|
95
|
+
}
|
|
96
|
+
return { operation, options };
|
|
97
|
+
}
|
|
98
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
99
|
+
try {
|
|
100
|
+
const { operation, options: o } = args(process.argv.slice(2));
|
|
101
|
+
if (operation === 'list') console.log(JSON.stringify(suite, null, 2));
|
|
102
|
+
else if (operation === 'prepare' && o.case && o.out) console.log(JSON.stringify(prepare({ id: o.case, out: o.out, arm: o.arm, eccRoot: o['ecc-root'] }), null, 2));
|
|
103
|
+
else if (operation === 'grade' && o.run) {
|
|
104
|
+
const result = grade({ run: o.run, answer: o.answer });
|
|
105
|
+
writeFileSync(join(resolve(o.run), 'grade.json'), JSON.stringify(result, null, 2) + '\n');
|
|
106
|
+
console.log(JSON.stringify(result, null, 2)); process.exitCode = result.status === 'passed-fixture' ? 0 : 1;
|
|
107
|
+
} else throw Error('Use list, prepare --case ID --out NEW_DIRECTORY [--arm baseline|just-vibe|ecc --ecc-root PATH], or grade --run DIRECTORY [--answer FILE].');
|
|
108
|
+
} catch (error) { console.error(error.message); process.exitCode = 1; }
|
|
109
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"cases": {
|
|
4
|
+
"checkout": {
|
|
5
|
+
"expected": {},
|
|
6
|
+
"code": "checkout"
|
|
7
|
+
},
|
|
8
|
+
"github-pr": {
|
|
9
|
+
"expected": {
|
|
10
|
+
"existingPr": 19,
|
|
11
|
+
"headSha": "bbb",
|
|
12
|
+
"createNeeded": false,
|
|
13
|
+
"unsubmittedLocalFiles": [
|
|
14
|
+
"draft.txt"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"code": null
|
|
18
|
+
},
|
|
19
|
+
"vercel-env": {
|
|
20
|
+
"expected": {
|
|
21
|
+
"missingPreviewNames": [
|
|
22
|
+
"DATABASE_URL"
|
|
23
|
+
],
|
|
24
|
+
"clientExposedSensitiveNames": [
|
|
25
|
+
"VITE_ADMIN_SECRET"
|
|
26
|
+
],
|
|
27
|
+
"currentDeploymentHasNewValues": false
|
|
28
|
+
},
|
|
29
|
+
"code": null
|
|
30
|
+
},
|
|
31
|
+
"vite-assets": {
|
|
32
|
+
"expected": {
|
|
33
|
+
"deployedPrefix": "/console/",
|
|
34
|
+
"brokenRequestedPath": "/logo.svg",
|
|
35
|
+
"expectedAssetPath": "/console/logo.svg",
|
|
36
|
+
"browserVerified": false
|
|
37
|
+
},
|
|
38
|
+
"code": null
|
|
39
|
+
},
|
|
40
|
+
"react-race": {
|
|
41
|
+
"expected": {},
|
|
42
|
+
"code": "react-race"
|
|
43
|
+
},
|
|
44
|
+
"ui-accessibility": {
|
|
45
|
+
"expected": {
|
|
46
|
+
"keyboardEscapeWorks": true,
|
|
47
|
+
"focusReturnsToTrigger": false,
|
|
48
|
+
"screenReaderVerified": false,
|
|
49
|
+
"automatedScanProvesConformance": false
|
|
50
|
+
},
|
|
51
|
+
"code": null
|
|
52
|
+
},
|
|
53
|
+
"idempotency": {
|
|
54
|
+
"expected": {
|
|
55
|
+
"durableAcrossProcesses": false
|
|
56
|
+
},
|
|
57
|
+
"code": "idempotency"
|
|
58
|
+
},
|
|
59
|
+
"db-migrate": {
|
|
60
|
+
"expected": {
|
|
61
|
+
"transactionCompatible": false,
|
|
62
|
+
"readyToApply": false,
|
|
63
|
+
"existingIndexProvesReady": false
|
|
64
|
+
},
|
|
65
|
+
"code": null
|
|
66
|
+
},
|
|
67
|
+
"db-query": {
|
|
68
|
+
"expected": {
|
|
69
|
+
"correctTotal": 100,
|
|
70
|
+
"naiveJoinedTotal": 600,
|
|
71
|
+
"joinInflatesRevenue": true
|
|
72
|
+
},
|
|
73
|
+
"code": null
|
|
74
|
+
},
|
|
75
|
+
"data-reconcile": {
|
|
76
|
+
"expected": {
|
|
77
|
+
"missingIds": [
|
|
78
|
+
"c"
|
|
79
|
+
],
|
|
80
|
+
"unexpectedIds": [
|
|
81
|
+
"d"
|
|
82
|
+
],
|
|
83
|
+
"changedIds": [
|
|
84
|
+
"b"
|
|
85
|
+
],
|
|
86
|
+
"equalCountsProveParity": false
|
|
87
|
+
},
|
|
88
|
+
"code": null
|
|
89
|
+
},
|
|
90
|
+
"ml-split": {
|
|
91
|
+
"expected": {
|
|
92
|
+
"randomRowSplitSupportsFutureClaim": false,
|
|
93
|
+
"holdingOutEntitiesAnswersSameQuestion": false,
|
|
94
|
+
"universalGapHours": null
|
|
95
|
+
},
|
|
96
|
+
"code": null
|
|
97
|
+
},
|
|
98
|
+
"ml-leakage": {
|
|
99
|
+
"expected": {
|
|
100
|
+
"futureFeatureConfirmed": true,
|
|
101
|
+
"sharedOutcomeEventConfirmed": false,
|
|
102
|
+
"mandatoryGapHours": null,
|
|
103
|
+
"preprocessingLeakageConfirmed": false,
|
|
104
|
+
"missingLabelsAreNegative": false
|
|
105
|
+
},
|
|
106
|
+
"code": null
|
|
107
|
+
},
|
|
108
|
+
"ml-checkpoint": {
|
|
109
|
+
"expected": {
|
|
110
|
+
"exactResumeEstablished": false,
|
|
111
|
+
"missingRequiredState": [
|
|
112
|
+
"optimizer",
|
|
113
|
+
"scheduler",
|
|
114
|
+
"scaler",
|
|
115
|
+
"rng",
|
|
116
|
+
"samplerPosition"
|
|
117
|
+
],
|
|
118
|
+
"safeClaim": "restart-or-approximate"
|
|
119
|
+
},
|
|
120
|
+
"code": null
|
|
121
|
+
},
|
|
122
|
+
"ml-evaluate": {
|
|
123
|
+
"expected": {
|
|
124
|
+
"tp": 1,
|
|
125
|
+
"tn": 0,
|
|
126
|
+
"fp": 1,
|
|
127
|
+
"fn": 0,
|
|
128
|
+
"missingPredictionIds": [
|
|
129
|
+
"c"
|
|
130
|
+
],
|
|
131
|
+
"unknownLabelIds": [
|
|
132
|
+
"d"
|
|
133
|
+
],
|
|
134
|
+
"scoredCount": 2
|
|
135
|
+
},
|
|
136
|
+
"code": null
|
|
137
|
+
},
|
|
138
|
+
"ml-parity": {
|
|
139
|
+
"expected": {
|
|
140
|
+
"sameModel": true,
|
|
141
|
+
"firstDivergence": "feature-order",
|
|
142
|
+
"pureNumericalToleranceIssue": false
|
|
143
|
+
},
|
|
144
|
+
"code": null
|
|
145
|
+
},
|
|
146
|
+
"rag-boundary": {
|
|
147
|
+
"expected": {
|
|
148
|
+
"refundDays": 14,
|
|
149
|
+
"citationId": "a-current",
|
|
150
|
+
"instructionFromDocumentFollowed": false,
|
|
151
|
+
"unsupportedQuestionAnswer": "unknown"
|
|
152
|
+
},
|
|
153
|
+
"code": null
|
|
154
|
+
},
|
|
155
|
+
"regression-test": {
|
|
156
|
+
"expected": {},
|
|
157
|
+
"code": "regression-test"
|
|
158
|
+
},
|
|
159
|
+
"authz": {
|
|
160
|
+
"expected": {},
|
|
161
|
+
"code": "authz"
|
|
162
|
+
},
|
|
163
|
+
"ops-logs": {
|
|
164
|
+
"expected": {
|
|
165
|
+
"eventOrder": [
|
|
166
|
+
"request",
|
|
167
|
+
"deployed",
|
|
168
|
+
"timeout"
|
|
169
|
+
],
|
|
170
|
+
"deploymentProvenRootCause": false,
|
|
171
|
+
"missingWorkerLogProvesNoWork": false
|
|
172
|
+
},
|
|
173
|
+
"code": null
|
|
174
|
+
},
|
|
175
|
+
"arch-events": {
|
|
176
|
+
"expected": {
|
|
177
|
+
"lostEventPossible": true,
|
|
178
|
+
"duplicateEffectPossible": true,
|
|
179
|
+
"exactlyOnceEstablished": false
|
|
180
|
+
},
|
|
181
|
+
"code": null
|
|
182
|
+
},
|
|
183
|
+
"decision-matrix": {
|
|
184
|
+
"expected": {
|
|
185
|
+
"feasibleOptions": [
|
|
186
|
+
"B"
|
|
187
|
+
],
|
|
188
|
+
"unknownOptions": [
|
|
189
|
+
"C"
|
|
190
|
+
],
|
|
191
|
+
"recommendedOption": "B"
|
|
192
|
+
},
|
|
193
|
+
"code": null
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Repeated repository benchmark
|
|
2
|
+
|
|
3
|
+
This study tests implementation behavior on four newly authored multi-file repositories. They exercise asynchronous cache ownership, SQLite transfers, temporal ML data preparation and a scoped Git commit. These are bounded laboratory tasks, not unfamiliar third-party production repositories. Every graded requirement is visible in the task or project contract. Correct control implementations and original-defect rejection tests validate the graders in the development test suite.
|
|
4
|
+
|
|
5
|
+
## What the results can answer
|
|
6
|
+
|
|
7
|
+
Output quality and convenience are the product goals. The checks here answer a narrower question: did an implementation meet these explicit contracts, preserve unrelated work and include meaningful regression coverage? Passing does not establish good architectural judgment in general, useful communication or an easier user experience. Equal pass counts do not establish equal products.
|
|
8
|
+
|
|
9
|
+
The supplied contracts remove much of the user's context preparation and the agent's discovery work. These automated trials have no participating user whose effort or preference could be measured. Zero user interventions means none were supplied under the protocol, not that none would have been useful. Token and timing data are retained as secondary operational observations, not as quality scores. The [contextual review guide](../../docs/command-quality.md#output-quality-and-convenience) describes complementary review of real tasks. This interpretation leaves the registered arms, requirements and captured metrics below unchanged.
|
|
10
|
+
|
|
11
|
+
## Registered first study
|
|
12
|
+
|
|
13
|
+
Before inspecting counted results or changing command guidance, prepare 32 fresh trials: four cases × four instruction arms × two repetitions, deterministically shuffled with seed 5192026. The arms are an unassisted baseline, just-vibe v0.5.0 without profiles, the same instructions with a selected task profile, and matched ECC instructions at revision `934195f955cf0da847d59fcd6f68856bce112d8b`. The exact entry points are in [cases.json](cases.json). The generated study manifest freezes every workspace and instruction hash and the oracle hashes before execution.
|
|
14
|
+
|
|
15
|
+
Run all arms with `gpt-6-astra`, medium reasoning, CLI 0.155.1, at most two concurrent trials and 240 seconds per trial. Use ephemeral contexts, saved authentication, workspace-write with the fixture's Git metadata explicitly writable, and no user config/rules, host skills, plugins, hooks, apps, subagents, network or dependency installation. The host-discovery flag is experimental. OS sandboxing constrains writes; the prompt constrains cross-trial reads. This is not a hardened isolation boundary or a full native ECC hooks/memory installation. ECC skill directories include their support files; references elsewhere in its repository may be unavailable.
|
|
16
|
+
|
|
17
|
+
Two setup pilots are excluded from the registered totals and retained separately. The first exposed protected `.git` writes; the second checks explicit Git-directory permission. The scoped-commit task now explicitly directs every arm to the README contract, as the other three tasks already did. Pilot failures remain documented; they are not counted as toolkit comparison evidence.
|
|
18
|
+
|
|
19
|
+
Primary success requires every independent behavior assertion, preserved protected files and unrelated Git state, an authored regression test that passes with the fix and rejects the original defect, and a completed agent turn within the time limit. Partial correctness is recorded separately. Runtime/model errors and timeouts remain failures in the denominator. The grader checks artifacts, not whether a final message sounds convincing. Review traces for unsupported completion claims and scope violations before interpreting results.
|
|
20
|
+
|
|
21
|
+
Report individual outcomes, paired outcomes by case and repetition, elapsed wall time, input/cached-input/output tokens, failed shell calls, timeouts and user intervention. Cached input is a subset of input, not an additional total. Wall time includes CLI startup and service delays. Tokens are reported by the CLI, not estimated from text; absent usage is unavailable, never zero. Saved ChatGPT authentication supplies no per-trial monetary charge, so dollar cost remains null. No user answers or corrective hints are supplied during a counted trial.
|
|
22
|
+
|
|
23
|
+
`toolCalls` counts recognized completed shell, file-change, MCP and web events in the CLI stream, not every possible internal operation. `failedCommands` counts recorded nonzero shell-call exits; a shell sequence can mask an earlier command's failure. Trace review therefore complements artifact checks but cannot prove that every read or internal action was observed. Agent wall time excludes subsequent evaluator execution. Review both partial output and final state before interpreting a successful aggregate shell status.
|
|
24
|
+
|
|
25
|
+
This small sample supports failure analysis, not statistical superiority, general expertise, or a claim that profiles improve all work. Command revisions after this study are evaluated in separate fresh trials; never replace failed baseline attempts or combine revised instructions into the original arm. A rerun on these same now-known tasks is a development regression check, not held-out proof of generalization. Published fixtures cease to be a blind benchmark.
|
|
26
|
+
|
|
27
|
+
The v0.6 development check freezes eight further trials: four cases × just-vibe with/without profiles × one repetition, seed 5192027, with the same model, effort, CLI and limits. Run them after the original comparison to keep at most two active trials. These validate the revised instruction bundles on known tasks; they do not add extra repetitions to the original v0.5 arms or establish that the revisions caused an improvement.
|
|
28
|
+
|
|
29
|
+
## Reproduce
|
|
30
|
+
|
|
31
|
+
Requires Node 22+, Git, Python 3.9+ with SQLite and a compatible authenticated Codex CLI. On macOS the harness uses `/usr/bin/python3`; `JUST_VIBE_PYTHON` can select the evaluator interpreter elsewhere. Model calls consume the authenticated account's usage. The harness never installs a CLI, logs in, runs remote actions or changes host configuration.
|
|
32
|
+
|
|
33
|
+
The recorded native model runs use macOS and an executable CLI entry point. Cross-platform grader tests are separate from native Windows model-run validation; Windows shell-shim invocation is not established by these results. Typoed/unknown options and missing run configuration are rejected before trials start.
|
|
34
|
+
|
|
35
|
+
Interrupting the runner stops dispatching new trials, terminates its owned CLI processes and retains interrupted attempts as failures. A short forced-termination fallback handles a CLI that ignores graceful termination. Authentication links are removed after process closure; interrupted or failed attempts are never silently retried. Resume pending trials with the same study, or prepare a fresh study to deliberately repeat an attempt.
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
node evals/benchmark/harness.mjs prepare --out .tmp/benchmark/before --ecc-root /path/to/ECC --repetitions 2 --seed 5192026
|
|
39
|
+
node evals/benchmark/harness.mjs run --study .tmp/benchmark/before --codex /path/to/codex --auth-home /path/to/codex-home --model gpt-6-astra --effort medium --seconds 240 --concurrency 2
|
|
40
|
+
node evals/benchmark/harness.mjs grade --trial .tmp/benchmark/before/ledger/baseline/1
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Use a fresh output directory for every attempt. Keep raw prompts, event logs, final answers, manifests, metrics, artifact diffs and grading output locally. Authentication is linked only into an ephemeral per-trial host directory and removed after the process closes; never publish that directory. Review exported results for personal paths before committing them.
|
|
44
|
+
|
|
45
|
+
Export a completed study with `node evals/benchmark/report.mjs STUDY OUTPUT.json --regrade`. The exporter refuses incomplete studies, records per-trial evidence hashes, preserves unavailable metrics and retains earlier scores when applying the corrected scorer. `prepare --arms just-vibe,just-vibe-profile --repetitions 1` prepares a smaller development comparison with the current instructions; it remains separate from the original study.
|
|
46
|
+
|
|
47
|
+
## Scorer correction
|
|
48
|
+
|
|
49
|
+
Scorer version 1 used an overly narrow text match on default test output. Node's default reporter can withhold assertion details until the suite finishes; an early real assertion failure followed by a hung asynchronous test was classified as no regression evidence. Python tests that reached the original implementation and exposed an unexpected behavior exception were also rejected when the exception was not an assertion error. Known-good control tests alone did not expose those reporting differences.
|
|
50
|
+
|
|
51
|
+
Version 2 uses streaming Node TAP assertion evidence and a Python test-result collector that distinguishes test-body/implementation failures from import/setup errors. A timeout without completed behavior evidence still fails. It also closes a Git grading gap: the committed implementation and tests are executed separately from the mixed worktree, because checking path names and preserved staging alone did not prove the fix was committed. This verifies the existing task contract rather than adding a new requirement. The original code/task/oracle assertions and model attempts are unchanged. Preserve version 1 grades, rescore every arm, and report any changed outcomes. Additional regression tests cover the corrections. These are evaluator corrections, not evidence that an agent improved its work.
|
|
52
|
+
|
|
53
|
+
Windows CI also exposed an evaluator-owned SQLite connection left open during temporary-directory cleanup. The original 32 runs completed before that resource cleanup was changed; their original oracle files are retained locally. The correction closes the observer connection in `finally` without changing any behavior assertion. Both original and rescoring source hashes are recorded. The eight v0.6 trials were freshly prepared after this cleanup fix; an earlier unexecuted preparation was retained separately and contributes no results.
|
|
54
|
+
|
|
55
|
+
Version 3 extends streaming failure evidence to Python: a completed behavior assertion before a later hung test counts as regression sensitivity, just as it does for Node. A timeout with no completed behavior evidence, a successful mutant run or a setup-only failure does not count. A real timed-out Python control tests this path. Earlier grades are retained and all final reported trials use version 3; no model attempt is replaced during rescoring.
|
|
56
|
+
|
|
57
|
+
The CLI's documented [non-interactive mode](https://developers.openai.com/codex/noninteractive) supplies JSON event streams, final-message output and ephemeral runs. Pin the CLI and model when comparing instructions; a model name alone does not guarantee an immutable model backend.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"cases": [
|
|
4
|
+
{"id":"async-cache","commands":["backend-cache","backend-concurrency","react-async"],"profile":"frontend-engineer","allowedWrites":["src/cache.mjs","src/view.mjs","test/regression.test.mjs"],"ecc":["skills/backend-patterns/SKILL.md","skills/react-patterns/SKILL.md"],"language":"node"},
|
|
5
|
+
{"id":"ledger","commands":["backend-idempotency","backend-concurrency","db-integrity"],"profile":"backend-engineer","allowedWrites":["src/service.py","test/test_regression.py"],"ecc":["skills/backend-patterns/SKILL.md","skills/python-patterns/SKILL.md","skills/database-migrations/SKILL.md"],"language":"python"},
|
|
6
|
+
{"id":"temporal-ml","commands":["ml-features","ml-leakage","ml-split"],"profile":"machine-learning-engineer","allowedWrites":["src/features.py","src/pipeline.py","test/test_regression.py"],"ecc":["skills/mle-workflow/SKILL.md","agents/mle-reviewer.md"],"language":"python"},
|
|
7
|
+
{"id":"scoped-commit","commands":["fix","git-commit","test-regression"],"profile":"senior-software-engineer","allowedWrites":["src/invoice.mjs","test/regression.test.mjs"],"ecc":["skills/git-workflow/SKILL.md","skills/tdd-workflow/SKILL.md"],"language":"node","gitCommit":true}
|
|
8
|
+
]
|
|
9
|
+
}
|