@attalabs/vinaya 0.4.3 → 0.4.5
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/aeg-root/enforcement.md +1 -1
- package/aeg-root/state-machine.md +1 -1
- package/dist/checks/bin/check-branch-topology.js +55 -33
- package/dist/checks/bin/check-brief-shape.js +61 -34
- package/dist/checks/bin/check-closes-n.js +55 -33
- package/dist/checks/bin/check-coherence.js +55 -33
- package/dist/checks/bin/check-dead-branch-push.js +55 -33
- package/dist/checks/bin/check-dispatch-readiness.js +55 -33
- package/dist/checks/bin/check-doc-coverage-push.js +232 -36
- package/dist/checks/bin/check-doc-coverage.js +232 -36
- package/dist/checks/bin/check-first-push-dispatch.js +55 -33
- package/dist/checks/bin/check-issue-assignment.js +55 -33
- package/dist/checks/bin/check-no-disk-state.js +55 -33
- package/dist/checks/bin/check-reader-resolvable-prose.js +55 -33
- package/dist/checks/bin/check-registry-gates.js +55 -33
- package/dist/checks/bin/check-review-gate.js +233 -38
- package/dist/checks/bin/check-single-plan-pr.js +55 -33
- package/dist/checks/bin/check-test-plan.js +55 -33
- package/dist/index.js +138 -42
- package/package.json +1 -1
- package/studio-standalone/.worktrees/fix/bump-0.4.4/.vinaya/projects.md +63 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/aeg-manual-flow.md +216 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/archivist-tranche-archivist.md +92 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/brief-developer.md +140 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/developer-reviewer.md +106 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/planner-brief.md +130 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/reviewer-archivist.md +96 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/tranche-archivist-planner.md +116 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/coordination.md +293 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/documentation-coherence.md +65 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/enforcement.md +161 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/glossary.md +36 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/process.md +371 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/reviewer-prompt.md +68 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/archivist.md +167 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/brief-author.md +108 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/developer.md +429 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/planner.md +285 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/principal.md +107 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/reviewer.md +130 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/security.md +121 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/tranche-archivist.md +257 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/skills/aeg/SKILL.md +90 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/skills/aeg-roles/SKILL.md +58 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/skills/brief-authoring/SKILL.md +497 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/state-machine.md +656 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/templates/brief-template.md +103 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/templates/issue-rationale-template.md +35 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/templates/pr-report-template.md +68 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranche-model.md +306 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-coherence-v1.md +55 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-coherence-v1.tokens.md +13 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-consolidation.md +28 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-governance-hardening.md +80 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-governance-ui-v2.md +168 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-governance-ui-v2.tokens.md +18 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-studio-cleanup.md +37 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-ui-v1.md +176 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-ui-v1.tokens.md +17 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/herald-agents-v2.md +35 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/herald-agents-v2.tokens.md +11 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/herald-onto-engine.md +99 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/vada-agents-v2.md +220 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/apps/vinaya/cli/tests/fixtures/checks/vinaya.config.json +9 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/node_modules/@attalabs/vinaya/tests/fixtures/checks/vinaya.config.json +9 -0
- package/studio-standalone/.worktrees/fix/bump-0.4.4/vinaya.config.json +36 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/.vinaya/projects.md +63 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/aeg-manual-flow.md +216 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/archivist-tranche-archivist.md +92 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/brief-developer.md +140 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/developer-reviewer.md +106 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/planner-brief.md +130 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/reviewer-archivist.md +96 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/tranche-archivist-planner.md +116 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/coordination.md +293 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/documentation-coherence.md +65 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/enforcement.md +161 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/glossary.md +36 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/process.md +371 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/reviewer-prompt.md +68 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/archivist.md +167 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/brief-author.md +108 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/developer.md +429 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/planner.md +285 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/principal.md +107 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/reviewer.md +130 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/security.md +121 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/tranche-archivist.md +257 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/skills/aeg/SKILL.md +90 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/skills/aeg-roles/SKILL.md +58 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/skills/brief-authoring/SKILL.md +497 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/state-machine.md +656 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/templates/brief-template.md +103 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/templates/issue-rationale-template.md +35 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/templates/pr-report-template.md +68 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranche-model.md +306 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-coherence-v1.md +55 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-coherence-v1.tokens.md +13 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-consolidation.md +28 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-governance-hardening.md +80 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-governance-ui-v2.md +168 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-governance-ui-v2.tokens.md +18 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-studio-cleanup.md +37 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-ui-v1.md +176 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-ui-v1.tokens.md +17 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/herald-agents-v2.md +35 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/herald-agents-v2.tokens.md +11 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/herald-onto-engine.md +99 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/vada-agents-v2.md +220 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/apps/vinaya/cli/tests/fixtures/checks/vinaya.config.json +9 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/node_modules/@attalabs/vinaya/tests/fixtures/checks/vinaya.config.json +9 -0
- package/studio-standalone/.worktrees/fix/check-lifecycle-phase/vinaya.config.json +36 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/.vinaya/projects.md +63 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/aeg-manual-flow.md +216 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/archivist-tranche-archivist.md +92 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/brief-developer.md +140 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/developer-reviewer.md +106 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/planner-brief.md +130 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/reviewer-archivist.md +96 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/tranche-archivist-planner.md +116 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/coordination.md +293 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/documentation-coherence.md +65 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/enforcement.md +161 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/glossary.md +36 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/process.md +371 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/reviewer-prompt.md +68 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/archivist.md +167 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/brief-author.md +108 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/developer.md +429 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/planner.md +285 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/principal.md +107 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/reviewer.md +130 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/security.md +121 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/tranche-archivist.md +257 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/skills/aeg/SKILL.md +90 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/skills/aeg-roles/SKILL.md +58 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/skills/brief-authoring/SKILL.md +497 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/state-machine.md +656 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/templates/brief-template.md +103 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/templates/issue-rationale-template.md +35 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/templates/pr-report-template.md +68 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranche-model.md +306 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-coherence-v1.md +55 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-coherence-v1.tokens.md +13 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-consolidation.md +28 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-governance-hardening.md +80 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-governance-ui-v2.md +168 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-governance-ui-v2.tokens.md +18 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-studio-cleanup.md +37 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-ui-v1.md +176 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-ui-v1.tokens.md +17 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/herald-agents-v2.md +35 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/herald-agents-v2.tokens.md +11 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/herald-onto-engine.md +99 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/vada-agents-v2.md +220 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/apps/vinaya/cli/tests/fixtures/checks/vinaya.config.json +9 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/node_modules/@attalabs/vinaya/tests/fixtures/checks/vinaya.config.json +9 -0
- package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/vinaya.config.json +36 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/.vinaya/projects.md +63 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/aeg-manual-flow.md +216 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/archivist-tranche-archivist.md +92 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/brief-developer.md +140 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/developer-reviewer.md +106 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/planner-brief.md +130 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/reviewer-archivist.md +96 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/tranche-archivist-planner.md +116 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/coordination.md +293 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/documentation-coherence.md +65 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/enforcement.md +161 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/glossary.md +36 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/process.md +371 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/reviewer-prompt.md +68 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/archivist.md +167 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/brief-author.md +108 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/developer.md +429 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/planner.md +285 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/principal.md +107 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/reviewer.md +130 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/security.md +121 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/tranche-archivist.md +257 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/skills/aeg/SKILL.md +90 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/skills/aeg-roles/SKILL.md +58 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/skills/brief-authoring/SKILL.md +497 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/state-machine.md +656 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/templates/brief-template.md +103 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/templates/issue-rationale-template.md +35 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/templates/pr-report-template.md +68 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranche-model.md +306 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-coherence-v1.md +55 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-coherence-v1.tokens.md +13 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-consolidation.md +28 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-governance-hardening.md +80 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-governance-ui-v2.md +168 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-governance-ui-v2.tokens.md +18 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-studio-cleanup.md +37 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-ui-v1.md +176 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-ui-v1.tokens.md +17 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/herald-agents-v2.md +35 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/herald-agents-v2.tokens.md +11 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/herald-onto-engine.md +99 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/vada-agents-v2.md +220 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/apps/vinaya/cli/tests/fixtures/checks/vinaya.config.json +9 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/node_modules/@attalabs/vinaya/tests/fixtures/checks/vinaya.config.json +9 -0
- package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/vinaya.config.json +36 -0
- package/studio-standalone/_node_modules/@atta/vinaya-cli/aeg-root/enforcement.md +1 -1
- package/studio-standalone/_node_modules/@atta/vinaya-cli/aeg-root/state-machine.md +1 -1
- package/studio-standalone/_node_modules/@attalabs/vinaya/aeg-root/enforcement.md +1 -1
- package/studio-standalone/_node_modules/@attalabs/vinaya/aeg-root/state-machine.md +1 -1
- package/studio-standalone/apps/vinaya/cli/aeg-root/enforcement.md +1 -1
- package/studio-standalone/apps/vinaya/cli/aeg-root/state-machine.md +1 -1
- package/studio-standalone/apps/vinaya/web/.next/BUILD_ID +1 -1
- package/studio-standalone/apps/vinaya/web/.next/build-manifest.json +3 -3
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/cli/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/config/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(standalone)/cli/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(standalone)/harness/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(standalone)/state-machine/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(with-sidebar)/[...slug]/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(with-sidebar)/reference/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/install/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/roadmap/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/archive/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/brief/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/develop/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/overview/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/plan/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/quick/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/review/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/security/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/wrap-up/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/state-machine/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/the-harness/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/the-studio/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.html +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.rsc +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/api/coherence/route.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/studio/backlog/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/studio/docs/[...slug]/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/studio/docs/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/studio/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/studio/projects/[name]/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/studio/projects/[name]/tranches/[slug]/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/studio/projects/[name]/tranches/[slug]/tasks/[taskId]/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/studio/projects/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/app/studio/tranches/page.js.nft.json +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/chunks/ssr/[root-of-the-server]__0kqmrho._.js +1 -1
- package/studio-standalone/apps/vinaya/web/.next/server/chunks/ssr/[root-of-the-server]__1dxaovd._.js +2 -2
- package/studio-standalone/apps/vinaya/web/.next/server/middleware-build-manifest.js +3 -3
- package/studio-standalone/apps/vinaya/web/.next/server/pages/500.html +1 -1
- /package/studio-standalone/apps/vinaya/web/.next/static/{Afs41Lu9uNQ-T6uC-tm4_ → LixrFgIixvAYndTclqOnR}/_buildManifest.js +0 -0
- /package/studio-standalone/apps/vinaya/web/.next/static/{Afs41Lu9uNQ-T6uC-tm4_ → LixrFgIixvAYndTclqOnR}/_clientMiddlewareManifest.js +0 -0
- /package/studio-standalone/apps/vinaya/web/.next/static/{Afs41Lu9uNQ-T6uC-tm4_ → LixrFgIixvAYndTclqOnR}/_ssgManifest.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/checks/bin/check-doc-coverage-push.ts
|
|
4
|
-
import { execFileSync as
|
|
4
|
+
import { execFileSync as execFileSync3 } from "node:child_process";
|
|
5
5
|
import { existsSync, readFileSync } from "node:fs";
|
|
6
6
|
// ../../../packages/aeg-core/src/anchored-region.ts
|
|
7
7
|
function maskCode(body) {
|
|
@@ -1452,12 +1452,16 @@ function isCodeFile(p) {
|
|
|
1452
1452
|
var WAIVER_LABEL = label("waiver-docs");
|
|
1453
1453
|
var WAIVER_LABEL_REVIEW = label("waiver-review");
|
|
1454
1454
|
var PRINCIPAL_ALLOWLIST = ["daniboomerang"];
|
|
1455
|
+
function isPrincipal(login, principalAllowlist) {
|
|
1456
|
+
if (login === null)
|
|
1457
|
+
return false;
|
|
1458
|
+
const normalized = login.toLowerCase();
|
|
1459
|
+
return principalAllowlist.some((p) => p.toLowerCase() === normalized);
|
|
1460
|
+
}
|
|
1455
1461
|
function isWaiverLabelActorVerified(opts) {
|
|
1456
1462
|
if (!opts.labels.includes(opts.label))
|
|
1457
1463
|
return false;
|
|
1458
|
-
|
|
1459
|
-
return false;
|
|
1460
|
-
return opts.principalAllowlist.includes(opts.labelActor);
|
|
1464
|
+
return isPrincipal(opts.labelActor, opts.principalAllowlist);
|
|
1461
1465
|
}
|
|
1462
1466
|
|
|
1463
1467
|
// ../../../packages/aeg-core/src/doc-owners.ts
|
|
@@ -1645,6 +1649,27 @@ function overrideActive(opts) {
|
|
|
1645
1649
|
// ../../../packages/aeg-core/src/premise-check.ts
|
|
1646
1650
|
var ASSERTION_KINDS = new Set(["contains", "absent", "sha256"]);
|
|
1647
1651
|
|
|
1652
|
+
// ../../../packages/aeg-core/src/test-plan-section.ts
|
|
1653
|
+
var HEADING_FORM_RE = /^#{1,4}[ \t]*(?:\d+[a-z]?\.[ \t]*)?\*{0,2}Test Plan\*{0,2}[ \t]*$/im;
|
|
1654
|
+
var INLINE_FORM_RE = /^[ \t]*\*{0,2}Test Plan:?\*{0,2}/im;
|
|
1655
|
+
var NEXT_SECTION_RE = /\n(?:#{1,3}[ \t]|\*\*[A-Z][^*\n]*:\*\*)/;
|
|
1656
|
+
function locateTestPlanSection(body) {
|
|
1657
|
+
const region = anchoredRegion(body, "TEST-PLAN");
|
|
1658
|
+
if (region !== null)
|
|
1659
|
+
return { found: true, section: region };
|
|
1660
|
+
const headingMatch = HEADING_FORM_RE.exec(body);
|
|
1661
|
+
const match = headingMatch ?? INLINE_FORM_RE.exec(body);
|
|
1662
|
+
if (!match || match.index === undefined)
|
|
1663
|
+
return { found: false };
|
|
1664
|
+
const sectionBody = body.slice(match.index);
|
|
1665
|
+
const firstLineEnd = sectionBody.indexOf(`
|
|
1666
|
+
`);
|
|
1667
|
+
const searchFrom = firstLineEnd === -1 ? sectionBody.length : firstLineEnd + 1;
|
|
1668
|
+
const nextMatch = sectionBody.slice(searchFrom).match(NEXT_SECTION_RE);
|
|
1669
|
+
const sectionEnd = nextMatch ? searchFrom + (nextMatch.index ?? 0) : sectionBody.length;
|
|
1670
|
+
return { found: true, section: sectionBody.slice(0, sectionEnd) };
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1648
1673
|
// ../../../packages/aeg-core/src/brief-validation.ts
|
|
1649
1674
|
function headerRegion(prBody) {
|
|
1650
1675
|
const m = prBody.match(/^##\s/m);
|
|
@@ -1683,10 +1708,15 @@ function checkTierField(prBody, readTier) {
|
|
|
1683
1708
|
};
|
|
1684
1709
|
}
|
|
1685
1710
|
var TEST_PLAN_UNIT_TESTS_ONLY_RE = /(?:\*\*)?Test Plan(?:\*\*)?\s*:\s*(?:\*\*)?\s*unit-tests-only/i;
|
|
1711
|
+
function testPlanRegion(prBody) {
|
|
1712
|
+
const located = locateTestPlanSection(prBody);
|
|
1713
|
+
return located.found ? located.section : prBody;
|
|
1714
|
+
}
|
|
1686
1715
|
function checkTestPlan(prBody) {
|
|
1687
|
-
|
|
1716
|
+
const region = testPlanRegion(prBody);
|
|
1717
|
+
if (TEST_PLAN_UNIT_TESTS_ONLY_RE.test(region))
|
|
1688
1718
|
return { status: "pass", errors: [] };
|
|
1689
|
-
if (/\*\*\[(?:agent|principal)\]\*\*/.test(
|
|
1719
|
+
if (/\*\*\[(?:agent|principal)\]\*\*/.test(region))
|
|
1690
1720
|
return { status: "pass", errors: [] };
|
|
1691
1721
|
return {
|
|
1692
1722
|
status: "fail",
|
|
@@ -1696,9 +1726,10 @@ function checkTestPlan(prBody) {
|
|
|
1696
1726
|
};
|
|
1697
1727
|
}
|
|
1698
1728
|
function checkTestPlanExclusivity(prBody) {
|
|
1699
|
-
|
|
1729
|
+
const region = testPlanRegion(prBody);
|
|
1730
|
+
if (!TEST_PLAN_UNIT_TESTS_ONLY_RE.test(region))
|
|
1700
1731
|
return { status: "pass", errors: [] };
|
|
1701
|
-
if (/^-\s*\[[ xX]\]\s*\*{2}\[(?:agent|principal)\]\*{2}/im.test(
|
|
1732
|
+
if (/^-\s*\[[ xX]\]\s*\*{2}\[(?:agent|principal)\]\*{2}/im.test(region)) {
|
|
1702
1733
|
return {
|
|
1703
1734
|
status: "fail",
|
|
1704
1735
|
errors: [
|
|
@@ -1709,8 +1740,9 @@ function checkTestPlanExclusivity(prBody) {
|
|
|
1709
1740
|
return { status: "pass", errors: [] };
|
|
1710
1741
|
}
|
|
1711
1742
|
function checkPrincipalPlaceholder(prBody) {
|
|
1743
|
+
const region = testPlanRegion(prBody);
|
|
1712
1744
|
const lineRe = /^-\s*\[[ xX]\]\s*\*{2}\[principal\]\*{2}(.*)$/gim;
|
|
1713
|
-
for (const m of
|
|
1745
|
+
for (const m of region.matchAll(lineRe)) {
|
|
1714
1746
|
const content = m[1] ?? "";
|
|
1715
1747
|
if (/^\s*None\b/i.test(content)) {
|
|
1716
1748
|
return {
|
|
@@ -1789,6 +1821,15 @@ function checkClosesN(prBody) {
|
|
|
1789
1821
|
errors: ["brief-validation Closes #N: no `Closes #<N>` (or Fixes/Resolves) reference found in the PR body."]
|
|
1790
1822
|
};
|
|
1791
1823
|
}
|
|
1824
|
+
var BRIEF_SHAPE_MARKERS = [checkSurfaceMap, checkDocUpdateList, checkStopConditions, checkAutonomyClause];
|
|
1825
|
+
var TASK_BRANCH_PATTERN = /^task\/[^/]+\/[^/]+$/;
|
|
1826
|
+
function isTaskBranch(branch) {
|
|
1827
|
+
return TASK_BRANCH_PATTERN.test(branch);
|
|
1828
|
+
}
|
|
1829
|
+
function isBriefShaped(prBody) {
|
|
1830
|
+
const stripped = stripCode(prBody);
|
|
1831
|
+
return BRIEF_SHAPE_MARKERS.filter((check) => check(stripped).status === "pass").length >= 2;
|
|
1832
|
+
}
|
|
1792
1833
|
function checkBriefSections(prBody, readTier, options = {}) {
|
|
1793
1834
|
const { requireClosesN = true } = options;
|
|
1794
1835
|
const results = [
|
|
@@ -2158,11 +2199,12 @@ function isReviewGateExemptBranch(branch) {
|
|
|
2158
2199
|
return branch.startsWith("plan/");
|
|
2159
2200
|
}
|
|
2160
2201
|
function checkReviewGate(input) {
|
|
2202
|
+
const principalAllowlist = input.principalAllowlist ?? PRINCIPAL_ALLOWLIST;
|
|
2161
2203
|
const waived = isWaiverLabelActorVerified({
|
|
2162
2204
|
label: WAIVER_LABEL_REVIEW,
|
|
2163
2205
|
labels: input.labels,
|
|
2164
2206
|
labelActor: input.waiverLabelActor,
|
|
2165
|
-
principalAllowlist
|
|
2207
|
+
principalAllowlist
|
|
2166
2208
|
});
|
|
2167
2209
|
if (waived) {
|
|
2168
2210
|
return {
|
|
@@ -2171,8 +2213,8 @@ function checkReviewGate(input) {
|
|
|
2171
2213
|
waived: true
|
|
2172
2214
|
};
|
|
2173
2215
|
}
|
|
2174
|
-
const verified = input.comments.filter((c) => c.author
|
|
2175
|
-
const ignoredCount = input.comments.filter((c) => (c.author
|
|
2216
|
+
const verified = input.comments.filter((c) => isPrincipal(c.author, principalAllowlist));
|
|
2217
|
+
const ignoredCount = input.comments.filter((c) => !isPrincipal(c.author, principalAllowlist) && c.body.includes("VERDICT")).length;
|
|
2176
2218
|
const verifiedBodies = verified.map((c) => c.body);
|
|
2177
2219
|
const codeReview = extractCodeReviewVerdict(verifiedBodies);
|
|
2178
2220
|
const security = extractSecurityReviewVerdict(verifiedBodies);
|
|
@@ -2725,28 +2767,8 @@ function decideIssueAssignment(input) {
|
|
|
2725
2767
|
reason: `First push of \`${branch}\` — assigning Issue #${issue} to @${login} (the authenticated pusher).`
|
|
2726
2768
|
};
|
|
2727
2769
|
}
|
|
2728
|
-
// ../../../packages/aeg-core/src/test-plan-section.ts
|
|
2729
|
-
var HEADING_FORM_RE = /^#{1,4}[ \t]*(?:\d+[a-z]?\.[ \t]*)?\*{0,2}Test Plan\*{0,2}[ \t]*$/im;
|
|
2730
|
-
var INLINE_FORM_RE = /^[ \t]*\*{0,2}Test Plan:?\*{0,2}/im;
|
|
2731
|
-
var NEXT_SECTION_RE = /\n(?:#{1,3}[ \t]|\*\*[A-Z][^*\n]*:\*\*)/;
|
|
2732
|
-
function locateTestPlanSection(body) {
|
|
2733
|
-
const region = anchoredRegion(body, "TEST-PLAN");
|
|
2734
|
-
if (region !== null)
|
|
2735
|
-
return { found: true, section: region };
|
|
2736
|
-
const headingMatch = HEADING_FORM_RE.exec(body);
|
|
2737
|
-
const match = headingMatch ?? INLINE_FORM_RE.exec(body);
|
|
2738
|
-
if (!match || match.index === undefined)
|
|
2739
|
-
return { found: false };
|
|
2740
|
-
const sectionBody = body.slice(match.index);
|
|
2741
|
-
const firstLineEnd = sectionBody.indexOf(`
|
|
2742
|
-
`);
|
|
2743
|
-
const searchFrom = firstLineEnd === -1 ? sectionBody.length : firstLineEnd + 1;
|
|
2744
|
-
const nextMatch = sectionBody.slice(searchFrom).match(NEXT_SECTION_RE);
|
|
2745
|
-
const sectionEnd = nextMatch ? searchFrom + (nextMatch.index ?? 0) : sectionBody.length;
|
|
2746
|
-
return { found: true, section: sectionBody.slice(0, sectionEnd) };
|
|
2747
|
-
}
|
|
2748
2770
|
// ../../../packages/aeg-core/src/test-plan-gate.ts
|
|
2749
|
-
var
|
|
2771
|
+
var TASK_BRANCH_PATTERN2 = /^task\/[^/]+\/[^/]+$/;
|
|
2750
2772
|
function evaluateTestPlanGate(body, branch) {
|
|
2751
2773
|
if (!body) {
|
|
2752
2774
|
return {
|
|
@@ -2759,7 +2781,7 @@ function evaluateTestPlanGate(body, branch) {
|
|
|
2759
2781
|
}
|
|
2760
2782
|
const located = locateTestPlanSection(body);
|
|
2761
2783
|
if (!located.found) {
|
|
2762
|
-
if (
|
|
2784
|
+
if (TASK_BRANCH_PATTERN2.test(branch)) {
|
|
2763
2785
|
return {
|
|
2764
2786
|
verdict: "fail",
|
|
2765
2787
|
messages: [
|
|
@@ -2816,11 +2838,183 @@ function emitCheckError(error) {
|
|
|
2816
2838
|
`);
|
|
2817
2839
|
}
|
|
2818
2840
|
|
|
2841
|
+
// src/lib/config.ts
|
|
2842
|
+
import { execFileSync as execFileSync2 } from "node:child_process";
|
|
2843
|
+
import { homedir } from "node:os";
|
|
2844
|
+
import { dirname, join } from "node:path";
|
|
2845
|
+
import { z } from "zod";
|
|
2846
|
+
var EnvEntrySchema = z.union([
|
|
2847
|
+
z.literal(true),
|
|
2848
|
+
z.object({ optional: z.literal(true) }),
|
|
2849
|
+
z.object({ anyOf: z.array(z.string()).min(2) }),
|
|
2850
|
+
z.string()
|
|
2851
|
+
]);
|
|
2852
|
+
var CheckEntrySchema = z.object({
|
|
2853
|
+
run: z.string(),
|
|
2854
|
+
scope: z.enum(["diff", "full"]),
|
|
2855
|
+
include: z.array(z.string()).optional(),
|
|
2856
|
+
args: z.array(z.string()).optional(),
|
|
2857
|
+
timeoutMs: z.number().optional(),
|
|
2858
|
+
env: z.record(z.string(), EnvEntrySchema).optional(),
|
|
2859
|
+
requiresOpenPr: z.boolean().optional()
|
|
2860
|
+
}).superRefine((entry2, ctx) => {
|
|
2861
|
+
if (!entry2.env)
|
|
2862
|
+
return;
|
|
2863
|
+
for (const [key, value] of Object.entries(entry2.env)) {
|
|
2864
|
+
if (typeof value !== "object" || value === null || !("anyOf" in value))
|
|
2865
|
+
continue;
|
|
2866
|
+
const members = value.anyOf;
|
|
2867
|
+
if (new Set(members).size !== members.length) {
|
|
2868
|
+
ctx.addIssue({
|
|
2869
|
+
code: z.ZodIssueCode.custom,
|
|
2870
|
+
message: `env.${key}.anyOf has duplicate members`,
|
|
2871
|
+
path: ["env", key, "anyOf"]
|
|
2872
|
+
});
|
|
2873
|
+
}
|
|
2874
|
+
if (!members.includes(key)) {
|
|
2875
|
+
ctx.addIssue({
|
|
2876
|
+
code: z.ZodIssueCode.custom,
|
|
2877
|
+
message: `env.${key}.anyOf must include "${key}" itself as a member`,
|
|
2878
|
+
path: ["env", key, "anyOf"]
|
|
2879
|
+
});
|
|
2880
|
+
}
|
|
2881
|
+
}
|
|
2882
|
+
});
|
|
2883
|
+
var BRIEF_BUILTINS = [
|
|
2884
|
+
"tier",
|
|
2885
|
+
"testPlan",
|
|
2886
|
+
"testPlanExclusivity",
|
|
2887
|
+
"principalPlaceholder",
|
|
2888
|
+
"surfaceMap",
|
|
2889
|
+
"docUpdateList",
|
|
2890
|
+
"worktreeStep0",
|
|
2891
|
+
"stopConditions",
|
|
2892
|
+
"autonomyClause",
|
|
2893
|
+
"project",
|
|
2894
|
+
"for",
|
|
2895
|
+
"closesN",
|
|
2896
|
+
"premiseCoverage",
|
|
2897
|
+
"issueRationale"
|
|
2898
|
+
];
|
|
2899
|
+
var BriefSectionSchema = z.union([
|
|
2900
|
+
z.object({ builtin: z.enum(BRIEF_BUILTINS) }),
|
|
2901
|
+
z.object({ heading: z.string().min(1), name: z.string().optional() }),
|
|
2902
|
+
z.object({ field: z.string().min(1), name: z.string().optional() }),
|
|
2903
|
+
z.object({ phrase: z.string().min(1), name: z.string().optional() })
|
|
2904
|
+
]);
|
|
2905
|
+
var BriefSchemaSchema = z.object({
|
|
2906
|
+
pr: z.object({ sections: z.array(BriefSectionSchema) }).optional(),
|
|
2907
|
+
issue: z.object({ sections: z.array(BriefSectionSchema) }).optional()
|
|
2908
|
+
});
|
|
2909
|
+
function isSafeRepoRelPath(p) {
|
|
2910
|
+
if (p.length === 0)
|
|
2911
|
+
return false;
|
|
2912
|
+
if (p.startsWith("/") || /^[a-zA-Z]:[\\/]/.test(p))
|
|
2913
|
+
return false;
|
|
2914
|
+
return p.split(/[\\/]/).every((seg) => seg !== ".." && seg !== "");
|
|
2915
|
+
}
|
|
2916
|
+
var SafeRepoRelPath = z.string().refine(isSafeRepoRelPath, {
|
|
2917
|
+
message: "must be a repo-root-relative path with no `..` segment or absolute root"
|
|
2918
|
+
});
|
|
2919
|
+
var ManagedBlockRecordSchema = z.object({
|
|
2920
|
+
path: SafeRepoRelPath,
|
|
2921
|
+
marker: z.string(),
|
|
2922
|
+
comment: z.enum(["hash", "html"])
|
|
2923
|
+
});
|
|
2924
|
+
var ManagedManifestSchema = z.object({
|
|
2925
|
+
version: z.number().int().positive(),
|
|
2926
|
+
files: z.array(SafeRepoRelPath),
|
|
2927
|
+
blocks: z.array(ManagedBlockRecordSchema),
|
|
2928
|
+
labels: z.array(z.string())
|
|
2929
|
+
});
|
|
2930
|
+
var VinayaConfigSchema = z.object({
|
|
2931
|
+
rings: z.object({
|
|
2932
|
+
ring1_forgeWriteInterception: z.boolean(),
|
|
2933
|
+
ring2_asyncAudits: z.boolean()
|
|
2934
|
+
}).optional(),
|
|
2935
|
+
checks: z.record(z.string(), CheckEntrySchema).optional(),
|
|
2936
|
+
briefSchema: BriefSchemaSchema.optional(),
|
|
2937
|
+
managed: ManagedManifestSchema.optional(),
|
|
2938
|
+
principals: z.array(z.string()).min(1).optional()
|
|
2939
|
+
});
|
|
2940
|
+
var GLOBAL_VINAYA_HOME = join(homedir(), ".vinaya");
|
|
2941
|
+
var GLOBAL_CONFIG_PATH = join(GLOBAL_VINAYA_HOME, "config.json");
|
|
2942
|
+
var LOCAL_CONFIG_FILENAME = "vinaya.config.json";
|
|
2943
|
+
function resolvePrincipalAllowlist(config) {
|
|
2944
|
+
return config?.principals ?? PRINCIPAL_ALLOWLIST;
|
|
2945
|
+
}
|
|
2946
|
+
function trustAnchorRepo() {
|
|
2947
|
+
const wellFormed = (slug) => /^[^/\s]+\/[^/\s]+$/.test(slug) ? slug : null;
|
|
2948
|
+
const fromRunner = process.env.GITHUB_REPOSITORY?.trim();
|
|
2949
|
+
if (fromRunner) {
|
|
2950
|
+
const validated = wellFormed(fromRunner);
|
|
2951
|
+
if (validated)
|
|
2952
|
+
return validated;
|
|
2953
|
+
}
|
|
2954
|
+
try {
|
|
2955
|
+
const url = execFileSync2("git", ["remote", "get-url", "origin"], {
|
|
2956
|
+
encoding: "utf-8",
|
|
2957
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
2958
|
+
}).trim();
|
|
2959
|
+
const m = url.match(/github\.com[:/]([^/]+)\/(.+?)(?:\.git)?\/?$/);
|
|
2960
|
+
return m?.[1] && m[2] ? wellFormed(`${m[1]}/${m[2]}`) : null;
|
|
2961
|
+
} catch {
|
|
2962
|
+
return null;
|
|
2963
|
+
}
|
|
2964
|
+
}
|
|
2965
|
+
function ghFetchTrustAnchorConfig() {
|
|
2966
|
+
const repo = trustAnchorRepo();
|
|
2967
|
+
if (!repo)
|
|
2968
|
+
throw new Error("could not resolve repo identity for the trust-anchor read");
|
|
2969
|
+
return execFileSync2("gh", ["api", `repos/${repo}/contents/${LOCAL_CONFIG_FILENAME}`, "--jq", ".content"], {
|
|
2970
|
+
encoding: "utf-8",
|
|
2971
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
2972
|
+
});
|
|
2973
|
+
}
|
|
2974
|
+
function firstLine(err) {
|
|
2975
|
+
return err?.message?.split(`
|
|
2976
|
+
`)[0] ?? "unknown error";
|
|
2977
|
+
}
|
|
2978
|
+
function isMissingFileError(err) {
|
|
2979
|
+
const stderr = err?.stderr;
|
|
2980
|
+
const haystack = [
|
|
2981
|
+
err?.message ?? "",
|
|
2982
|
+
typeof stderr === "string" ? stderr : stderr?.toString() ?? ""
|
|
2983
|
+
].join(`
|
|
2984
|
+
`);
|
|
2985
|
+
return /\b404\b|not found/i.test(haystack);
|
|
2986
|
+
}
|
|
2987
|
+
function loadTrustAnchorConfig(fetcher = ghFetchTrustAnchorConfig) {
|
|
2988
|
+
const warn = (why) => process.stdout.write(`⚠ could not read \`principals\` from the default branch (${why}) — falling back to vinaya's built-in principal allowlist.
|
|
2989
|
+
`);
|
|
2990
|
+
let base64;
|
|
2991
|
+
try {
|
|
2992
|
+
base64 = fetcher().trim();
|
|
2993
|
+
} catch (err) {
|
|
2994
|
+
if (!isMissingFileError(err))
|
|
2995
|
+
warn(firstLine(err));
|
|
2996
|
+
return null;
|
|
2997
|
+
}
|
|
2998
|
+
if (!base64)
|
|
2999
|
+
return null;
|
|
3000
|
+
try {
|
|
3001
|
+
const raw = Buffer.from(base64, "base64").toString("utf-8");
|
|
3002
|
+
const parsed = VinayaConfigSchema.safeParse(JSON.parse(raw));
|
|
3003
|
+
if (parsed.success)
|
|
3004
|
+
return parsed.data;
|
|
3005
|
+
warn("it did not satisfy the config schema");
|
|
3006
|
+
return null;
|
|
3007
|
+
} catch {
|
|
3008
|
+
warn("it was not readable as JSON");
|
|
3009
|
+
return null;
|
|
3010
|
+
}
|
|
3011
|
+
}
|
|
3012
|
+
|
|
2819
3013
|
// src/checks/bin/check-doc-coverage-push.ts
|
|
2820
3014
|
var CHECK_NAME = "doc-coverage-push";
|
|
2821
3015
|
function git(args) {
|
|
2822
3016
|
try {
|
|
2823
|
-
return
|
|
3017
|
+
return execFileSync3("git", args, { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }).trim();
|
|
2824
3018
|
} catch {
|
|
2825
3019
|
return "";
|
|
2826
3020
|
}
|
|
@@ -2843,11 +3037,13 @@ function resolvePrBody() {
|
|
|
2843
3037
|
}
|
|
2844
3038
|
function waiverActiveFromEnv() {
|
|
2845
3039
|
const labels = (process.env.PR_LABELS || "").split(",").map((s) => s.trim()).filter(Boolean);
|
|
3040
|
+
if (!labels.includes(WAIVER_LABEL))
|
|
3041
|
+
return false;
|
|
2846
3042
|
return isWaiverLabelActorVerified({
|
|
2847
3043
|
label: WAIVER_LABEL,
|
|
2848
3044
|
labels,
|
|
2849
3045
|
labelActor: process.env.WAIVER_LABEL_ACTOR || null,
|
|
2850
|
-
principalAllowlist:
|
|
3046
|
+
principalAllowlist: resolvePrincipalAllowlist(loadTrustAnchorConfig())
|
|
2851
3047
|
});
|
|
2852
3048
|
}
|
|
2853
3049
|
function main() {
|