@event4u/agent-config 7.5.0 → 8.0.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/.claude-plugin/marketplace.json +8 -1
- package/AGENTS.md +9 -9
- package/CHANGELOG.md +325 -0
- package/README.md +35 -5
- package/dist/agent-src/commands/analytics/prune.md +1 -1
- package/dist/agent-src/commands/analytics/show.md +1 -1
- package/dist/agent-src/commands/analyze/decision.md +2 -2
- package/dist/agent-src/commands/analyze/incident.md +2 -2
- package/dist/agent-src/commands/analyze/near-miss.md +2 -2
- package/dist/agent-src/commands/analyze/postmortem.md +2 -2
- package/dist/agent-src/commands/analyze/premortem.md +2 -2
- package/dist/agent-src/commands/cost-report.md +25 -0
- package/dist/agent-src/commands/evals/analyze.json +30 -0
- package/dist/agent-src/commands/evals/mission-upgrade.json +30 -0
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -1
- package/dist/agent-src/commands/knowledge/ingest.md +1 -1
- package/dist/agent-src/commands/knowledge/list.md +1 -1
- package/dist/agent-src/commands/memory/load.md +12 -11
- package/dist/agent-src/commands/memory/promote.md +30 -0
- package/dist/agent-src/commands/memory/propose.md +16 -2
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/module/explore.md +11 -7
- package/dist/agent-src/commands/optimize-project.md +243 -0
- package/dist/agent-src/commands/optimize.md +5 -0
- package/dist/agent-src/commands/pr/create.md +37 -8
- package/dist/agent-src/commands/prediction-pool.md +2 -2
- package/dist/agent-src/commands/profile/activate.md +3 -3
- package/dist/agent-src/commands/profile/deactivate.md +2 -2
- package/dist/agent-src/commands/profile/show.md +3 -3
- package/dist/agent-src/commands/research/deep.md +5 -0
- package/dist/agent-src/commands/research/report.md +2 -1
- package/dist/agent-src/commands/roadmap/create.md +88 -10
- package/dist/agent-src/commands/roadmap/materialize.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +15 -2
- package/dist/agent-src/commands/roadmap/process-phase.md +18 -6
- package/dist/agent-src/commands/roadmap/process-step.md +4 -0
- package/dist/agent-src/commands/roadmap.md +1 -1
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/sync-agent-settings.md +1 -1
- package/dist/agent-src/commands/sync-gitignore/fix.md +42 -6
- package/dist/agent-src/commands/team-knowledge/bootstrap.md +106 -0
- package/dist/agent-src/commands/team-knowledge/consolidate.md +105 -0
- package/dist/agent-src/commands/team-knowledge.md +64 -0
- package/dist/agent-src/contexts/authority/commit-mechanics.md +8 -0
- package/dist/agent-src/contexts/authority/destructive-mechanics.md +11 -0
- package/dist/agent-src/contexts/authority/scope-mechanics.md +25 -0
- package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +43 -0
- package/dist/agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
- package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +2 -2
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +14 -4
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +11 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +32 -8
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +107 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +71 -15
- package/dist/agent-src/contexts/execution/subagent-steering.md +41 -1
- package/dist/agent-src/contexts/override-system.md +1 -1
- package/dist/agent-src/personas/brand-strategist.md +0 -1
- package/dist/agent-src/personas/data-integrity.md +66 -0
- package/dist/agent-src/personas/design-director.md +0 -1
- package/dist/agent-src/personas/performance-engineer.md +66 -0
- package/dist/agent-src/personas/production-validator.md +73 -0
- package/dist/agent-src/rules/agent-authority.md +3 -4
- package/dist/agent-src/rules/analysis-skill-routing.md +3 -5
- package/dist/agent-src/rules/architecture.md +2 -4
- package/dist/agent-src/rules/artifact-drafting-protocol.md +35 -6
- package/dist/agent-src/rules/artifact-engagement-recording.md +2 -4
- package/dist/agent-src/rules/ask-when-uncertain.md +10 -14
- package/dist/agent-src/rules/augment-edit-discipline.md +3 -5
- package/dist/agent-src/rules/autonomous-execution.md +3 -5
- package/dist/agent-src/rules/brand-consistency.md +3 -5
- package/dist/agent-src/rules/brand-source-of-truth.md +3 -5
- package/dist/agent-src/rules/cli-output-handling.md +4 -6
- package/dist/agent-src/rules/command-suggestion-policy.md +3 -5
- package/dist/agent-src/rules/commit-conventions.md +3 -5
- package/dist/agent-src/rules/commit-policy.md +8 -10
- package/dist/agent-src/rules/content-quoting-floor.md +88 -0
- package/dist/agent-src/rules/context-hygiene.md +3 -5
- package/dist/agent-src/rules/copilot-routing.md +4 -6
- package/dist/agent-src/rules/decision-revisit-gate.md +120 -0
- package/dist/agent-src/rules/delegation-policy.md +10 -6
- package/dist/agent-src/rules/design-fidelity.md +3 -5
- package/dist/agent-src/rules/devcontainer-routing.md +4 -6
- package/dist/agent-src/rules/direct-answers.md +13 -17
- package/dist/agent-src/rules/docker-commands.md +3 -5
- package/dist/agent-src/rules/domain-adoption-policy.md +3 -5
- package/dist/agent-src/rules/domain-safety-disclaimer.md +3 -5
- package/dist/agent-src/rules/domain-safety-pii.md +3 -5
- package/dist/agent-src/rules/domain-safety-retention.md +3 -5
- package/dist/agent-src/rules/downstream-changes.md +3 -4
- package/dist/agent-src/rules/engineering-safety-floor.md +3 -5
- package/dist/agent-src/rules/external-reference-deep-dive.md +3 -5
- package/dist/agent-src/rules/fast-path-marker-visibility.md +3 -5
- package/dist/agent-src/rules/finance-safety-floor.md +3 -6
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -5
- package/dist/agent-src/rules/git-history-discipline.md +3 -5
- package/dist/agent-src/rules/guidelines.md +2 -4
- package/dist/agent-src/rules/icon-consistency.md +3 -5
- package/dist/agent-src/rules/image-likeness-and-rights.md +3 -5
- package/dist/agent-src/rules/improve-before-implement.md +5 -5
- package/dist/agent-src/rules/invite-challenge.md +3 -5
- package/dist/agent-src/rules/language-and-tone.md +13 -15
- package/dist/agent-src/rules/laravel-routing.md +3 -5
- package/dist/agent-src/rules/laravel-translations.md +3 -5
- package/dist/agent-src/rules/legal-safety-floor.md +3 -5
- package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -5
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +4 -7
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -5
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -4
- package/dist/agent-src/rules/media-governance-routing.md +3 -5
- package/dist/agent-src/rules/media-sync-ground-truth.md +3 -5
- package/dist/agent-src/rules/minimal-safe-diff.md +5 -5
- package/dist/agent-src/rules/missing-tool-handling.md +3 -5
- package/dist/agent-src/rules/model-recommendation.md +4 -6
- package/dist/agent-src/rules/no-attribution-footers.md +3 -5
- package/dist/agent-src/rules/no-cheap-questions.md +5 -8
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +3 -6
- package/dist/agent-src/rules/no-pr-progress-comments.md +3 -6
- package/dist/agent-src/rules/no-roadmap-references.md +3 -5
- package/dist/agent-src/rules/non-destructive-by-default.md +11 -13
- package/dist/agent-src/rules/notes-first-reasoning.md +3 -5
- package/dist/agent-src/rules/onboarding-gate.md +4 -6
- package/dist/agent-src/rules/output-discipline.md +3 -5
- package/dist/agent-src/rules/package-ci-checks.md +3 -5
- package/dist/agent-src/rules/persona-governance.md +2 -4
- package/dist/agent-src/rules/php-coding.md +3 -5
- package/dist/agent-src/rules/preservation-guard.md +2 -4
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -5
- package/dist/agent-src/rules/reviewer-awareness.md +5 -6
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +3 -5
- package/dist/agent-src/rules/roadmap-progress-sync.md +5 -5
- package/dist/agent-src/rules/role-mode-adherence.md +2 -4
- package/dist/agent-src/rules/rule-type-governance.md +3 -5
- package/dist/agent-src/rules/runtime-safety.md +2 -4
- package/dist/agent-src/rules/scope-control.md +10 -11
- package/dist/agent-src/rules/security-sensitive-stop.md +4 -5
- package/dist/agent-src/rules/size-enforcement.md +2 -4
- package/dist/agent-src/rules/skill-improvement-trigger.md +3 -5
- package/dist/agent-src/rules/skill-quality.md +3 -5
- package/dist/agent-src/rules/slash-command-routing-policy.md +3 -5
- package/dist/agent-src/rules/source-confidentiality.md +3 -5
- package/dist/agent-src/rules/source-discovery-gate.md +3 -5
- package/dist/agent-src/rules/source-of-truth.md +3 -5
- package/dist/agent-src/rules/strategy-safety-floor.md +3 -5
- package/dist/agent-src/rules/symfony-routing.md +4 -6
- package/dist/agent-src/rules/telegraph-speak.md +4 -5
- package/dist/agent-src/rules/think-before-action.md +7 -4
- package/dist/agent-src/rules/token-budget-discipline.md +29 -5
- package/dist/agent-src/rules/token-efficiency.md +3 -5
- package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -5
- package/dist/agent-src/rules/tool-safety.md +2 -4
- package/dist/agent-src/rules/ui-audit-gate.md +3 -6
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -5
- package/dist/agent-src/rules/upstream-proposal.md +4 -6
- package/dist/agent-src/rules/user-interaction.md +7 -5
- package/dist/agent-src/rules/user-interrupt-priority.md +17 -8
- package/dist/agent-src/rules/verify-before-complete.md +12 -22
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +3 -3
- package/dist/agent-src/scripts/update_roadmap_progress.ts +197 -7
- package/dist/agent-src/skills/adr-create/SKILL.md +48 -42
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +18 -0
- package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/SKILL.md +14 -1
- package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +0 -3
- package/dist/agent-src/skills/brand/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +3 -3
- package/dist/agent-src/skills/brand-strategy/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -3
- package/dist/agent-src/skills/canvas-design/SKILL.md +6 -0
- package/dist/agent-src/skills/check-refs/SKILL.md +7 -4
- package/dist/agent-src/skills/code-review/SKILL.md +1 -0
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +6 -5
- package/dist/agent-src/skills/condense-memory/SKILL.md +11 -11
- package/dist/agent-src/skills/context-document/SKILL.md +17 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -3
- package/dist/agent-src/skills/decision-record/SKILL.md +6 -0
- package/dist/agent-src/skills/decision-review/SKILL.md +5 -3
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +6 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +5 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-tokens/SKILL.md +10 -4
- package/dist/agent-src/skills/design-variations/SKILL.md +127 -0
- package/dist/agent-src/skills/design-variations/evals/triggers.json +17 -0
- package/dist/agent-src/skills/emit-tickets/SKILL.md +4 -4
- package/dist/agent-src/skills/fe-design/SKILL.md +20 -0
- package/dist/agent-src/skills/html-deck/SKILL.md +123 -0
- package/dist/agent-src/skills/html-deck/evals/triggers.json +17 -0
- package/dist/agent-src/skills/html-deck/templates/deck-shell.html +77 -0
- package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
- package/dist/agent-src/skills/laravel/SKILL.md +0 -1
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +46 -0
- package/dist/agent-src/skills/lint-skills/SKILL.md +6 -6
- package/dist/agent-src/skills/md-language-check/SKILL.md +3 -3
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +66 -1
- package/dist/agent-src/skills/migration-architect/SKILL.md +1 -0
- package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +2 -2
- package/dist/agent-src/skills/performance-analysis/SKILL.md +2 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +4 -4
- package/dist/agent-src/skills/premortem/SKILL.md +0 -3
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +16 -0
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +3 -1
- package/dist/agent-src/skills/release-comms/SKILL.md +46 -45
- package/dist/agent-src/skills/roadmap-management/SKILL.md +21 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +32 -2
- package/dist/agent-src/skills/root-cause-frameworks/SKILL.md +0 -3
- package/dist/agent-src/skills/security-audit/SKILL.md +1 -0
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +4 -0
- package/dist/agent-src/skills/source-discovery/SKILL.md +22 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +33 -14
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +11 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +8 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +29 -0
- package/dist/agent-src/skills/threat-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -0
- package/dist/agent-src/skills/wireframe/SKILL.md +118 -0
- package/dist/agent-src/skills/wireframe/evals/triggers.json +17 -0
- package/dist/agent-src/templates/agent-settings.md +22 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/command.md +2 -2
- package/dist/agent-src/templates/contexts/knowledge-pages.md +116 -0
- package/dist/agent-src/templates/hooks/pre-commit-frontmatter +1 -1
- package/dist/agent-src/templates/roadmaps.md +70 -2
- package/dist/agent-src/templates/rule.md +1 -1
- package/dist/agent-src/templates/scripts/README.md +3 -3
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +109 -0
- package/dist/agent-src/templates/tickets.md +8 -8
- package/dist/cli/commands/recordTriggerEval.test.js +1 -1
- package/dist/cli/commands/recordTriggerEval.test.js.map +1 -1
- package/dist/cli/initRouting.js +4 -2
- package/dist/cli/initRouting.js.map +1 -1
- package/dist/cli/registry.js +1 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +718 -240
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +8 -8
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +43 -28
- package/dist/discovery/trust-report.md +12 -11
- package/dist/discovery/workspaces.json +29 -18
- package/dist/install/preflight.js +173 -0
- package/dist/install/preflight.js.map +1 -0
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +1 -1
- package/dist/server/routes/settings.js +4 -0
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/schemas/settings.js +3 -1
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +108 -0
- package/docs/MIGRATION.md +3 -3
- package/docs/architecture.md +5 -5
- package/docs/benchmark.md +133 -2
- package/docs/benchmark.pinned.yml +31 -0
- package/docs/capability-matrix.md +1 -0
- package/docs/catalog.md +70 -60
- package/docs/command-flows.md +15 -3
- package/docs/comparison.yaml +35 -0
- package/docs/contracts/agents-layout.md +148 -0
- package/docs/contracts/brand-token-consumption.md +5 -0
- package/docs/contracts/capability-boundary.md +5 -0
- package/docs/contracts/command-category-governance.md +5 -0
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/command-surface-tiers.md +1 -1
- package/docs/contracts/conformance.md +84 -0
- package/docs/contracts/creative-pack-boundary.md +5 -0
- package/docs/contracts/discovery-manifest.schema.json +5 -4
- package/docs/contracts/file-ownership-matrix.json +4605 -985
- package/docs/contracts/governance-enforcement-projection.md +5 -0
- package/docs/contracts/gui-wizard.md +1 -1
- package/docs/contracts/hook-architecture-v1.md +2 -2
- package/docs/contracts/implement-ticket-flow.md +1 -1
- package/docs/contracts/kernel-membership.md +13 -0
- package/docs/contracts/mcp-tool-inventory.md +23 -23
- package/docs/contracts/no-runtime-boundary.md +6 -1
- package/docs/contracts/review-lens-schema.md +5 -0
- package/docs/contracts/rule-router.md +102 -8
- package/docs/contracts/skill-bundled-assets.md +1 -1
- package/docs/contracts/skill-dry-run.md +1 -1
- package/docs/contracts/subagent-boundary.md +5 -0
- package/docs/contracts/ticket-bundle-format.md +9 -4
- package/docs/contracts/tier-3-contrib-plugin.md +2 -2
- package/docs/contracts/write-engine.md +3 -0
- package/docs/customization.md +87 -15
- package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +1 -1
- package/docs/decisions/ADR-109-subagent-v1-contract.md +246 -0
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +105 -0
- package/docs/decisions/INDEX.md +2 -0
- package/docs/distribution/awesome-list-submission.md +46 -0
- package/docs/distribution/launch-story-draft.md +58 -0
- package/docs/end-to-end-walkthroughs.md +2 -2
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +24 -0
- package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +1 -1
- package/docs/guidelines/agent-infra/linked-projects-onboarding-gate.md +2 -2
- package/docs/guidelines/agent-infra/missing-tool-handling.md +3 -3
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
- package/docs/guidelines/augment-portability-patterns.md +1 -1
- package/docs/guidelines/code-clarity.md +19 -0
- package/docs/guidelines/design-antipatterns-triggers.json +2 -1
- package/docs/guidelines/design-antipatterns.md +10 -1
- package/docs/guidelines/design-modes.md +6 -0
- package/docs/guidelines/php/general.md +9 -1
- package/docs/guidelines/php/php-coding-patterns.md +7 -0
- package/docs/guides/cross-repo-retrieval.md +1 -1
- package/docs/guides/frontend-design-corpus-refresh.md +2 -2
- package/docs/guides/local-analytics.md +4 -4
- package/docs/guides/skill-discovery.md +1 -1
- package/docs/guides/skill-preview.md +1 -1
- package/docs/hook-payload-capture.md +6 -6
- package/docs/install-friction-report.md +66 -0
- package/docs/installation.md +1 -1
- package/docs/maintainers/optional-media-deps.md +50 -0
- package/docs/mcp-server.md +11 -12
- package/docs/media/proof-demo.cast +14 -0
- package/docs/media/proof-demo.gif +0 -0
- package/docs/migration/consumer-template-consumption-model.md +1 -1
- package/docs/migration/divergences/bench-stats-float-precision.md +1 -1
- package/docs/migration/node-floor.md +1 -1
- package/docs/migration/yaml-roundtrip-spike.md +1 -1
- package/docs/personas.md +16 -5
- package/docs/positioning-evidence.md +86 -0
- package/docs/proof.md +86 -0
- package/docs/skills-catalog.md +1 -1
- package/docs/troubleshooting.md +8 -8
- package/docs/wedge/production-validator/README.md +57 -0
- package/docs/wedge/production-validator/production-validator.md +56 -0
- package/docs/wizard.md +2 -2
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +59 -4
- package/src/config/agents-paths.yml +254 -0
- package/src/config/budgets.yml +16 -0
- package/src/config/discovery/packs.yml +1 -0
- package/src/config/discovery/unassigned-artefacts.yml +2 -0
- package/src/config/gitignore-block.txt +25 -0
- package/src/config/host-capabilities.yml +31 -0
- package/src/config/profiles/balanced.ini +4 -0
- package/src/config/profiles/full.ini +4 -0
- package/src/config/profiles/minimal.ini +4 -0
- package/src/scripts/_cli/cmd_conformance.ts +716 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -2
- package/src/scripts/_cli/cmd_fleet.ts +401 -0
- package/src/scripts/_cli/cmd_preflight.ts +159 -0
- package/src/scripts/_dispatch.bash +10 -0
- package/src/scripts/_lib/knowledge_events.ts +193 -0
- package/src/scripts/_lib/subagent_steering.ts +115 -3
- package/src/scripts/_lib/text_similarity.ts +75 -0
- package/src/scripts/ai-video/test-pipeline.sh +1 -1
- package/src/scripts/ai_council/clients.ts +19 -3
- package/src/scripts/append_contested.ts +112 -0
- package/src/scripts/audit_auto_rules.ts +11 -1
- package/src/scripts/audit_mcp_tools.ts +25 -11
- package/src/scripts/bench_ab_v2_run.ts +527 -40
- package/src/scripts/bench_ab_v2_stats.ts +6 -0
- package/src/scripts/bench_matrix.ts +266 -0
- package/src/scripts/bootstrap_knowledge.ts +267 -0
- package/src/scripts/build_discovery_manifest.ts +42 -2
- package/src/scripts/build_proof.ts +214 -0
- package/src/scripts/check_always_budget.ts +3 -0
- package/src/scripts/check_augment_description_cap.ts +2 -2
- package/src/scripts/check_claims.ts +270 -0
- package/src/scripts/check_comparison.ts +79 -0
- package/src/scripts/check_generated_artefact_headers.ts +109 -0
- package/src/scripts/check_generator_output_coverage.ts +142 -0
- package/src/scripts/check_gitignore_freshness.ts +127 -0
- package/src/scripts/check_knowledge_pages.ts +210 -0
- package/src/scripts/check_knowledge_sharing.ts +162 -0
- package/src/scripts/check_media_deps.ts +91 -0
- package/src/scripts/check_memory_contradiction.ts +280 -0
- package/src/scripts/check_memory_similarity.ts +134 -0
- package/src/scripts/check_quality_regression.ts +56 -10
- package/src/scripts/check_references.ts +3 -1
- package/src/scripts/check_release_pr_shape.ts +4 -0
- package/src/scripts/check_site_links.ts +135 -0
- package/src/scripts/check_skill_gaps.ts +99 -0
- package/src/scripts/check_token_quality_golden.ts +197 -11
- package/src/scripts/check_tracked_but_ignored.ts +67 -0
- package/src/scripts/cluster_near_miss_patterns.ts +0 -0
- package/src/scripts/compile_router.ts +30 -3
- package/src/scripts/condense.ts +350 -14
- package/src/scripts/consolidate_knowledge_events.ts +192 -0
- package/src/scripts/degrade_to_pointer.ts +136 -0
- package/src/scripts/design_slop_rules.test.ts +15 -0
- package/src/scripts/design_slop_rules.ts +28 -0
- package/src/scripts/emit_knowledge_event.ts +158 -0
- package/src/scripts/export_replay_corpus.ts +187 -0
- package/src/scripts/external_sources_denylist.json +7 -2
- package/src/scripts/fold_intake.ts +281 -0
- package/src/scripts/generate_capability_matrix.ts +9 -1
- package/src/scripts/generate_knowledge_index.ts +222 -0
- package/src/scripts/hook_manifest.yaml +26 -14
- package/src/scripts/hooks/dispatch_hook.ts +18 -0
- package/src/scripts/hot_context_hook.ts +372 -0
- package/src/scripts/install +47 -0
- package/src/scripts/install-hooks.sh +17 -0
- package/src/scripts/inventory_meta_layers.ts +11 -0
- package/src/scripts/janitor.ts +258 -0
- package/src/scripts/lint_agents_layout.ts +74 -15
- package/src/scripts/lint_bench_ab.ts +4 -1
- package/src/scripts/lint_featured_skills.ts +0 -0
- package/src/scripts/lint_framework_leakage_allowlist.json +26 -3
- package/src/scripts/lint_knowledge_scale.ts +250 -0
- package/src/scripts/lint_legal_pack.ts +67 -0
- package/src/scripts/lint_persona_governance.ts +8 -3
- package/src/scripts/lint_regression.ts +15 -0
- package/src/scripts/lint_roadmap_blockers.ts +202 -0
- package/src/scripts/lint_roadmap_complexity.ts +81 -2
- package/src/scripts/lint_subagent_determinism.ts +125 -0
- package/src/scripts/measure_augment_budget.ts +46 -6
- package/src/scripts/measure_patterns.ts +4 -3
- package/src/scripts/measure_skill_reduction.ts +6 -6
- package/src/scripts/migration_status.ts +6 -2
- package/src/scripts/mine_missing_guardrails.ts +189 -0
- package/src/scripts/parity/phase_gate.ts +1 -1
- package/src/scripts/parity/replay.ts +21 -0
- package/src/scripts/project_thin_rules.ts +120 -16
- package/src/scripts/release.ts +39 -1
- package/src/scripts/render_benchmark_composite.ts +378 -0
- package/src/scripts/roadmap_progress_hook.ts +101 -43
- package/src/scripts/schemas/skill.schema.json +27 -0
- package/src/scripts/schemas/subagent.schema.json +106 -0
- package/src/scripts/skill_linter.ts +1 -0
- package/src/scripts/smoke/kernel.sh +5 -4
- package/src/scripts/surface-tiers.yml +1 -0
- package/src/scripts/sync_gitignore.ts +4 -0
- package/src/scripts/update_skill_candidates.ts +172 -0
- package/src/scripts/validate_frontmatter.ts +1 -0
|
@@ -161,12 +161,28 @@ class RoadmapStats {
|
|
|
161
161
|
rel: string;
|
|
162
162
|
title: string;
|
|
163
163
|
phases: PhaseStats[];
|
|
164
|
+
blockers: Blocker[];
|
|
164
165
|
|
|
165
|
-
constructor(
|
|
166
|
+
constructor(
|
|
167
|
+
p: string,
|
|
168
|
+
rel: string,
|
|
169
|
+
title: string,
|
|
170
|
+
phases: PhaseStats[] = [],
|
|
171
|
+
blockers: Blocker[] = [],
|
|
172
|
+
) {
|
|
166
173
|
this.path = p;
|
|
167
174
|
this.rel = rel;
|
|
168
175
|
this.title = title;
|
|
169
176
|
this.phases = phases;
|
|
177
|
+
this.blockers = blockers;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
get open_blockers(): Blocker[] {
|
|
181
|
+
return this.blockers.filter((b) => b.status !== 'resolved');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
get resolved_blockers(): Blocker[] {
|
|
185
|
+
return this.blockers.filter((b) => b.status === 'resolved');
|
|
170
186
|
}
|
|
171
187
|
|
|
172
188
|
get done(): number {
|
|
@@ -322,6 +338,136 @@ function count_checkboxes(text: string): CheckboxCounts {
|
|
|
322
338
|
return [done, open_, deferred, cancelled, merge_gated, prs];
|
|
323
339
|
}
|
|
324
340
|
|
|
341
|
+
interface Blocker {
|
|
342
|
+
id: string;
|
|
343
|
+
status: string;
|
|
344
|
+
owner: string;
|
|
345
|
+
blocks: string;
|
|
346
|
+
todo: string[];
|
|
347
|
+
resolvedWhen: string;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Strip fenced code blocks before blocker detection — a roadmap that shows the
|
|
351
|
+
// `## Blockers` shape as a documentation example (fenced, indented or not)
|
|
352
|
+
// must not be mistaken for a live blocker on that roadmap.
|
|
353
|
+
const FENCED_CODE_RE = /^[ \t]*```[^\n]*\n[\s\S]*?^[ \t]*```[ \t]*$/gm;
|
|
354
|
+
const BLOCKERS_SECTION_RE = /^##[ \t]+Blockers[ \t]*$/im;
|
|
355
|
+
const BLOCKER_HEADING_RE = /^###[ \t]+blocker:[ \t]*(.+?)[ \t]*$/gim;
|
|
356
|
+
const NEXT_H2_RE = /^##[ \t]+\S/m;
|
|
357
|
+
const LEGACY_BLOCKED_UNTIL_RE = /^>[ \t]*Blocked until:?[ \t]*(.+)$/im;
|
|
358
|
+
|
|
359
|
+
function _stripFencedCode(text: string): string {
|
|
360
|
+
return text.replace(FENCED_CODE_RE, (m) => '\n'.repeat(_splitlines(m).length));
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
const BLOCKER_FIELD_RE = /^-[ \t]*\*\*(Status|Owner|Blocks|Resolved when|What to do):\*\*/i;
|
|
364
|
+
|
|
365
|
+
/** Strip an inline `<!-- comment -->` and trim. */
|
|
366
|
+
function _stripComment(s: string): string {
|
|
367
|
+
return _strip(s.replace(/<!--[\s\S]*?-->/g, ''));
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* `- **Label:** value` → trimmed `value`, joined with any wrapped
|
|
372
|
+
* continuation lines (non-bulleted text under the same field, e.g. a long
|
|
373
|
+
* "Blocks" sentence spanning two lines) up to the next `- **Field:**`
|
|
374
|
+
* marker, blank line, or heading.
|
|
375
|
+
*/
|
|
376
|
+
function _blockerField(slice: string, label: string): string | null {
|
|
377
|
+
const lines = _splitlines(slice);
|
|
378
|
+
const re = new RegExp(`^-[ \\t]*\\*\\*${label}:\\*\\*[ \\t]*(.*)$`, 'i');
|
|
379
|
+
const startIdx = lines.findIndex((l) => re.test(_strip(l)));
|
|
380
|
+
if (startIdx === -1) {
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
const m = re.exec(_strip(lines[startIdx] as string));
|
|
384
|
+
const parts: string[] = [];
|
|
385
|
+
const first = _stripComment((m?.[1] as string) ?? '');
|
|
386
|
+
if (first) {
|
|
387
|
+
parts.push(first);
|
|
388
|
+
}
|
|
389
|
+
for (let i = startIdx + 1; i < lines.length; i++) {
|
|
390
|
+
const trimmed = _strip(lines[i] as string);
|
|
391
|
+
if (trimmed === '' || BLOCKER_FIELD_RE.test(trimmed) || trimmed.startsWith('#')) {
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
parts.push(_stripComment(trimmed));
|
|
395
|
+
}
|
|
396
|
+
return parts.length ? parts.join(' ') : null;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/** Lines under `- **What to do:**` up to the next `- **Field:**` marker. */
|
|
400
|
+
function _blockerTodo(slice: string): string[] {
|
|
401
|
+
const lines = _splitlines(slice);
|
|
402
|
+
const startIdx = lines.findIndex((l) => /^-[ \t]*\*\*What to do:\*\*/i.test(_strip(l)));
|
|
403
|
+
if (startIdx === -1) {
|
|
404
|
+
return [];
|
|
405
|
+
}
|
|
406
|
+
const out: string[] = [];
|
|
407
|
+
for (let i = startIdx + 1; i < lines.length; i++) {
|
|
408
|
+
const trimmed = _strip(lines[i] as string);
|
|
409
|
+
if (BLOCKER_FIELD_RE.test(trimmed) || trimmed.startsWith('#')) {
|
|
410
|
+
break;
|
|
411
|
+
}
|
|
412
|
+
if (trimmed !== '') {
|
|
413
|
+
out.push(trimmed);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return out;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
function parse_blockers(raw_text: string): Blocker[] {
|
|
420
|
+
const text = _stripFencedCode(raw_text);
|
|
421
|
+
const blockers: Blocker[] = [];
|
|
422
|
+
const sectionMatch = BLOCKERS_SECTION_RE.exec(text);
|
|
423
|
+
if (sectionMatch) {
|
|
424
|
+
const sectionStart = sectionMatch.index + sectionMatch[0].length;
|
|
425
|
+
const rest = text.slice(sectionStart);
|
|
426
|
+
const h2 = NEXT_H2_RE.exec(rest);
|
|
427
|
+
const sectionEnd = h2 ? sectionStart + h2.index : text.length;
|
|
428
|
+
const section = text.slice(sectionStart, sectionEnd);
|
|
429
|
+
BLOCKER_HEADING_RE.lastIndex = 0;
|
|
430
|
+
const heads: Array<{ start: number; end: number; id: string }> = [];
|
|
431
|
+
let hm: RegExpExecArray | null;
|
|
432
|
+
while ((hm = BLOCKER_HEADING_RE.exec(section)) !== null) {
|
|
433
|
+
heads.push({
|
|
434
|
+
start: hm.index,
|
|
435
|
+
end: hm.index + hm[0].length,
|
|
436
|
+
id: _strip(hm[1] as string),
|
|
437
|
+
});
|
|
438
|
+
if (hm.index === BLOCKER_HEADING_RE.lastIndex) {
|
|
439
|
+
BLOCKER_HEADING_RE.lastIndex++;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
for (let i = 0; i < heads.length; i++) {
|
|
443
|
+
const cur = heads[i] as { start: number; end: number; id: string };
|
|
444
|
+
const bodyEnd =
|
|
445
|
+
i + 1 < heads.length ? (heads[i + 1] as { start: number }).start : section.length;
|
|
446
|
+
const body = section.slice(cur.end, bodyEnd);
|
|
447
|
+
blockers.push({
|
|
448
|
+
id: cur.id,
|
|
449
|
+
status: (_blockerField(body, 'Status') ?? 'open').toLowerCase(),
|
|
450
|
+
owner: _blockerField(body, 'Owner') ?? 'user',
|
|
451
|
+
blocks: _blockerField(body, 'Blocks') ?? '(unspecified)',
|
|
452
|
+
todo: _blockerTodo(body),
|
|
453
|
+
resolvedWhen: _blockerField(body, 'Resolved when') ?? '(unspecified)',
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
const legacyMatch = LEGACY_BLOCKED_UNTIL_RE.exec(text);
|
|
458
|
+
if (legacyMatch) {
|
|
459
|
+
blockers.push({
|
|
460
|
+
id: 'legacy',
|
|
461
|
+
status: 'open',
|
|
462
|
+
owner: 'user',
|
|
463
|
+
blocks: 'entire roadmap',
|
|
464
|
+
todo: [_strip(legacyMatch[1] as string)],
|
|
465
|
+
resolvedWhen: 'condition described above clears',
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
return blockers;
|
|
469
|
+
}
|
|
470
|
+
|
|
325
471
|
function parse_roadmap(p: string, roadmap_root: string): RoadmapStats | null {
|
|
326
472
|
const text = fs.readFileSync(p, { encoding: 'utf-8' });
|
|
327
473
|
const phase_matches: Array<{ start: number; end: number; g2: string; g3: string | undefined }> =
|
|
@@ -345,7 +491,7 @@ function parse_roadmap(p: string, roadmap_root: string): RoadmapStats | null {
|
|
|
345
491
|
const title_match = TITLE_RE.exec(text);
|
|
346
492
|
const title = title_match ? _strip(title_match[1] as string) : _stem(p);
|
|
347
493
|
const rel = _relPosix(roadmap_root, p);
|
|
348
|
-
const stats = new RoadmapStats(p, rel, title);
|
|
494
|
+
const stats = new RoadmapStats(p, rel, title, [], parse_blockers(text));
|
|
349
495
|
for (let i = 0; i < phase_matches.length; i++) {
|
|
350
496
|
const cur = phase_matches[i] as { start: number; end: number; g2: string; g3: string | undefined };
|
|
351
497
|
const start = cur.end;
|
|
@@ -370,6 +516,19 @@ function _relPosix(root: string, p: string): string {
|
|
|
370
516
|
return path.relative(root, p).split(path.sep).join('/');
|
|
371
517
|
}
|
|
372
518
|
|
|
519
|
+
/** Deterministic anchor slug for a roadmap's blocker section — explicit
|
|
520
|
+
* anchors (rather than GitHub's auto heading-slug) survive `.md` / brackets. */
|
|
521
|
+
function _blockerAnchor(rel: string): string {
|
|
522
|
+
const stem = rel.endsWith('.md') ? rel.slice(0, -3) : rel;
|
|
523
|
+
return (
|
|
524
|
+
'blockers-' +
|
|
525
|
+
stem
|
|
526
|
+
.toLowerCase()
|
|
527
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
528
|
+
.replace(/^-+|-+$/g, '')
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
|
|
373
532
|
function bar(pct: number, width = 10): string {
|
|
374
533
|
const filled = _pyRound((pct * width) / 100);
|
|
375
534
|
return '█'.repeat(filled) + '░'.repeat(width - filled);
|
|
@@ -512,13 +671,18 @@ function render(roadmaps: RoadmapStats[], bundles: Bundle[] | null = null): stri
|
|
|
512
671
|
const overall_pct = total_active ? _pyRound((total_done * 100) / total_active) : 0;
|
|
513
672
|
const pending = pending_iron_law_3(roadmaps);
|
|
514
673
|
const gated = merge_gated_pending(roadmaps);
|
|
674
|
+
const total_open_blockers = roadmaps.reduce((s, r) => s + r.open_blockers.length, 0);
|
|
515
675
|
const lines: string[] = [];
|
|
516
676
|
lines.push('# Roadmap Progress\n');
|
|
517
677
|
const header_meta =
|
|
518
678
|
`> ${roadmaps.length} open roadmap` +
|
|
519
679
|
`${roadmaps.length !== 1 ? 's' : ''}` +
|
|
520
680
|
' · [roadmaps/](roadmaps/) · [archive/](roadmaps/archive/) · ' +
|
|
521
|
-
'[skipped/](roadmaps/skipped/) · [later/](roadmaps/later/)
|
|
681
|
+
'[skipped/](roadmaps/skipped/) · [later/](roadmaps/later/)' +
|
|
682
|
+
(total_open_blockers > 0
|
|
683
|
+
? ` · **${total_open_blockers}** open blocker${total_open_blockers !== 1 ? 's' : ''}`
|
|
684
|
+
: '') +
|
|
685
|
+
'\n';
|
|
522
686
|
lines.push(
|
|
523
687
|
// Honest provenance (road-to-roadmap-archival-robustness, gap C): name a
|
|
524
688
|
// regen path that exists in EVERY install, not a hardcoded
|
|
@@ -600,13 +764,18 @@ function render(roadmaps: RoadmapStats[], bundles: Bundle[] | null = null): stri
|
|
|
600
764
|
return lines.join('\n') + '\n';
|
|
601
765
|
}
|
|
602
766
|
lines.push('## Open roadmaps\n');
|
|
603
|
-
lines.push(
|
|
604
|
-
|
|
767
|
+
lines.push(
|
|
768
|
+
'| # | Roadmap | Phases | Steps | Open | Done | Deferred | Cancelled | Blocker | Progress |',
|
|
769
|
+
);
|
|
770
|
+
lines.push('|---|---|---:|---:|---:|---:|---:|---:|---:|---|');
|
|
605
771
|
roadmaps.forEach((r, idx) => {
|
|
606
772
|
const i = idx + 1;
|
|
773
|
+
const openBlockers = r.open_blockers.length;
|
|
774
|
+
const blockerCell =
|
|
775
|
+
openBlockers > 0 ? `[${openBlockers}](#${_blockerAnchor(r.rel)})` : '0';
|
|
607
776
|
lines.push(
|
|
608
777
|
`| ${i} | [${r.rel}](roadmaps/${r.rel}) | ${r.phases.length} | ${r.total_all} | ` +
|
|
609
|
-
`${r.open_} | ${r.done} | ${r.deferred} | ${r.cancelled} | ` +
|
|
778
|
+
`${r.open_} | ${r.done} | ${r.deferred} | ${r.cancelled} | ${blockerCell} | ` +
|
|
610
779
|
`${bar(r.percent)} ${r.percent}% |`,
|
|
611
780
|
);
|
|
612
781
|
});
|
|
@@ -625,6 +794,26 @@ function render(roadmaps: RoadmapStats[], bundles: Bundle[] | null = null): stri
|
|
|
625
794
|
);
|
|
626
795
|
}
|
|
627
796
|
lines.push('');
|
|
797
|
+
const openBlockers = r.open_blockers;
|
|
798
|
+
if (openBlockers.length) {
|
|
799
|
+
lines.push(`<a id="${_blockerAnchor(r.rel)}"></a>`);
|
|
800
|
+
lines.push('**Blockers**\n');
|
|
801
|
+
for (const b of openBlockers) {
|
|
802
|
+
lines.push(`- **${b.id}** (owner: ${b.owner}) — blocks ${b.blocks}`);
|
|
803
|
+
lines.push(' - **What to do:**');
|
|
804
|
+
for (const step of b.todo) {
|
|
805
|
+
lines.push(` ${step}`);
|
|
806
|
+
}
|
|
807
|
+
lines.push(` - **Resolved when:** ${b.resolvedWhen}`);
|
|
808
|
+
}
|
|
809
|
+
const resolvedCount = r.resolved_blockers.length;
|
|
810
|
+
if (resolvedCount > 0) {
|
|
811
|
+
lines.push(
|
|
812
|
+
`\n_${resolvedCount} blocker${resolvedCount !== 1 ? 's' : ''} resolved._`,
|
|
813
|
+
);
|
|
814
|
+
}
|
|
815
|
+
lines.push('');
|
|
816
|
+
}
|
|
628
817
|
}
|
|
629
818
|
if (bundles && bundles.length) {
|
|
630
819
|
lines.push('---\n');
|
|
@@ -855,6 +1044,7 @@ export {
|
|
|
855
1044
|
is_draft,
|
|
856
1045
|
is_roadmap_candidate,
|
|
857
1046
|
count_checkboxes,
|
|
1047
|
+
parse_blockers,
|
|
858
1048
|
parse_roadmap,
|
|
859
1049
|
bar,
|
|
860
1050
|
collect,
|
|
@@ -866,4 +1056,4 @@ export {
|
|
|
866
1056
|
main,
|
|
867
1057
|
_pyRound,
|
|
868
1058
|
};
|
|
869
|
-
export type { Bundle };
|
|
1059
|
+
export type { Bundle, Blocker };
|
|
@@ -9,8 +9,8 @@ execution:
|
|
|
9
9
|
timeout_seconds: 30
|
|
10
10
|
allowed_tools: []
|
|
11
11
|
command:
|
|
12
|
-
-
|
|
13
|
-
- scripts/adr/regenerate_index
|
|
12
|
+
- ./scripts-run
|
|
13
|
+
- src/scripts/adr/regenerate_index
|
|
14
14
|
workspaces:
|
|
15
15
|
- agent-config-maintainer
|
|
16
16
|
packs:
|
|
@@ -48,16 +48,16 @@ Do NOT use when:
|
|
|
48
48
|
|
|
49
49
|
## Preconditions
|
|
50
50
|
|
|
51
|
-
- ADR directory exists. Two layouts coexist (see
|
|
51
|
+
- An ADR directory exists. Two layouts coexist (see
|
|
52
52
|
[`docs/contracts/adr-layout.md`](../../../docs/contracts/adr-layout.md)):
|
|
53
53
|
- **Flat** — `docs/decisions/` (or `docs/adr/` alias): cross-cutting
|
|
54
54
|
governance ADRs, 3-digit numbering (`ADR-NNN-<slug>.md`).
|
|
55
55
|
- **Per-area** — `docs/adrs/<area>/`: sub-area ADRs, 4-digit
|
|
56
|
-
numbering (`NNNN-<slug>.md`); `<area>` must match canonical
|
|
56
|
+
numbering (`NNNN-<slug>.md`); `<area>` must match the canonical
|
|
57
57
|
inventory in [`scripts/audit_adr_coverage.py`](../../../scripts/audit_adr_coverage.py).
|
|
58
|
-
-
|
|
59
|
-
decision process. For unresolved trade-offs, run
|
|
60
|
-
consult `adversarial-review` first.
|
|
58
|
+
- The decision is **already made** — ADRs record outcomes, they do
|
|
59
|
+
not run the decision process. For unresolved trade-offs, run the
|
|
60
|
+
council or consult `adversarial-review` first.
|
|
61
61
|
|
|
62
62
|
## Procedure
|
|
63
63
|
|
|
@@ -65,31 +65,31 @@ Do NOT use when:
|
|
|
65
65
|
|
|
66
66
|
Ask one question only if both are plausible:
|
|
67
67
|
|
|
68
|
-
1. **Flat surface** — decision constrains
|
|
69
|
-
consumers (kernel composition, rule
|
|
70
|
-
architecture). Directory: `docs/decisions/`
|
|
71
|
-
`docs/adr/`). Filename: `ADR-NNN-<slug>.md`.
|
|
72
|
-
2. **Per-area surface** — decision constrains code
|
|
73
|
-
folder (one runtime module, one contract group,
|
|
74
|
-
Directory: `docs/adrs/<area>/`. Filename:
|
|
75
|
-
(4-digit, no `ADR-` prefix).
|
|
76
|
-
3. **Unknown area** — `<area>` not in inventory: refuse with
|
|
77
|
-
to add area to `AREAS` in
|
|
78
|
-
same PR. Do not invent.
|
|
68
|
+
1. **Flat surface** — chosen when the decision constrains the
|
|
69
|
+
package's contract with consumers (kernel composition, rule
|
|
70
|
+
taxonomy, package-wide architecture). Directory: `docs/decisions/`
|
|
71
|
+
(fallback `docs/adr/`). Filename: `ADR-NNN-<slug>.md`.
|
|
72
|
+
2. **Per-area surface** — chosen when the decision constrains code
|
|
73
|
+
inside one area folder (one runtime module, one contract group,
|
|
74
|
+
one CLI surface). Directory: `docs/adrs/<area>/`. Filename:
|
|
75
|
+
`NNNN-<slug>.md` (4-digit, no `ADR-` prefix).
|
|
76
|
+
3. **Unknown area** — `<area>` not in the inventory: refuse with a
|
|
77
|
+
hint to add the area to `AREAS` in
|
|
78
|
+
`scripts/audit_adr_coverage.py` in the same PR. Do not invent.
|
|
79
79
|
4. **In doubt** → per-area (cheaper to surface, easier to relocate).
|
|
80
80
|
|
|
81
81
|
### 2. Pick the next ADR number
|
|
82
82
|
|
|
83
83
|
- **Flat surface** — scan `docs/decisions/` (or `docs/adr/`) for
|
|
84
|
-
`ADR-*.md`, parse leading 3-digit number, take `max + 1`
|
|
85
|
-
(zero-padded to 3).
|
|
84
|
+
`ADR-*.md`, parse the leading 3-digit number, take `max + 1`
|
|
85
|
+
(zero-padded to 3). For an empty directory, start at `001`.
|
|
86
86
|
- **Per-area surface** — scan `docs/adrs/<area>/` for
|
|
87
|
-
`[0-9][0-9][0-9][0-9]-*.md`, parse leading 4-digit number,
|
|
88
|
-
`max + 1` (zero-padded to 4).
|
|
89
|
-
`README.md` is **not** an ADR — skip it.
|
|
87
|
+
`[0-9][0-9][0-9][0-9]-*.md`, parse the leading 4-digit number,
|
|
88
|
+
take `max + 1` (zero-padded to 4). For an empty area, start at
|
|
89
|
+
`0001`. `README.md` is **not** an ADR — skip it.
|
|
90
90
|
|
|
91
|
-
Reject re-use of existing number — index regeneration treats
|
|
92
|
-
duplicates as hard failure on both surfaces.
|
|
91
|
+
Reject re-use of an existing number — index regeneration treats
|
|
92
|
+
duplicates as a hard failure on both surfaces.
|
|
93
93
|
|
|
94
94
|
### 3. Pick a slug
|
|
95
95
|
|
|
@@ -100,9 +100,9 @@ directory. Examples: `kernel-swap-deferred`, `flat-cluster-subs`,
|
|
|
100
100
|
|
|
101
101
|
### 4. Author the ADR
|
|
102
102
|
|
|
103
|
-
Use surface-specific template. All sections required; "—"
|
|
104
|
-
for genuinely empty Alternatives or References blocks
|
|
105
|
-
Status, Context, Decision, or Consequences.
|
|
103
|
+
Use the surface-specific template. All sections are required; "—"
|
|
104
|
+
is acceptable for genuinely empty Alternatives or References blocks
|
|
105
|
+
but never for Status, Context, Decision, or Consequences.
|
|
106
106
|
|
|
107
107
|
**Flat-surface template** (`docs/decisions/ADR-NNN-<slug>.md`):
|
|
108
108
|
|
|
@@ -138,7 +138,7 @@ phase: <roadmap> · <phase-id>
|
|
|
138
138
|
## Context / Decision / Considered alternatives / Consequences / References
|
|
139
139
|
```
|
|
140
140
|
|
|
141
|
-
Per-area ADRs use quote-style header (no YAML frontmatter) so
|
|
141
|
+
Per-area ADRs use a quote-style header (no YAML frontmatter) so
|
|
142
142
|
`audit_adr_coverage.py`'s permissive parser can index them. Cite
|
|
143
143
|
the area's contract from the README in
|
|
144
144
|
[`docs/adrs/<area>/README.md`](../../../docs/adrs/).
|
|
@@ -156,11 +156,15 @@ the area's contract from the README in
|
|
|
156
156
|
|
|
157
157
|
- Flat: `./scripts-run src/scripts/adr/regenerate_index --check` exits 0.
|
|
158
158
|
- Per-area: `./scripts-run src/scripts/audit_adr_coverage --check` exits 0.
|
|
159
|
-
-
|
|
159
|
+
- The project's CI / quality pipeline passes locally.
|
|
160
160
|
|
|
161
161
|
## Rubric pass (optional, surfacing-only)
|
|
162
162
|
|
|
163
|
-
After drafting ADR, run
|
|
163
|
+
After drafting an ADR, run
|
|
164
|
+
[`judge-artifact-completeness`](../judge-artifact-completeness/SKILL.md)
|
|
165
|
+
with rubric `architecture-score` to confirm alternatives, consequences,
|
|
166
|
+
reversibility, and risk are present. Invoke when the user asks for a
|
|
167
|
+
completeness check — not on every ADR by default.
|
|
164
168
|
|
|
165
169
|
## Output format
|
|
166
170
|
|
|
@@ -172,17 +176,19 @@ After drafting ADR, run [`judge-artifact-completeness`](../judge-artifact-comple
|
|
|
172
176
|
## Gotchas
|
|
173
177
|
|
|
174
178
|
- **Flat default path** is `docs/decisions/` in this package; some
|
|
175
|
-
projects use `docs/adr/`. Pass `--dir` when running outside
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
179
|
+
projects use `docs/adr/`. Pass `--dir` when running outside the
|
|
180
|
+
default.
|
|
181
|
+
- **Per-area numbering is 4-digit** (`NNNN-<slug>.md`); the flat
|
|
182
|
+
surface stays 3-digit (`ADR-NNN-<slug>.md`). Do not mix.
|
|
183
|
+
- **Area inventory is closed** — `<area>` must already exist in
|
|
184
|
+
`AREAS` in `scripts/audit_adr_coverage.py`. Adding a new area is
|
|
185
|
+
a separate PR with explicit reviewer sign-off.
|
|
186
|
+
- Frontmatter `adr:` (flat) is the canonical number; the filename
|
|
187
|
+
prefix must match. The flat regenerator fails on mismatch.
|
|
188
|
+
- ADRs are append-only history. To revise a decision, write a new
|
|
189
|
+
ADR with `supersedes: ADR-MMM` (flat) or a `Supersedes:` line in
|
|
190
|
+
the header quote-block (per-area) and flip the old one's status
|
|
191
|
+
to `superseded`.
|
|
186
192
|
- Never delete an ADR file — supersede it. Deletion breaks
|
|
187
193
|
historical links and round-trips through git history checks.
|
|
188
194
|
|
|
@@ -253,11 +253,29 @@ to every agent-doc update you author.
|
|
|
253
253
|
relevant rule?
|
|
254
254
|
4. Is German prose present outside `DE: / EN:` anchor blocks?
|
|
255
255
|
|
|
256
|
+
## User inbox workflow (agents/tmp/)
|
|
257
|
+
|
|
258
|
+
Command/skill consumes `agents/tmp/` file as INPUT (roadmap created from it,
|
|
259
|
+
note promoted) → move source to `agents/tmp.old/<original-name>` in the
|
|
260
|
+
**same reply** as the output.
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
mv agents/tmp/<filename> agents/tmp.old/<filename>
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
- Move only files **explicitly named as input**. Never sweep other `tmp/` files.
|
|
267
|
+
- No confirmation needed — both dirs gitignored, local-only.
|
|
268
|
+
- Never write agent scratch into `agents/tmp/` — use `agents/runtime/tmp/`.
|
|
269
|
+
|
|
270
|
+
See `docs/contracts/agents-layout.md § User Inbox Workflow`.
|
|
271
|
+
|
|
256
272
|
## Do NOT
|
|
257
273
|
|
|
258
274
|
- Do NOT create docs unless there's a real need (new module, significant change).
|
|
259
275
|
- Do NOT duplicate information already in AGENTS.md or copilot-instructions.md.
|
|
260
276
|
- Do NOT write docs just to document what you did — only document things others need to know.
|
|
277
|
+
- Do NOT write agent scratch into `agents/tmp/` — that is the user's inbox.
|
|
278
|
+
- Regen-only outputs (`agents/evidence/analysis/*`, `agents/reports/*` script-generated): commit only with the work that consumed them; side-effect regens discard via `git checkout --` before session end. See `docs/contracts/agents-layout.md § Session-leftover discipline`.
|
|
261
279
|
|
|
262
280
|
## Auto-trigger keywords
|
|
263
281
|
|
|
@@ -42,7 +42,7 @@ Inspect the config the agent loads and check each surface: instruction files
|
|
|
42
42
|
scripts, permission/auto-approve settings, persistent memory. Static pass first:
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
|
|
45
|
+
./scripts-run src/scripts/security_audit_config --root <repo> --json
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
### 2. Red team (attacker lens)
|
|
@@ -4,6 +4,7 @@ name: ai-council
|
|
|
4
4
|
description: "Use when polling external AIs (OpenAI, Anthropic) outside the host session for a neutral second opinion on a roadmap, diff, prompt, or file set — or 'cross-check with another model'."
|
|
5
5
|
domain: process
|
|
6
6
|
meta_skill: true
|
|
7
|
+
parallelizable: independent
|
|
7
8
|
workspaces:
|
|
8
9
|
- agent-config-maintainer
|
|
9
10
|
packs:
|
|
@@ -426,7 +427,19 @@ Every council reply MUST contain, in this order:
|
|
|
426
427
|
2. **One section per member**, titled `### <provider> · <model>`,
|
|
427
428
|
containing the member's verbatim output.
|
|
428
429
|
3. **Convergence / Divergence summary** — bullet list, every claim
|
|
429
|
-
attributed by provider name.
|
|
430
|
+
attributed by provider name. **When the convergence settles a
|
|
431
|
+
question as "don't relitigate" / locked / a durable disposition**,
|
|
432
|
+
the summary MUST record two additional lines, per
|
|
433
|
+
[`decision-revisit-gate`](../../rules/decision-revisit-gate.md):
|
|
434
|
+
`scope:` (exactly which mechanism or question is settled — narrow
|
|
435
|
+
enough that a superficially similar but different proposal is not
|
|
436
|
+
silently covered) and `revisit-if:` (at least one concrete condition
|
|
437
|
+
that reopens it — new evidence class, model-generation or tooling
|
|
438
|
+
change, an N-th blocked encounter, or an age threshold). A lock
|
|
439
|
+
recorded without both lines is an authoring error. Also state
|
|
440
|
+
whether the disposition is **settled-by-evidence** (an eval ran) or
|
|
441
|
+
**settled-by-decision** (a maintainer call) — the latter is cheaper
|
|
442
|
+
to reopen and should say so.
|
|
430
443
|
4. **Host verdict per finding** — one row per finding with `accept`
|
|
431
444
|
/ `accept-with-modification` / `reject` / `needs-input` plus a
|
|
432
445
|
one-line reason citing host evidence (file:line, ADR, contract).
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
model_tier: high
|
|
3
3
|
name: blameless-post-mortem
|
|
4
4
|
description: "Use after an incident or outage is resolved — blame-free facilitation, root cause, corrective actions, memory write-back — even for a near-miss. Consumes the incident-commander skeleton."
|
|
5
|
-
source: package
|
|
6
5
|
domain: quality
|
|
7
6
|
personas:
|
|
8
7
|
- senior-engineer
|
|
@@ -11,11 +10,9 @@ workspaces:
|
|
|
11
10
|
- engineering
|
|
12
11
|
packs:
|
|
13
12
|
- analysis-workbench
|
|
14
|
-
lifecycle: active
|
|
15
13
|
trust:
|
|
16
14
|
level: professional
|
|
17
15
|
confidence: medium
|
|
18
|
-
human_review_required: false
|
|
19
16
|
install:
|
|
20
17
|
default: false
|
|
21
18
|
removable: true
|
|
@@ -52,7 +52,7 @@ Provenance: [`ATTRIBUTION.md`](ATTRIBUTION.md); manifest:
|
|
|
52
52
|
1. **Ground or search** (paths resolve skill-relative; works from any cwd):
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
|
-
|
|
55
|
+
./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
|
|
56
56
|
--manifest <skills-root>/brand/data/manifest.json \
|
|
57
57
|
"<brand brief: sector + intent + audience>" \
|
|
58
58
|
[--domain archetype|voice|naming|color|logo|messaging|typography] \
|
|
@@ -35,7 +35,7 @@ Grounding + Method skill. Turns a confirmed brand strategy into an identity cons
|
|
|
35
35
|
2. **Ground the colour story** via the brand corpus:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
|
|
38
|
+
./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
|
|
39
39
|
--manifest <skills-root>/brand/data/manifest.json \
|
|
40
40
|
"<archetype + sector>" --domain color --json
|
|
41
41
|
```
|
|
@@ -45,7 +45,7 @@ python3 <skills-root>/corpus-grounding/scripts/ground.py search \
|
|
|
45
45
|
3. **Ground the type story** via:
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
|
|
48
|
+
./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
|
|
49
49
|
--manifest <skills-root>/brand/data/manifest.json \
|
|
50
50
|
"<archetype + sector>" --domain typography --json
|
|
51
51
|
```
|
|
@@ -55,7 +55,7 @@ python3 <skills-root>/corpus-grounding/scripts/ground.py search \
|
|
|
55
55
|
4. **Ground the logo direction** via:
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
-
|
|
58
|
+
./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
|
|
59
59
|
--manifest <skills-root>/brand/data/manifest.json \
|
|
60
60
|
"<archetype + sector>" --domain logo --json
|
|
61
61
|
```
|
|
@@ -35,7 +35,7 @@ Grounding skill. Consults the brand corpus to surface archetype, positioning, vo
|
|
|
35
35
|
2. **Ground via the corpus.** Run the corpus engine for each required domain. Start with archetype, then voice, then messaging:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
|
|
38
|
+
./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
|
|
39
39
|
--manifest <skills-root>/brand/data/manifest.json \
|
|
40
40
|
"<sector + audience + intent>" --domain archetype --json
|
|
41
41
|
```
|
|
@@ -49,13 +49,13 @@ execution:
|
|
|
49
49
|
3. **Generate** CSS vars + Tailwind through the toolchain:
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
|
-
|
|
52
|
+
./scripts-run <skills-root>/design-tokens/scripts/tokens generate \
|
|
53
53
|
--config .tokens.json -o assets/design-tokens.css
|
|
54
|
-
|
|
54
|
+
./scripts-run <skills-root>/design-tokens/scripts/tokens generate \
|
|
55
55
|
--config .tokens.json --format tailwind
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
4. **Validate** —
|
|
58
|
+
4. **Validate** — `./scripts-run <skills-root>/design-tokens/scripts/tokens
|
|
59
59
|
validate --dir src/` until clean (exit 0 is the evidence); convert
|
|
60
60
|
hardcoded values to `var(--token)`.
|
|
61
61
|
5. **Export the deck templates** — emit the locked-variable brand deck
|
|
@@ -145,3 +145,9 @@ Apply the [Frugality Charter](../../contexts/contracts/frugality-charter.md).
|
|
|
145
145
|
* Skip the philosophy file — the artifact without it is just an image
|
|
146
146
|
* Skip the refinement pass
|
|
147
147
|
* Write binary artifacts to the repo root or to source-of-truth dirs
|
|
148
|
+
|
|
149
|
+
## See also
|
|
150
|
+
|
|
151
|
+
- [`html-deck`](../html-deck/SKILL.md) — multi-slide HTML presentations
|
|
152
|
+
(fixed-canvas deck with navigation); this skill owns single-frame static
|
|
153
|
+
art, not decks.
|
|
@@ -9,12 +9,15 @@ execution:
|
|
|
9
9
|
timeout_seconds: 60
|
|
10
10
|
allowed_tools: []
|
|
11
11
|
command:
|
|
12
|
-
-
|
|
13
|
-
- src/scripts/check_references
|
|
12
|
+
- ./scripts-run
|
|
13
|
+
- src/scripts/check_references
|
|
14
14
|
workspaces:
|
|
15
15
|
- agent-config-maintainer
|
|
16
16
|
packs:
|
|
17
17
|
- meta
|
|
18
|
+
gaps:
|
|
19
|
+
- description: "Only validates references to known-root paths (docs/, skills/, rules/, commands/, contexts/, personas/, …). A relative-path link such as `./sibling.md` or `../foo.md` is not matched, so a broken relative link is never reported."
|
|
20
|
+
witness: tests/scripts/witness/check_refs_relative_gap.test.ts
|
|
18
21
|
---
|
|
19
22
|
|
|
20
23
|
# check-refs
|
|
@@ -52,7 +55,7 @@ this skill's frontmatter governs the call:
|
|
|
52
55
|
```
|
|
53
56
|
|
|
54
57
|
The dispatcher resolves the request, the shell handler runs
|
|
55
|
-
|
|
58
|
+
`./scripts-run src/scripts/check_references`, captures stdout/stderr, and returns a
|
|
56
59
|
typed `ExecutionResult`.
|
|
57
60
|
|
|
58
61
|
### 3. Verify the result
|
|
@@ -63,7 +66,7 @@ Check the returned `ExecutionResult`:
|
|
|
63
66
|
- `exit_code: 1` → at least one broken reference — read `stdout` for file,
|
|
64
67
|
line, and the offending ref, then fix the source or update the target
|
|
65
68
|
- `status: timeout` → the checker exceeded `timeout_seconds` — investigate
|
|
66
|
-
- `status: error` →
|
|
69
|
+
- `status: error` → runner or script missing — confirm `./scripts-run` and
|
|
67
70
|
`src/scripts/check_references.ts` are available at the repository root
|
|
68
71
|
|
|
69
72
|
## Output format
|
|
@@ -3,6 +3,7 @@ model_tier: high
|
|
|
3
3
|
name: code-review
|
|
4
4
|
description: "Use when the user says \"review this\", \"check my code\", or wants feedback on changes. Reviews for correctness, quality, security, and coding standards."
|
|
5
5
|
domain: quality
|
|
6
|
+
parallelizable: files
|
|
6
7
|
workspaces:
|
|
7
8
|
- engineering
|
|
8
9
|
packs:
|