@xhulz/nina 0.68.2 → 0.70.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/bin/nina.mjs +2 -1
- package/package.json +1 -1
- package/releases/0.69.0/core/GAPS.md +125 -0
- package/releases/0.69.0/core/answered.json +83 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/architect.md +1 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/dba.md +3 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/devops.md +1 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/qa.md +7 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/secops.md +3 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
- package/releases/0.69.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
- package/releases/0.69.0/core/tree/.claude/agents/architect.md +135 -0
- package/releases/0.69.0/core/tree/.claude/agents/dba.md +119 -0
- package/releases/0.69.0/core/tree/.claude/agents/design-reviewer.md +78 -0
- package/releases/0.69.0/core/tree/.claude/agents/devops.md +118 -0
- package/releases/0.69.0/core/tree/.claude/agents/implementer.md +178 -0
- package/releases/0.69.0/core/tree/.claude/agents/integration-tester.md +170 -0
- package/releases/0.69.0/core/tree/.claude/agents/planner.md +132 -0
- package/releases/0.69.0/core/tree/.claude/agents/qa.md +150 -0
- package/releases/0.69.0/core/tree/.claude/agents/reviewer.md +187 -0
- package/releases/0.69.0/core/tree/.claude/agents/secops.md +120 -0
- package/releases/0.69.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
- package/releases/0.69.0/core/tree/.claude/agents/solidity-dev.md +123 -0
- package/releases/0.69.0/core/tree/.claude/agents-overview.md +65 -0
- package/releases/0.69.0/core/tree/.claude/frontend.md +10 -0
- package/releases/0.69.0/core/tree/.claude/graph.md +79 -0
- package/releases/0.69.0/core/tree/.claude/patterns.md +252 -0
- package/releases/0.69.0/core/tree/.claude/pills/README.md +150 -0
- package/releases/0.69.0/core/tree/.claude/pipeline.md +101 -0
- package/releases/0.69.0/core/tree/.claude/retrieval.md +103 -0
- package/releases/0.69.0/core/tree/.claude/router.md +219 -0
- package/releases/0.69.0/core/tree/.claude/templates/integration.md +48 -0
- package/releases/0.69.0/core/tree/CLAUDE.md +166 -0
- package/releases/0.69.0/core/tree/scripts/cost-watch.mjs +25 -0
- package/releases/0.69.0/core/tree/scripts/edit-guard.mjs +24 -0
- package/releases/0.69.0/core/tree/scripts/harness-check.mjs +81 -0
- package/releases/0.69.0/core/tree/scripts/loop-gate.mjs +19 -0
- package/releases/0.69.0/core/vocabulary.json +14 -0
- package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
- package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
- package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
- package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
- package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
- package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
- package/releases/0.69.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
- package/releases/0.69.0/surfaces/blockchain/tree/.claude/router.md +6 -0
- package/releases/0.69.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
- package/releases/0.69.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
- package/releases/0.69.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
- package/releases/0.69.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.69.0/surfaces/d1/tree/.claude/patterns.md +8 -0
- package/releases/0.69.0/surfaces/d1/tree/CLAUDE.md +2 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/graph.md +8 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/patterns.md +22 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/pipeline.md +13 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/retrieval.md +5 -0
- package/releases/0.69.0/surfaces/db/tree/.claude/router.md +4 -0
- package/releases/0.69.0/surfaces/db/tree/CLAUDE.md +17 -0
- package/releases/0.69.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
- package/releases/0.69.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
- package/releases/0.69.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.69.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
- package/releases/0.69.0/surfaces/edge-cf/tree/CLAUDE.md +27 -0
- package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
- package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
- package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
- package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
- package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
- package/releases/0.69.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
- package/releases/0.69.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
- package/releases/0.69.0/surfaces/frontend/tree/.claude/router.md +14 -0
- package/releases/0.69.0/surfaces/frontend/tree/CLAUDE.md +5 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/graph.md +10 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
- package/releases/0.69.0/surfaces/integrations/tree/.claude/router.md +6 -0
- package/releases/0.69.0/surfaces/integrations/tree/CLAUDE.md +17 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/graph.md +2 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/patterns.md +49 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/pipeline.md +2 -0
- package/releases/0.69.0/surfaces/money/tree/.claude/retrieval.md +2 -0
- package/releases/0.69.0/surfaces/money/tree/CLAUDE.md +11 -0
- package/releases/0.69.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
- package/releases/0.69.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
- package/releases/0.69.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.69.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
- package/releases/0.69.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
- package/releases/0.69.0/surfaces/pii/tree/CLAUDE.md +5 -0
- package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
- package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
- package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
- package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
- package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
- package/releases/0.69.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
- package/releases/0.69.0/surfaces/prisma/tree/CLAUDE.md +5 -0
- package/releases/0.70.0/core/GAPS.md +125 -0
- package/releases/0.70.0/core/answered.json +89 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/architect.md +1 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/dba.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/devops.md +1 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/qa.md +7 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/secops.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
- package/releases/0.70.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
- package/releases/0.70.0/core/tree/.claude/agents/architect.md +135 -0
- package/releases/0.70.0/core/tree/.claude/agents/dba.md +119 -0
- package/releases/0.70.0/core/tree/.claude/agents/design-reviewer.md +78 -0
- package/releases/0.70.0/core/tree/.claude/agents/devops.md +118 -0
- package/releases/0.70.0/core/tree/.claude/agents/implementer.md +178 -0
- package/releases/0.70.0/core/tree/.claude/agents/integration-tester.md +170 -0
- package/releases/0.70.0/core/tree/.claude/agents/planner.md +132 -0
- package/releases/0.70.0/core/tree/.claude/agents/qa.md +150 -0
- package/releases/0.70.0/core/tree/.claude/agents/reviewer.md +187 -0
- package/releases/0.70.0/core/tree/.claude/agents/secops.md +120 -0
- package/releases/0.70.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
- package/releases/0.70.0/core/tree/.claude/agents/solidity-dev.md +123 -0
- package/releases/0.70.0/core/tree/.claude/agents-overview.md +65 -0
- package/releases/0.70.0/core/tree/.claude/frontend.md +10 -0
- package/releases/0.70.0/core/tree/.claude/graph.md +79 -0
- package/releases/0.70.0/core/tree/.claude/patterns.md +252 -0
- package/releases/0.70.0/core/tree/.claude/pills/README.md +150 -0
- package/releases/0.70.0/core/tree/.claude/pipeline.md +101 -0
- package/releases/0.70.0/core/tree/.claude/retrieval.md +103 -0
- package/releases/0.70.0/core/tree/.claude/router.md +221 -0
- package/releases/0.70.0/core/tree/.claude/templates/integration.md +48 -0
- package/releases/0.70.0/core/tree/CLAUDE.md +167 -0
- package/releases/0.70.0/core/tree/scripts/cost-watch.mjs +25 -0
- package/releases/0.70.0/core/tree/scripts/edit-guard.mjs +24 -0
- package/releases/0.70.0/core/tree/scripts/harness-check.mjs +82 -0
- package/releases/0.70.0/core/tree/scripts/loop-gate.mjs +19 -0
- package/releases/0.70.0/core/vocabulary.json +14 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
- package/releases/0.70.0/surfaces/blockchain/tree/.claude/router.md +6 -0
- package/releases/0.70.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
- package/releases/0.70.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
- package/releases/0.70.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
- package/releases/0.70.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.70.0/surfaces/d1/tree/.claude/patterns.md +8 -0
- package/releases/0.70.0/surfaces/d1/tree/CLAUDE.md +2 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/graph.md +8 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/patterns.md +22 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/pipeline.md +13 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/retrieval.md +5 -0
- package/releases/0.70.0/surfaces/db/tree/.claude/router.md +4 -0
- package/releases/0.70.0/surfaces/db/tree/CLAUDE.md +17 -0
- package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
- package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
- package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.70.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
- package/releases/0.70.0/surfaces/edge-cf/tree/CLAUDE.md +29 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
- package/releases/0.70.0/surfaces/frontend/tree/.claude/router.md +14 -0
- package/releases/0.70.0/surfaces/frontend/tree/CLAUDE.md +5 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/graph.md +10 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
- package/releases/0.70.0/surfaces/integrations/tree/.claude/router.md +6 -0
- package/releases/0.70.0/surfaces/integrations/tree/CLAUDE.md +17 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/graph.md +2 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/patterns.md +49 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/pipeline.md +2 -0
- package/releases/0.70.0/surfaces/money/tree/.claude/retrieval.md +2 -0
- package/releases/0.70.0/surfaces/money/tree/CLAUDE.md +11 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
- package/releases/0.70.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
- package/releases/0.70.0/surfaces/pii/tree/CLAUDE.md +5 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
- package/releases/0.70.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
- package/releases/0.70.0/surfaces/prisma/tree/CLAUDE.md +5 -0
- package/src/commands/learn.mjs +44 -13
- package/src/commands/sizes.mjs +94 -24
- package/src/commands/upgrade.mjs +1 -1
- package/src/gate.mjs +10 -4
package/src/commands/sizes.mjs
CHANGED
|
@@ -75,6 +75,23 @@ export function forecastIn(text) {
|
|
|
75
75
|
return { lines: Number(m[1].replace(/,/g, '')), files: files ? Number(files[1]) : null };
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
/**
|
|
79
|
+
* What a step file's `Size:` line says when {@link forecastIn} reads no forecast from it, or null when it reads one or
|
|
80
|
+
* the file has no such line. A step whose line was rewritten into prose — "round 1 landed +498/−95 against ~272" — was
|
|
81
|
+
* left out of every rate without a word. The label opens its line, as `Kind:` does: `font-size:` in a step's CSS and a
|
|
82
|
+
* sentence that names the `Size:` line are no line of their own.
|
|
83
|
+
*
|
|
84
|
+
* @param {string} text - A step file.
|
|
85
|
+
* @returns {string|null} The line after `Size:`, shortened.
|
|
86
|
+
*/
|
|
87
|
+
export function unreadSize(text) {
|
|
88
|
+
if (forecastIn(text)) return null;
|
|
89
|
+
const m = /^[\s>*_-]*Size:[*_ \t]*([^\n]*)/im.exec(text);
|
|
90
|
+
if (!m) return null;
|
|
91
|
+
const said = m[1].trim();
|
|
92
|
+
return said.length > 72 ? `${said.slice(0, 71)}…` : said;
|
|
93
|
+
}
|
|
94
|
+
|
|
78
95
|
/** Runs git in the project, or says it could not. */
|
|
79
96
|
function git(dir, args) {
|
|
80
97
|
const r = spawnSync('git', ['-C', dir, ...args], { encoding: 'utf8', maxBuffer: 256 * 1024 * 1024 });
|
|
@@ -178,7 +195,8 @@ const median = (xs) => {
|
|
|
178
195
|
* Every step with a forecast, landed or not: what it was forecast before it was built, and what its commits added.
|
|
179
196
|
*
|
|
180
197
|
* @param {string} dir - The project.
|
|
181
|
-
* @returns {{steps: object[], limit: number}|null} Null outside a git repository.
|
|
198
|
+
* @returns {{steps: object[], limit: number, unread: object[]}|null} Null outside a git repository. `unread` is each step
|
|
199
|
+
* file whose `Size:` line reads as no forecast, with what it says (`said`).
|
|
182
200
|
*/
|
|
183
201
|
export function measure(dir) {
|
|
184
202
|
const profile = (() => {
|
|
@@ -191,7 +209,7 @@ export function measure(dir) {
|
|
|
191
209
|
const limit = Number(profile?.vocabulary?.STEP_LINES) || Number(defaultVocabulary(PACKAGE).STEP_LINES) || 400;
|
|
192
210
|
// It runs every turn: a project with no step file does not pay for its history.
|
|
193
211
|
const files = stepFiles(dir);
|
|
194
|
-
if (files.length === 0) return git(dir, ['rev-parse', '--verify', '--quiet', 'HEAD']) === null ? null : { steps: [], limit };
|
|
212
|
+
if (files.length === 0) return git(dir, ['rev-parse', '--verify', '--quiet', 'HEAD']) === null ? null : { steps: [], limit, unread: [] };
|
|
195
213
|
const log = git(dir, ['log', '--format=%H%x09%ct%x09%cI%x09%s', 'HEAD']);
|
|
196
214
|
if (log === null) return null;
|
|
197
215
|
// Times as instants: an ISO time carries its zone, and two zones compared as text order wrongly.
|
|
@@ -227,23 +245,36 @@ export function measure(dir) {
|
|
|
227
245
|
return when;
|
|
228
246
|
};
|
|
229
247
|
const steps = [];
|
|
248
|
+
// Step files whose `Size:` line reads as no forecast: left out of every rate, so said rather than skipped.
|
|
249
|
+
const unread = [];
|
|
230
250
|
for (const file of files) {
|
|
231
251
|
const current = readFileSync(join(dir, file.path), 'utf8');
|
|
232
252
|
const now = forecastIn(current);
|
|
233
253
|
const kind = kindIn(current);
|
|
234
254
|
const landings = named.get(file.path).filter((c) => code.get(c.hash)?.size > 0);
|
|
235
255
|
if (landings.length === 0) {
|
|
236
|
-
if (!now)
|
|
256
|
+
if (!now) {
|
|
257
|
+
const said = unreadSize(current);
|
|
258
|
+
if (said !== null) unread.push({ ...file, landed: false, said });
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
237
261
|
// Forecast again in the working tree, it is newer than every commit.
|
|
238
262
|
const since = at('HEAD', file.path)?.lines === now.lines ? writtenAt(file.path, Infinity, now.lines) : Infinity;
|
|
239
|
-
|
|
263
|
+
// What it was first forecast at: a forecast restated at a rate carries that rate over it, and rates multiplied
|
|
264
|
+
// onto one another — another kind's among them — put one project's steps at ×2.54 of their count.
|
|
265
|
+
const original = changes.get(file.path).map((c) => at(c.hash, file.path)).filter(Boolean).at(-1) ?? null;
|
|
266
|
+
steps.push({ ...file, kind, landed: false, forecast: now, since, original: original && original.lines !== now.lines ? original : null });
|
|
240
267
|
continue;
|
|
241
268
|
}
|
|
242
269
|
// The forecast the step was built to: its file before its first commit, or as that commit wrote it.
|
|
243
270
|
const first = landings[0];
|
|
244
271
|
const before = at(`${first.hash}^`, file.path);
|
|
245
272
|
const forecast = before ?? at(first.hash, file.path);
|
|
246
|
-
if (!forecast)
|
|
273
|
+
if (!forecast) {
|
|
274
|
+
const said = unreadSize(text.get(`${first.hash}^:${file.path}`) ?? '') ?? unreadSize(text.get(`${first.hash}:${file.path}`) ?? '');
|
|
275
|
+
if (said !== null) unread.push({ ...file, landed: true, said, hash: first.hash });
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
247
278
|
const since = (before ? writtenAt(file.path, order.get(first.hash), forecast.lines) : null) ?? first.t;
|
|
248
279
|
const lines = new Map();
|
|
249
280
|
for (const c of landings) for (const [path, added] of code.get(c.hash)) lines.set(path, (lines.get(path) ?? 0) + added);
|
|
@@ -272,7 +303,7 @@ export function measure(dir) {
|
|
|
272
303
|
hash: last.hash,
|
|
273
304
|
});
|
|
274
305
|
}
|
|
275
|
-
return { steps, limit };
|
|
306
|
+
return { steps, limit, unread };
|
|
276
307
|
}
|
|
277
308
|
|
|
278
309
|
/**
|
|
@@ -294,6 +325,20 @@ export function rateOf(steps, { spec, since, kind = null }) {
|
|
|
294
325
|
return over.length ? { rate: median(over.map((s) => s.measured ?? s.ratio)), over: over.length, kind: mine.length ? kind : null } : null;
|
|
295
326
|
}
|
|
296
327
|
|
|
328
|
+
/**
|
|
329
|
+
* What a spec's newest landed steps of one kind missed by, whenever they were forecast: set beside a step to land that
|
|
330
|
+
* carries more over its first forecast than its kind ever missed by, which reads as rates carried from elsewhere.
|
|
331
|
+
*
|
|
332
|
+
* @param {object[]} steps
|
|
333
|
+
* @param {{spec: string, kind?: string|null}} step - Its spec and kind.
|
|
334
|
+
* @returns {number|null}
|
|
335
|
+
*/
|
|
336
|
+
export function kindRate(steps, { spec, kind = null }) {
|
|
337
|
+
if (!kind) return null;
|
|
338
|
+
const over = steps.filter((s) => s.landed && s.spec === spec && s.kind === kind).sort((a, b) => a.t - b.t).slice(-RATE_OVER);
|
|
339
|
+
return over.length ? median(over.map((s) => s.measured ?? s.ratio)) : null;
|
|
340
|
+
}
|
|
341
|
+
|
|
297
342
|
/**
|
|
298
343
|
* What the detector says: the newest landed step, when it overran, and the steps of its spec still forecast as they
|
|
299
344
|
* were when it landed — until one of them is forecast again. The next step to go out is forecast again at its turn, and
|
|
@@ -336,7 +381,7 @@ export async function sizes(argv) {
|
|
|
336
381
|
else console.error(' not a git repository, or one with no commit yet: a step is measured by its commits\n');
|
|
337
382
|
return check ? 0 : 1;
|
|
338
383
|
}
|
|
339
|
-
const { steps, limit } = measured;
|
|
384
|
+
const { steps, limit, unread } = measured;
|
|
340
385
|
if (check) {
|
|
341
386
|
// During `nina upgrade --apply`: a step that overran is the project's history, not the move — and the release that
|
|
342
387
|
// first shipped this detector rolled itself back in the project that asked for it. The move says it after.
|
|
@@ -344,30 +389,50 @@ export async function sizes(argv) {
|
|
|
344
389
|
console.log('sizes: current');
|
|
345
390
|
return 0;
|
|
346
391
|
}
|
|
392
|
+
const said = [];
|
|
347
393
|
const found = overrun(measured);
|
|
348
|
-
if (
|
|
394
|
+
if (found) {
|
|
395
|
+
const { step, stale } = found;
|
|
396
|
+
const again = stale.slice(0, 4).map((s) => {
|
|
397
|
+
const rate = rateOf(steps, s);
|
|
398
|
+
const next = Math.round(s.forecast.lines * (rate?.rate ?? 1));
|
|
399
|
+
return `${s.step} ~${s.forecast.lines} → ~${next}${rate?.kind ? ` (${rate.kind})` : ''}${next > limit ? ` past ${limit}` : ''}`;
|
|
400
|
+
});
|
|
401
|
+
const first = step.first === null ? '' : `, ${step.first} in its first round (${times(step.measured)})`;
|
|
402
|
+
said.push(
|
|
403
|
+
`step ${step.step} of ${step.spec} landed ${step.lines} lines against ~${step.forecast.lines} (${times(step.ratio)}${first}); ` +
|
|
404
|
+
`before the next of its ${stale.length} step(s) forecast when it was goes out, forecast that one again — a \`Size:\` line at the rate \`nina sizes\` gives it — ` +
|
|
405
|
+
`and split it if that puts it past ${limit}; the rest at their turn: ${again.join(', ')}${stale.length > again.length ? ', …' : ''}`,
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
// Only a step still to land: its line can be written again now, and once it lands, the line it carried is history.
|
|
409
|
+
for (const u of unread.filter((x) => !x.landed)) {
|
|
410
|
+
// "~215 raw lines" opens with a number too: what reads is the forecast it is measured by, followed by `lines`.
|
|
411
|
+
said.push(`step ${u.step} of ${u.spec}: no forecast it can read in its \`Size:\` line ("${u.said}") — write it as \`Size: ~N lines in M files\`, the forecast the step is measured by followed by \`lines\`, before the step lands, or no rate counts it`);
|
|
412
|
+
}
|
|
413
|
+
if (said.length === 0) {
|
|
349
414
|
console.log('sizes: current');
|
|
350
415
|
return 0;
|
|
351
416
|
}
|
|
352
|
-
const
|
|
353
|
-
const again = stale.slice(0, 4).map((s) => {
|
|
354
|
-
const rate = rateOf(steps, s);
|
|
355
|
-
const next = Math.round(s.forecast.lines * (rate?.rate ?? 1));
|
|
356
|
-
return `${s.step} ~${s.forecast.lines} → ~${next}${rate?.kind ? ` (${rate.kind})` : ''}${next > limit ? ` past ${limit}` : ''}`;
|
|
357
|
-
});
|
|
358
|
-
const first = step.first === null ? '' : `, ${step.first} in its first round (${times(step.measured)})`;
|
|
359
|
-
console.log(
|
|
360
|
-
`step ${step.step} of ${step.spec} landed ${step.lines} lines against ~${step.forecast.lines} (${times(step.ratio)}${first}); ` +
|
|
361
|
-
`before the next of its ${stale.length} step(s) forecast when it was goes out, forecast that one again — a \`Size:\` line at the rate \`nina sizes\` gives it — ` +
|
|
362
|
-
`and split it if that puts it past ${limit}; the rest at their turn: ${again.join(', ')}${stale.length > again.length ? ', …' : ''}`,
|
|
363
|
-
);
|
|
417
|
+
for (const line of said) console.log(line);
|
|
364
418
|
return 1;
|
|
365
419
|
}
|
|
366
|
-
if (steps.length === 0) {
|
|
420
|
+
if (steps.length === 0 && unread.length === 0) {
|
|
367
421
|
console.log(` no step file under ${SPECS} states a \`Size:\` line yet\n`);
|
|
368
422
|
return 0;
|
|
369
423
|
}
|
|
370
|
-
|
|
424
|
+
// What a step to land carries over its first forecast, beside what its kind's landed steps missed by: rates multiplied
|
|
425
|
+
// onto one another, another kind's among them, read as one step's own.
|
|
426
|
+
const carried = (s) => {
|
|
427
|
+
if (!s.original) return '';
|
|
428
|
+
const factor = s.forecast.lines / s.original.lines;
|
|
429
|
+
const own = kindRate(steps, s);
|
|
430
|
+
const note = ` · first forecast ~${s.original.lines}, ${times(factor)} since`;
|
|
431
|
+
if (own === null) return dim(note);
|
|
432
|
+
const beside = `${note}; its ${s.kind} steps missed by ${times(own)}`;
|
|
433
|
+
return factor > own * OVERRUN ? amber(beside) : dim(beside);
|
|
434
|
+
};
|
|
435
|
+
for (const spec of [...new Set([...steps, ...unread].map((s) => s.spec))]) {
|
|
371
436
|
const mine = steps.filter((s) => s.spec === spec);
|
|
372
437
|
console.log(`\n ${bold(pink(spec))}${dim(` landed against the forecast it was built to; limit ${limit} lines`)}`);
|
|
373
438
|
for (const s of mine.filter((x) => x.landed).sort((a, b) => a.t - b.t)) {
|
|
@@ -382,16 +447,21 @@ export async function sizes(argv) {
|
|
|
382
447
|
for (const s of mine.filter((x) => !x.landed)) {
|
|
383
448
|
const rate = rateOf(steps, s);
|
|
384
449
|
if (!rate) {
|
|
385
|
-
console.log(` ${s.step.padEnd(10)} ~${String(s.forecast.lines).padEnd(5)} ${dim('to land — forecast after every step that landed, so none measures it yet')}`);
|
|
450
|
+
console.log(` ${s.step.padEnd(10)} ~${String(s.forecast.lines).padEnd(5)} ${dim('to land — forecast after every step that landed, so none measures it yet')}${carried(s)}`);
|
|
386
451
|
continue;
|
|
387
452
|
}
|
|
388
453
|
const next = Math.round(s.forecast.lines * rate.rate);
|
|
389
454
|
console.log(
|
|
390
455
|
` ${s.step.padEnd(10)} ~${String(s.forecast.lines).padEnd(5)} → ~${String(next).padEnd(5)} ` +
|
|
391
456
|
dim(`to land, at ${times(rate.rate)} over ${rate.over} ${rate.kind ? `${rate.kind} ` : ''}step(s) forecast as it was`) +
|
|
392
|
-
(next > limit ? amber(` past ${limit}: split`) : '')
|
|
457
|
+
(next > limit ? amber(` past ${limit}: split`) : '') +
|
|
458
|
+
carried(s),
|
|
393
459
|
);
|
|
394
460
|
}
|
|
461
|
+
for (const u of unread.filter((x) => x.spec === spec)) {
|
|
462
|
+
const where = u.landed ? `before ${u.hash.slice(0, 7)}, the commit that landed it,` : 'to land,';
|
|
463
|
+
console.log(` ${u.step.padEnd(10)} ${amber('no forecast it can read')} ${dim(`— its \`Size:\` line ${where} says "${u.said}", so no rate counts it`)}`);
|
|
464
|
+
}
|
|
395
465
|
}
|
|
396
466
|
console.log('');
|
|
397
467
|
return 0;
|
package/src/commands/upgrade.mjs
CHANGED
|
@@ -633,7 +633,7 @@ export async function upgrade(argv, ctx) {
|
|
|
633
633
|
}
|
|
634
634
|
const forecasts = nina(ctx, target, ['sizes', '--project', target, '--check']);
|
|
635
635
|
if (!forecasts.ok && forecasts.out.trim()) {
|
|
636
|
-
console.log('\n
|
|
636
|
+
console.log('\n the step forecasts have something to act on — not caused by this move, now visible:');
|
|
637
637
|
for (const line of forecasts.out.trim().split('\n')) console.log(` ${line}`);
|
|
638
638
|
}
|
|
639
639
|
// The move is done and the tree is sound, but it is not finished: until these are written
|
package/src/gate.mjs
CHANGED
|
@@ -268,6 +268,8 @@ function append(path, entry) {
|
|
|
268
268
|
*
|
|
269
269
|
* - a rejection is cancelled by a pass launched after a fix went out for it: that review saw the fix. A
|
|
270
270
|
* sibling launched with it, or a reviewer launched after it that saw no fix, cancels nothing;
|
|
271
|
+
* - a rejection is withdrawn by a later completion of the agent that made it, passing with no fix sent between:
|
|
272
|
+
* the same review judged again, which nothing else would settle;
|
|
271
273
|
* - a rejection from a review that was already running when the edge's last round went out belongs to
|
|
272
274
|
* that round, and makes no new one;
|
|
273
275
|
* - the rest make this dispatch a round on the edge: one more than the rounds since the loop last
|
|
@@ -335,12 +337,15 @@ export function replay(entries, loops, forward = new Map()) {
|
|
|
335
337
|
};
|
|
336
338
|
|
|
337
339
|
/**
|
|
338
|
-
* A source's waiting verdicts, settled: the rejections no later review of a fix cancelled
|
|
339
|
-
* closes its loops — one that began after the latest fix, with no
|
|
340
|
+
* A source's waiting verdicts, settled: the rejections no later review of a fix cancelled and no later completion of
|
|
341
|
+
* their own agent withdrew, and whether a pass closes its loops — one that began after the latest fix, with no
|
|
342
|
+
* rejection running beside it.
|
|
340
343
|
*/
|
|
341
344
|
const settle = (source, batch) => {
|
|
342
345
|
const passes = batch.filter((v) => !isLoopBack(v.verdict));
|
|
343
|
-
const live = batch.filter(
|
|
346
|
+
const live = batch.filter(
|
|
347
|
+
(v) => isLoopBack(v.verdict) && !passes.some((p) => p.launch > v.at && (p.agent === v.agent || fixBetween(source, v.at, p.launch))),
|
|
348
|
+
);
|
|
344
349
|
return { live, closes: passes.some((p) => p.launch > (lastFix.get(source) ?? -1) && !live.some((v) => v.launch < p.at)) };
|
|
345
350
|
};
|
|
346
351
|
|
|
@@ -461,7 +466,8 @@ export function replay(entries, loops, forward = new Map()) {
|
|
|
461
466
|
const onward = [...forward].filter(([, sources]) => sources.has(source)).map(([stage]) => stage);
|
|
462
467
|
return { source, token, rounds: s.n, cap, given: grace.get(key) ?? 0, issues, closing, targets: [...targetsOf(source)], onward };
|
|
463
468
|
});
|
|
464
|
-
|
|
469
|
+
// A rejection its own agent withdrew waits on no fix: counted as waiting, the next session inherited it.
|
|
470
|
+
const waiting = [...pending.entries()].flatMap(([source, batch]) => settle(source, batch).live.map((v) => ({ source, verdict: v.verdict, issues: v.issues ?? [], index: v.at })));
|
|
465
471
|
return { effect: (to) => effect(to, entries.length), rounds: made, open, waiting };
|
|
466
472
|
}
|
|
467
473
|
|