@event4u/agent-config 16.3.0 → 16.5.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +178 -78
- package/README.md +2 -2
- package/agents/templates/.ai-council.yml.example +26 -8
- package/dist/agent-src/commands/analyze/inbox.md +10 -7
- package/dist/agent-src/commands/bug/investigate.md +1 -1
- package/dist/agent-src/commands/commit/in-chunks.md +40 -31
- package/dist/agent-src/commands/commit.md +72 -33
- package/dist/agent-src/commands/condense.md +2 -8
- package/dist/agent-src/commands/council/debate.md +11 -7
- package/dist/agent-src/commands/council/default.md +10 -9
- package/dist/agent-src/commands/council.md +1 -1
- package/dist/agent-src/commands/design.md +1 -1
- package/dist/agent-src/commands/estimate-ticket.md +1 -1
- package/dist/agent-src/commands/feature/explore.md +3 -3
- package/dist/agent-src/commands/feature/plan.md +1 -1
- package/dist/agent-src/commands/fix/ci.md +17 -3
- package/dist/agent-src/commands/fix/commit-messages.md +48 -23
- package/dist/agent-src/commands/fix/pr-comments.md +3 -6
- package/dist/agent-src/commands/implement-ticket.md +3 -3
- package/dist/agent-src/commands/memory/add.md +4 -16
- package/dist/agent-src/commands/memory/load.md +5 -6
- package/dist/agent-src/commands/memory/promote.md +3 -16
- package/dist/agent-src/commands/mission/upgrade.md +3 -2
- package/dist/agent-src/commands/optimize/agents-dir.md +2 -2
- package/dist/agent-src/commands/optimize/deep.md +4 -2
- package/dist/agent-src/commands/optimize/rtk.md +4 -26
- package/dist/agent-src/commands/pr/create/description-only.md +18 -15
- package/dist/agent-src/commands/pr/create.md +42 -34
- package/dist/agent-src/commands/pr/merge.md +136 -9
- package/dist/agent-src/commands/prepare-for-review.md +13 -11
- package/dist/agent-src/commands/project/analyze.md +7 -35
- package/dist/agent-src/commands/refine-ticket.md +1 -1
- package/dist/agent-src/commands/review/changes.md +14 -19
- package/dist/agent-src/commands/roadmap/next.md +10 -1
- package/dist/agent-src/commands/roadmap/process-full.md +52 -38
- package/dist/agent-src/commands/roadmap/resolve-blockers.md +64 -14
- package/dist/agent-src/commands/worktree/create.md +7 -3
- package/dist/agent-src/commands/worktree/verify.md +2 -1
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +5 -3
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +7 -9
- package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -6
- package/dist/agent-src/contexts/contracts/frugality-charter.md +8 -5
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +0 -1
- package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
- package/dist/agent-src/contexts/execution/non-interactive-contract.md +5 -8
- package/dist/agent-src/contexts/execution/rdp-gate.md +4 -4
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +9 -8
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +67 -52
- package/dist/agent-src/contexts/execution/subagent-routing.md +8 -8
- package/dist/agent-src/contexts/execution/subagent-steering.md +6 -4
- package/dist/agent-src/contexts/execution/terminal-states.md +2 -2
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +4 -10
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
- package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
- package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
- package/dist/agent-src/guidelines/agent-infra/layered-settings.md +13 -1
- package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
- package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +36 -0
- package/dist/agent-src/guidelines/design-antipatterns.md +1 -1
- package/dist/agent-src/guidelines/php/git.md +15 -2
- package/dist/agent-src/rules/active-remediation.md +0 -1
- package/dist/agent-src/rules/analysis-skill-routing.md +0 -1
- package/dist/agent-src/rules/architecture.md +0 -1
- package/dist/agent-src/rules/artifact-drafting-protocol.md +0 -1
- package/dist/agent-src/rules/artifact-engagement-recording.md +0 -1
- package/dist/agent-src/rules/augment-edit-discipline.md +0 -1
- package/dist/agent-src/rules/autonomous-execution.md +0 -1
- package/dist/agent-src/rules/brand-consistency.md +0 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +0 -1
- package/dist/agent-src/rules/broken-access-control.md +0 -1
- package/dist/agent-src/rules/cli-output-handling.md +0 -1
- package/dist/agent-src/rules/code-comment-discipline.md +0 -1
- package/dist/agent-src/rules/code-provenance.md +0 -1
- package/dist/agent-src/rules/command-suggestion-policy.md +0 -1
- package/dist/agent-src/rules/commit-conventions.md +1 -2
- package/dist/agent-src/rules/communication-through-line.md +1 -2
- package/dist/agent-src/rules/content-quoting-floor.md +1 -2
- package/dist/agent-src/rules/context-hygiene.md +5 -5
- package/dist/agent-src/rules/copilot-routing.md +1 -2
- package/dist/agent-src/rules/council-availability.md +4 -4
- package/dist/agent-src/rules/cross-source-consistency.md +4 -6
- package/dist/agent-src/rules/decision-revisit-gate.md +2 -3
- package/dist/agent-src/rules/delegation-policy.md +2 -3
- package/dist/agent-src/rules/design-fidelity.md +0 -1
- package/dist/agent-src/rules/design-review-after-ui-write.md +3 -3
- package/dist/agent-src/rules/devcontainer-routing.md +1 -2
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +0 -1
- package/dist/agent-src/rules/docker-commands.md +0 -1
- package/dist/agent-src/rules/domain-adoption-policy.md +0 -1
- package/dist/agent-src/rules/domain-safety-disclaimer.md +0 -1
- package/dist/agent-src/rules/domain-safety-pii.md +0 -1
- package/dist/agent-src/rules/domain-safety-retention.md +0 -1
- package/dist/agent-src/rules/downstream-changes.md +0 -1
- package/dist/agent-src/rules/engineering-safety-floor.md +0 -1
- package/dist/agent-src/rules/external-code-graph-interop.md +0 -1
- package/dist/agent-src/rules/external-reference-deep-dive.md +0 -1
- package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -2
- package/dist/agent-src/rules/finance-safety-floor.md +0 -1
- package/dist/agent-src/rules/fix-what-you-see.md +6 -32
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +0 -1
- package/dist/agent-src/rules/git-history-discipline.md +1 -2
- package/dist/agent-src/rules/guidelines.md +0 -1
- package/dist/agent-src/rules/history-discipline.md +0 -1
- package/dist/agent-src/rules/icon-consistency.md +0 -1
- package/dist/agent-src/rules/image-likeness-and-rights.md +0 -1
- package/dist/agent-src/rules/improve-before-implement.md +0 -1
- package/dist/agent-src/rules/invite-challenge.md +0 -1
- package/dist/agent-src/rules/laravel-routing.md +1 -2
- package/dist/agent-src/rules/laravel-translations.md +0 -1
- package/dist/agent-src/rules/legal-safety-floor.md +0 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +0 -1
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +0 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +0 -1
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +0 -1
- package/dist/agent-src/rules/media-governance-routing.md +1 -2
- package/dist/agent-src/rules/media-sync-ground-truth.md +0 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +0 -1
- package/dist/agent-src/rules/missing-skill-recovery.md +0 -1
- package/dist/agent-src/rules/missing-tool-handling.md +0 -1
- package/dist/agent-src/rules/model-recommendation.md +0 -1
- package/dist/agent-src/rules/neighbour-precedence.md +64 -0
- package/dist/agent-src/rules/no-attribution-footers.md +0 -1
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +0 -1
- package/dist/agent-src/rules/no-pr-progress-comments.md +0 -1
- package/dist/agent-src/rules/no-roadmap-references.md +0 -1
- package/dist/agent-src/rules/notes-first-reasoning.md +0 -1
- package/dist/agent-src/rules/onboarding-gate.md +0 -1
- package/dist/agent-src/rules/output-discipline.md +0 -1
- package/dist/agent-src/rules/package-ci-checks.md +0 -1
- package/dist/agent-src/rules/persona-governance.md +2 -3
- package/dist/agent-src/rules/php-coding.md +0 -1
- package/dist/agent-src/rules/prefer-enums-over-literals.md +0 -1
- package/dist/agent-src/rules/preservation-guard.md +0 -1
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +2 -3
- package/dist/agent-src/rules/question-not-instruction.md +0 -1
- package/dist/agent-src/rules/reviewer-awareness.md +0 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +3 -6
- package/dist/agent-src/rules/role-mode-adherence.md +0 -1
- package/dist/agent-src/rules/rule-type-governance.md +0 -1
- package/dist/agent-src/rules/runtime-safety.md +0 -1
- package/dist/agent-src/rules/scale-discipline.md +0 -1
- package/dist/agent-src/rules/secret-vcs-guard.md +0 -1
- package/dist/agent-src/rules/security-sensitive-stop.md +0 -1
- package/dist/agent-src/rules/self-repair-loop.md +0 -1
- package/dist/agent-src/rules/senior-engineering-discipline.md +0 -1
- package/dist/agent-src/rules/session-canary.md +0 -1
- package/dist/agent-src/rules/settings-ask-protocol.md +5 -6
- package/dist/agent-src/rules/size-enforcement.md +0 -1
- package/dist/agent-src/rules/skill-improvement-trigger.md +2 -3
- package/dist/agent-src/rules/skill-quality.md +0 -1
- package/dist/agent-src/rules/slash-command-routing-policy.md +0 -1
- package/dist/agent-src/rules/source-confidentiality.md +0 -1
- package/dist/agent-src/rules/source-discovery-gate.md +0 -1
- package/dist/agent-src/rules/source-of-truth.md +0 -1
- package/dist/agent-src/rules/spreadsheet-source-quality.md +1 -2
- package/dist/agent-src/rules/strategy-safety-floor.md +0 -1
- package/dist/agent-src/rules/symfony-routing.md +1 -2
- package/dist/agent-src/rules/think-before-action.md +0 -1
- package/dist/agent-src/rules/token-budget-discipline.md +14 -48
- package/dist/agent-src/rules/token-efficiency.md +0 -1
- package/dist/agent-src/rules/token-optimizer-maintenance.md +0 -1
- package/dist/agent-src/rules/tool-safety.md +0 -1
- package/dist/agent-src/rules/ui-audit-gate.md +1 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +0 -1
- package/dist/agent-src/rules/upstream-proposal.md +0 -1
- package/dist/agent-src/rules/user-interaction.md +0 -1
- package/dist/agent-src/rules/user-interrupt-priority.md +0 -1
- package/dist/agent-src/scripts/gate_budget.ts +47 -23
- package/dist/agent-src/scripts/gate_execute.ts +12 -4
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +2 -0
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +3 -3
- package/dist/agent-src/skills/ai-council/SKILL.md +7 -4
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +21 -11
- package/dist/agent-src/skills/ai-council/references/procedure.md +12 -6
- package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/canvas-design/SKILL.md +4 -2
- package/dist/agent-src/skills/command-routing/SKILL.md +3 -4
- package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +127 -139
- package/dist/agent-src/skills/corpus-grounding/ATTRIBUTION.md +39 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +8 -2
- package/dist/agent-src/skills/database/data/manifest.json +2 -2
- package/dist/agent-src/skills/database/data/query-tuning.csv +13 -13
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +13 -10
- package/dist/agent-src/skills/design-system-capture/SKILL.md +0 -3
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +49 -2
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +9 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +44 -44
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +312 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +205 -0
- package/dist/agent-src/skills/iconography/SKILL.md +4 -2
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +16 -5
- package/dist/agent-src/skills/jira-integration/SKILL.md +3 -3
- package/dist/agent-src/skills/logo-generation/SKILL.md +12 -8
- package/dist/agent-src/skills/merge-conflicts/SKILL.md +10 -4
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +4 -4
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +4 -2
- package/dist/agent-src/skills/source-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/svg-authoring/SKILL.md +318 -0
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +3 -1
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +5 -2
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agent-settings.md +46 -129
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
- package/dist/agent-src/templates/command.md +2 -2
- package/dist/agent-src/templates/roadmaps.md +6 -1
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
- package/dist/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
- package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
- package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
- package/dist/agent-src/templates/skill.md +1 -1
- package/dist/cli/commands/uiRender.js +201 -4
- package/dist/cli/commands/uiRenderAsset.js +1308 -0
- package/dist/cli/commands/uiRenderAssetCompare.js +752 -0
- package/dist/cli/commands/uiRenderAssetGrid.js +265 -0
- package/dist/cli/commands/uiRenderAssetGrounds.js +323 -0
- package/dist/cli/commands/uiRenderAssetIsolation.js +85 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +145 -0
- package/dist/cli/main.js +47 -1
- package/dist/cli/registry.js +2 -1
- package/dist/cli-delegate/check_update_banner.js +195 -119
- package/dist/cli-delegate/{chunk-S4UMZNES.js → chunk-4DBG5K7M.js} +5 -5
- package/dist/cli-delegate/{chunk-TRI6DQZ6.js → chunk-5GPULQBE.js} +60 -42
- package/dist/cli-delegate/{chunk-JQVYKIZA.js → chunk-6SRJTYJS.js} +33 -177
- package/dist/cli-delegate/chunk-6V5FMA3P.js +186 -0
- package/dist/cli-delegate/chunk-6YQC2HLF.js +415 -0
- package/dist/cli-delegate/{chunk-E4XIZDIB.js → chunk-7HKRE54K.js} +1 -64
- package/dist/cli-delegate/{chunk-7HQ52DHU.js → chunk-AL3RZ22D.js} +1 -1
- package/dist/cli-delegate/{chunk-DBH4AHDK.js → chunk-ED7KCMLB.js} +9 -11
- package/dist/cli-delegate/{chunk-NXEILF2K.js → chunk-F3QDG2GT.js} +481 -72
- package/dist/cli-delegate/{chunk-CQWX336L.js → chunk-G5VVIZRC.js} +3 -3
- package/dist/cli-delegate/{chunk-JY2I2DXV.js → chunk-H76PHZBI.js} +137 -60
- package/dist/cli-delegate/chunk-IAYTIIQW.js +67 -0
- package/dist/cli-delegate/{chunk-LIYTLH6O.js → chunk-KXXWJTDO.js} +5 -10
- package/dist/cli-delegate/{chunk-T7L2QK3K.js → chunk-LQOCRFWT.js} +1 -1
- package/dist/cli-delegate/{chunk-S4YWNRKO.js → chunk-MDPPKQCQ.js} +34 -1
- package/dist/cli-delegate/chunk-OAFSJBHH.js +272 -0
- package/dist/cli-delegate/{chunk-GKE7ZVFA.js → chunk-PWX7CKMD.js} +1 -1
- package/dist/cli-delegate/{chunk-NDJLNC6Q.js → chunk-T6BP34WI.js} +1 -0
- package/dist/cli-delegate/{chunk-RQNNW7IF.js → chunk-T7XSJSUQ.js} +433 -632
- package/dist/cli-delegate/{chunk-NQ7WT43P.js → chunk-TMWYUOK4.js} +75 -12
- package/dist/cli-delegate/{chunk-EEHDXSYD.js → chunk-WQWXGIWB.js} +12 -273
- package/dist/cli-delegate/{chunk-QLDHIPWR.js → chunk-XQTPXKFA.js} +1 -1
- package/dist/cli-delegate/cmd_analyze_session.js +223 -43
- package/dist/cli-delegate/cmd_brand_status.js +3 -2
- package/dist/cli-delegate/cmd_conformance.js +489 -238
- package/dist/cli-delegate/cmd_converge.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +15 -12
- package/dist/cli-delegate/cmd_doctor_neighbours.js +11 -4
- package/dist/cli-delegate/cmd_explain.js +43 -19
- package/dist/cli-delegate/cmd_export.js +10 -10
- package/dist/cli-delegate/cmd_git_convention.js +1851 -0
- package/dist/cli-delegate/cmd_handoff.js +40 -21
- package/dist/cli-delegate/cmd_mcp_available.js +3 -2
- package/dist/cli-delegate/cmd_migrate.js +3 -3
- package/dist/cli-delegate/cmd_packs_active.js +4 -3
- package/dist/cli-delegate/cmd_prune.js +10 -10
- package/dist/cli-delegate/cmd_route_audit.js +7 -7
- package/dist/cli-delegate/cmd_route_explain.js +5 -5
- package/dist/cli-delegate/cmd_session_recycle.js +9 -7
- package/dist/cli-delegate/cmd_settings_check.js +54 -7
- package/dist/cli-delegate/cmd_settings_get.js +18 -8
- package/dist/cli-delegate/cmd_settings_migrate.js +10 -10
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +10 -10
- package/dist/cli-delegate/cmd_uninstall.js +10 -10
- package/dist/cli-delegate/cmd_update.js +7 -7
- package/dist/cli-delegate/cmd_upgrade.js +7 -7
- package/dist/cli-delegate/cmd_validate.js +10 -10
- package/dist/cli-delegate/cmd_versions.js +5 -5
- package/dist/cli-delegate/gate_budget.js +1 -1
- package/dist/cli-delegate/gate_execute.js +2 -2
- package/dist/cli-delegate/roadmap_gates.js +2 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +171 -107
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +7 -7
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +41 -22
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/dispatch.js +2520 -1924
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/svg_rules.chunk.cjs +1626 -0
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -0
- package/dist/install/install.mjs +462 -431
- package/dist/install/installThinLayer.js +40 -12
- package/dist/install/installedRuleLinks.js +105 -19
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +2 -2
- package/dist/mcp/registry-manifest.json +5 -5
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +3063 -2160
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +15 -120
- package/dist/scripts/_lib/compile_time_toggles.js +12 -21
- package/dist/scripts/_lib/git_convention.js +232 -0
- package/dist/scripts/_lib/global_deploy_inventory.js +730 -0
- package/dist/scripts/_lib/installed_layer.js +344 -18
- package/dist/scripts/_lib/package_root.js +68 -0
- package/dist/scripts/_lib/rule_law_section.js +1 -1
- package/dist/scripts/_lib/scan_scope.js +105 -0
- package/dist/scripts/_lib/settings_removed_keys.js +168 -0
- package/dist/scripts/_lib/svg_dom.js +284 -0
- package/dist/scripts/_lib/svg_geometry.js +477 -0
- package/dist/scripts/_lib/svg_motion.js +179 -0
- package/dist/scripts/_lib/svg_rules.js +1337 -0
- package/dist/scripts/_lib/svg_urls.js +67 -0
- package/dist/scripts/_lib/thin_rules.js +80 -3
- package/dist/scripts/lint_svg_asset.js +324 -0
- package/dist/server/app.js +2 -1
- package/dist/server/gitKeysGate.js +105 -0
- package/dist/server/routes/settings.js +67 -8
- package/dist/server/routes/wizard.js +4 -0
- package/dist/server/schemas/settings.js +23 -81
- package/dist/shared/skillRanking.js +30 -4
- package/dist/ui/assets/{index-Cwq4d0hX.js → index-C3djEJah.js} +2 -2
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +72 -1
- package/docs/contracts/settings-classes.md +35 -65
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
- package/docs/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
- package/docs/guidelines/agent-infra/layered-settings.md +13 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
- package/docs/guidelines/agent-infra/size-and-scope.md +36 -0
- package/docs/guidelines/design-antipatterns.md +1 -1
- package/docs/guidelines/php/git.md +15 -2
- package/package.json +4 -3
- package/src/agent-src/scripts/gate_budget.ts +47 -23
- package/src/agent-src/scripts/gate_execute.ts +12 -4
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
- package/src/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
- package/src/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
- package/src/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
- package/src/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
- package/src/config/agent-settings.template.yml +79 -312
- package/src/config/agents-paths.yml +16 -0
- package/src/config/assurance-capability-registry.json +7 -3
- package/src/config/ci-local-parity.yml +3 -0
- package/src/config/continuity-surface.json +3 -3
- package/src/config/discovery/packs.yml +17 -1
- package/src/config/evaluator-budgets.json +19 -6
- package/src/config/gate-coverage.yml +65 -23
- package/src/config/gate-violation-baselines.json +56 -16
- package/src/config/gitignore-block.txt +19 -0
- package/src/config/hook-bundle-budget.json +1 -1
- package/src/config/release-gate-locality.yml +2 -1
- package/src/config/routing-coverage-seed.json +55 -6
- package/src/config/rule-law-ceilings.json +12 -6
- package/src/config/rule-obligations.json +833 -0
- package/src/install/installThinLayer.ts +76 -10
- package/src/install/installedRuleLinks.ts +105 -17
- package/src/scripts/_cli/cmd_analyze_session.ts +9 -15
- package/src/scripts/_cli/cmd_conformance.ts +13 -2
- package/src/scripts/_cli/cmd_doctor.ts +10 -10
- package/src/scripts/_cli/cmd_doctor_neighbours.ts +133 -0
- package/src/scripts/_cli/cmd_explain.ts +72 -14
- package/src/scripts/_cli/cmd_git_convention.ts +637 -0
- package/src/scripts/_cli/cmd_settings_check.ts +66 -8
- package/src/scripts/_cli/cmd_settings_get.ts +18 -3
- package/src/scripts/_cli/doctor_execution.ts +72 -1
- package/src/scripts/_dispatch.bash +37 -2
- package/src/scripts/_lib/agent_settings.ts +15 -124
- package/src/scripts/_lib/blocked_by_marker.ts +1 -1
- package/src/scripts/_lib/compile_time_toggles.ts +12 -21
- package/src/scripts/_lib/dispatch_import_closure.ts +163 -0
- package/src/scripts/_lib/git_base_ref.ts +92 -0
- package/src/scripts/_lib/git_convention.ts +291 -0
- package/src/scripts/_lib/git_convention_carrier.ts +389 -0
- package/src/scripts/_lib/git_convention_grammar.ts +246 -0
- package/src/scripts/_lib/git_convention_measure.ts +344 -0
- package/src/scripts/_lib/global_deploy_inventory.ts +74 -0
- package/src/scripts/_lib/graph_feeder_record.ts +236 -13
- package/src/scripts/_lib/installed_layer.ts +448 -23
- package/src/scripts/_lib/knowledge_global.ts +14 -1
- package/src/scripts/_lib/module_reach.ts +456 -0
- package/src/scripts/_lib/neighbour_contradictions.ts +236 -0
- package/src/scripts/_lib/neighbour_tool_use.ts +8 -10
- package/src/scripts/_lib/ratification_artifact.ts +220 -1
- package/src/scripts/_lib/ratification_subject.ts +92 -0
- package/src/scripts/_lib/release_findings_ingest.ts +15 -7
- package/src/scripts/_lib/release_highlights.ts +5 -0
- package/src/scripts/_lib/rule_law_section.ts +1 -1
- package/src/scripts/_lib/rule_obligations.ts +205 -0
- package/src/scripts/_lib/self_repair.ts +1 -1
- package/src/scripts/_lib/settings_removed_keys.ts +173 -0
- package/src/scripts/_lib/svg_dom.ts +318 -0
- package/src/scripts/_lib/svg_geometry.ts +480 -0
- package/src/scripts/_lib/svg_motion.ts +208 -0
- package/src/scripts/_lib/svg_rules.ts +1453 -0
- package/src/scripts/_lib/svg_urls.ts +72 -0
- package/src/scripts/_lib/test_red_state.ts +5 -0
- package/src/scripts/_lib/thin_rules.ts +83 -3
- package/src/scripts/_lib/touched_file_quality.ts +142 -6
- package/src/scripts/_lib/verification_command.ts +59 -0
- package/src/scripts/_lib/verify_clause.ts +27 -17
- package/src/scripts/_lib/worker_budget.ts +1 -1
- package/src/scripts/adr/regenerate_index.ts +16 -1
- package/src/scripts/ai_council/config.ts +7 -7
- package/src/scripts/ai_council/modification_review.ts +100 -0
- package/src/scripts/ai_council/modification_review_questions.ts +90 -0
- package/src/scripts/ai_council/orchestrator.ts +5 -5
- package/src/scripts/ai_council/spend_gate.ts +18 -7
- package/src/scripts/ai_team/config.ts +11 -16
- package/src/scripts/audit_user_type_axis.ts +20 -8
- package/src/scripts/bench_ab_clone.ts +1 -2
- package/src/scripts/bench_concern_spawn_path.ts +129 -0
- package/src/scripts/bench_graph_feeder_latency.ts +584 -0
- package/src/scripts/check_agent_artifact_location.ts +36 -0
- package/src/scripts/check_branch_freshness.ts +147 -24
- package/src/scripts/check_enforcement_coverage.ts +130 -0
- package/src/scripts/check_evaluator_budgets.ts +4 -0
- package/src/scripts/check_finding_dispositions.ts +88 -25
- package/src/scripts/check_gate_coverage.ts +4 -3
- package/src/scripts/check_gate_reachability.ts +48 -1
- package/src/scripts/check_generator_sync.ts +48 -0
- package/src/scripts/check_hook_bundle_composition.ts +107 -0
- package/src/scripts/check_kernel_edit_ratified.ts +86 -6
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_release_manifest_content.ts +189 -0
- package/src/scripts/check_standing_rule_delivery.ts +96 -0
- package/src/scripts/check_suppression_hygiene.ts +2 -5
- package/src/scripts/ci_settle.ts +42 -5
- package/src/scripts/classify_merge_risk.ts +320 -0
- package/src/scripts/closure_scan.ts +91 -1
- package/src/scripts/command_suggester/settings.ts +8 -108
- package/src/scripts/command_suggester/types.ts +4 -5
- package/src/scripts/consumer_matrix.ts +102 -0
- package/src/scripts/context_hygiene_hook.ts +13 -23
- package/src/scripts/cost/preflight.mjs +12 -1
- package/src/scripts/council_cli.ts +7 -7
- package/src/scripts/dispatch_r2_reviewer.ts +24 -11
- package/src/scripts/explain_run.ts +8 -13
- package/src/scripts/generate_git_convention_grammar.ts +127 -0
- package/src/scripts/generate_host_cost_table.ts +20 -3
- package/src/scripts/handoff_context_hook.ts +86 -37
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +25 -6
- package/src/scripts/hooks/block_config_weakening.ts +48 -5
- package/src/scripts/hooks/block_plumbing_writes.ts +8 -4
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +16 -1
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +2 -3
- package/src/scripts/hooks/design_pass_hook.ts +157 -3
- package/src/scripts/hooks/evidence_independence.ts +12 -4
- package/src/scripts/hooks/mcp_usage_observation_hook.ts +121 -0
- package/src/scripts/hooks/push_settle_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +44 -3
- package/src/scripts/hooks/state_io.ts +8 -4
- package/src/scripts/hooks/svg_obligation.ts +497 -0
- package/src/scripts/hooks/svg_rules_loader.ts +133 -0
- package/src/scripts/hooks/telemetry_usage_hook.ts +7 -46
- package/src/scripts/hooks/turn_end_gate_hook.ts +6 -3
- package/src/scripts/install-hooks.sh +42 -14
- package/src/scripts/install.ts +7 -31
- package/src/scripts/lint_blocker_citations.ts +198 -0
- package/src/scripts/lint_consolidation_lineage.ts +6 -3
- package/src/scripts/lint_design_quality.ts +60 -12
- package/src/scripts/lint_evidence_artifacts.ts +9 -0
- package/src/scripts/lint_hook_concern_budget.ts +10 -21
- package/src/scripts/lint_motion_authority_drift.ts +27 -0
- package/src/scripts/lint_pack_boundaries.ts +406 -28
- package/src/scripts/lint_roadmap_blockers.ts +282 -29
- package/src/scripts/lint_roadmap_complexity.ts +4 -2
- package/src/scripts/lint_rule_law_section.ts +151 -21
- package/src/scripts/lint_rule_skill_pack_reach.ts +17 -0
- package/src/scripts/lint_settings_classes.ts +1 -1
- package/src/scripts/lint_svg_asset.ts +365 -0
- package/src/scripts/lint_ticked_unmet_criteria.ts +165 -0
- package/src/scripts/lint_workflow_security.ts +12 -1
- package/src/scripts/measure_skill_ranker_baseline.ts +5 -0
- package/src/scripts/model_rule_injection.ts +3 -3
- package/src/scripts/onboarding_gate_hook.ts +7 -6
- package/src/scripts/print_required_checks.ts +15 -3
- package/src/scripts/probe_host_compliance.ts +33 -5
- package/src/scripts/probe_turnaround.ts +183 -3
- package/src/scripts/ratification_header.ts +77 -0
- package/src/scripts/refusal_envelope.ts +138 -0
- package/src/scripts/release_publication.ts +29 -3
- package/src/scripts/report_dispatch_import_closure.ts +76 -0
- package/src/scripts/report_installed_rule_links.ts +118 -1
- package/src/scripts/report_module_reach.ts +212 -0
- package/src/scripts/report_obligation_mechanism.ts +16 -18
- package/src/scripts/report_parked_blockers.ts +222 -0
- package/src/scripts/report_required_checks_drift.ts +196 -0
- package/src/scripts/report_skill_ranker_confusion.ts +103 -2
- package/src/scripts/report_standing_payload_by_host.ts +1 -1
- package/src/scripts/routing_doctor.ts +2 -2
- package/src/scripts/schemas/agent-settings.schema.json +17 -31
- package/src/scripts/schemas/command.schema.json +1 -1
- package/src/scripts/schemas/skill.schema.json +1 -1
- package/src/scripts/self_review_gate.ts +39 -2
- package/src/scripts/skill_tools/score_skill_relevance.ts +28 -19
- package/src/scripts/sync_pr_branch.ts +403 -132
- package/src/scripts/trigger_eval_grandfather.json +0 -16
- package/src/server/schemas/settings.ts +33 -177
- package/src/shared/skillRanking.ts +53 -4
- package/dist/cli-delegate/chunk-NYX3L2PZ.js +0 -99
- package/src/scripts/_lib/config_chain.ts +0 -477
- package/src/scripts/_lib/conformance_report.ts +0 -403
- package/src/scripts/_lib/eval_discrimination.ts +0 -95
- package/src/scripts/_lib/evaluator_promotion.ts +0 -225
- package/src/scripts/_lib/file_slicer.ts +0 -117
- package/src/scripts/_lib/legacy_boundary_map.ts +0 -228
- package/src/scripts/_lib/minimality_tiebreak.ts +0 -168
- package/src/scripts/_lib/overbuild_lens_contract.ts +0 -196
- package/src/scripts/_lib/role_split.ts +0 -338
|
@@ -17,7 +17,6 @@ collision_ok:
|
|
|
17
17
|
"src/skills/": "skill prose must not name derivation sources"
|
|
18
18
|
"src/rules/": "rule prose must not name derivation sources"
|
|
19
19
|
"agents/roadmaps/": "harvest/comparison roadmaps stay anonymized"
|
|
20
|
-
# obligation: line 46
|
|
21
20
|
obligation_frequency: "per-edit"
|
|
22
21
|
---
|
|
23
22
|
|
|
@@ -20,7 +20,6 @@ packs: [engineering-base]
|
|
|
20
20
|
collision_ok:
|
|
21
21
|
"endpoint": "an unconfirmed endpoint shape needs evidence before code"
|
|
22
22
|
"schema": "a DB schema is the canonical structure to verify from a real source"
|
|
23
|
-
# obligation: line 44
|
|
24
23
|
obligation_frequency: "per-edit"
|
|
25
24
|
---
|
|
26
25
|
|
|
@@ -14,7 +14,6 @@ workspaces:
|
|
|
14
14
|
- finance
|
|
15
15
|
packs:
|
|
16
16
|
- finance-basic
|
|
17
|
-
# obligation: line 49
|
|
18
17
|
obligation_frequency: "per-edit"
|
|
19
18
|
---
|
|
20
19
|
|
|
@@ -60,5 +59,5 @@ Entering, updating, or charting **financial figures** in a spreadsheet / model.
|
|
|
60
59
|
## See also
|
|
61
60
|
|
|
62
61
|
- [`spreadsheet-authoring`](../skills/spreadsheet-authoring/SKILL.md) — the spreadsheet surface floor this rule's sourcing discipline plugs into.
|
|
63
|
-
-
|
|
62
|
+
- `docs/contracts/surface-agent-contracts.md` — the spreadsheet surface's invariants + truth source.
|
|
64
63
|
- [`finance-safety-floor`](finance-safety-floor.md) — the finance-pack advisory floor (not-investment-advice, sensitivity) this complements.
|
|
@@ -16,7 +16,6 @@ trust:
|
|
|
16
16
|
install:
|
|
17
17
|
default: false
|
|
18
18
|
removable: true
|
|
19
|
-
# obligation: line 23
|
|
20
19
|
obligation_frequency: "none"
|
|
21
20
|
---
|
|
22
21
|
|
|
@@ -24,5 +23,5 @@ obligation_frequency: "none"
|
|
|
24
23
|
|
|
25
24
|
**Iron Law.** Symfony-flavoured PHP → `symfony-workflow`. Discriminator: entry point and router, not the dependency list — `symfony/*` with no skeleton marker is the third verdict.
|
|
26
25
|
|
|
27
|
-
Body migrated to `skill:symfony-workflow`. Disambiguates the laravel ↔ symfony-workflow cluster head per
|
|
26
|
+
Body migrated to `skill:symfony-workflow`. Disambiguates the laravel ↔ symfony-workflow cluster head per `docs/contracts/adr-architectural-consensus-mechanism.md`.
|
|
28
27
|
Trigger-set above activates this routing on demand, independent of the discipline profile (ADR-110).
|
|
@@ -22,7 +22,6 @@ collision_ok:
|
|
|
22
22
|
"implement": "analyze-first floor on any implementation"
|
|
23
23
|
"debug": "targeted inspection over brute force while debugging"
|
|
24
24
|
"fix": "no blind trial-and-error on fixes — max 2 retries"
|
|
25
|
-
# obligation: line 50
|
|
26
25
|
obligation_frequency: "per-edit"
|
|
27
26
|
---
|
|
28
27
|
|
|
@@ -8,7 +8,6 @@ triggers:
|
|
|
8
8
|
self_contained: true
|
|
9
9
|
workspaces: [agent-config-maintainer]
|
|
10
10
|
packs: [meta]
|
|
11
|
-
# obligation: line 43
|
|
12
11
|
obligation_frequency: "per-edit"
|
|
13
12
|
---
|
|
14
13
|
|
|
@@ -32,15 +31,10 @@ TO THE FULL FRUGALITY CANON (telegraph-speak, thin-projector).
|
|
|
32
31
|
| `standard` | — | Balanced condensation | Not trimmed if priority ≥ 60 | 500–2000 tokens |
|
|
33
32
|
| `rich` | Must be declared + justified | **Exempt** | **Never trimmed** | 2000–3500 tokens |
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
`ask`, the question's shape is
|
|
40
|
-
[`settings-ask-protocol`](settings-ask-protocol.md)'s, not this rule's; what only
|
|
41
|
-
this rule knows is the number to put in it — the estimated token delta, ≈ skill
|
|
42
|
-
file size in chars / 4. The answer is cached for the session and never persisted
|
|
43
|
-
(`tokens.rich_skills` is class C).
|
|
34
|
+
Rich skills always load in full — there is no setting to read. The
|
|
35
|
+
`tokens.rich_skills` key that once allowed `off` / `ask` was retired on 2026-10-09
|
|
36
|
+
with its default (`on`) as the fixed behavior; the skill's own
|
|
37
|
+
`token_budget_class: rich` declaration plus the CI ceiling below is what decides.
|
|
44
38
|
|
|
45
39
|
## Requirements for `token_budget_class: rich`
|
|
46
40
|
|
|
@@ -57,15 +51,15 @@ A skill claiming `rich` MUST satisfy ALL three:
|
|
|
57
51
|
carry a `load_context` pointer instead.
|
|
58
52
|
|
|
59
53
|
3. **≤ 15 % of the suite's skills may claim `rich`** — the CI linter counts
|
|
60
|
-
rich-tagged skills and hard-fails if the ratio is exceeded. With
|
|
61
|
-
the cap is ~
|
|
54
|
+
rich-tagged skills and hard-fails if the ratio is exceeded. With 300 skills
|
|
55
|
+
the cap is ~45. Do not claim `rich` for convenience; claim it only for
|
|
62
56
|
irreducible-complexity skills.
|
|
63
57
|
|
|
64
58
|
## Telegraph-speak amendment
|
|
65
59
|
|
|
66
|
-
The telegraph-speak rule is **dormant
|
|
67
|
-
`
|
|
68
|
-
from.
|
|
60
|
+
The telegraph-speak rule is **dormant** — it does not project at all (a
|
|
61
|
+
package-level decision in `compile_time_toggles.ts`), so there is nothing to
|
|
62
|
+
exempt from. If it ever ships again, it **exempts** skills marked
|
|
69
63
|
`token_budget_class: rich`. When such a skill is active:
|
|
70
64
|
|
|
71
65
|
- Do not apply telegraph-speak condensation to its guidance prose
|
|
@@ -75,8 +69,7 @@ from. Where a consumer has enabled it, it **exempts** skills marked
|
|
|
75
69
|
|
|
76
70
|
This exemption is limited to the skill's guidance content; reply prose from the
|
|
77
71
|
*agent* (not from the skill body) remains subject to telegraph-speak wherever
|
|
78
|
-
that rule ships at all
|
|
79
|
-
itself names.
|
|
72
|
+
that rule ships at all, within the carve-outs the rule itself names.
|
|
80
73
|
|
|
81
74
|
## Value-over-budget escalation
|
|
82
75
|
|
|
@@ -104,17 +97,6 @@ canon: a near-miss where a net-positive frontend/design change was
|
|
|
104
97
|
almost dropped purely on token-budget grounds is the canonical failure
|
|
105
98
|
this escalation exists to prevent.
|
|
106
99
|
|
|
107
|
-
## Candidate rich skills (justified, not exhaustive)
|
|
108
|
-
|
|
109
|
-
These skills are approved `rich` by this roadmap's council:
|
|
110
|
-
|
|
111
|
-
| Skill | Justification summary |
|
|
112
|
-
|---|---|
|
|
113
|
-
| `design-intelligence` | 11 corpus CSVs + 16 design-language prose specs + a 10-category checklist; grounded selection needs the full reference to avoid random corpus subsets |
|
|
114
|
-
| `typography-system` | Modular-scale math + 6 worked example type systems; condensing to "use 1.25 ratio" produces agents that invent arbitrary px values |
|
|
115
|
-
| `accessibility-auditor` | WCAG criteria are non-negotiable detail; every criterion has a testable condition + failure mode; compression loses the test procedures |
|
|
116
|
-
| `design-system-capture` (Phase 6) | Writes + maintains DESIGN.md + PRODUCT.md; needs full templates + worked examples to generate useful artifacts |
|
|
117
|
-
|
|
118
100
|
## Rich artifacts lead with a non-negotiable band
|
|
119
101
|
|
|
120
102
|
```
|
|
@@ -138,34 +120,18 @@ be shorter — that is the ceiling, gated below, and the two controls are
|
|
|
138
120
|
independent: an artifact can sit comfortably under the ceiling and still bury
|
|
139
121
|
its obligation on line 300.
|
|
140
122
|
|
|
141
|
-
## The size band
|
|
142
|
-
|
|
143
|
-
The `rich` band is **2,000–3,500 tokens** (ADR-217, `docs/decisions/ADR-217-rich-class-band-measured-and-enforced.md`).
|
|
144
|
-
It was 2,000–5,000 and enforced by nothing until that record: measured with the
|
|
145
|
-
exact BPE tokenizer, the largest rich artifact in the tree is 3,331 tokens, so
|
|
146
|
-
the old ceiling described no artifact that existed. An unused permission costs
|
|
147
|
-
nothing until someone uses it.
|
|
148
|
-
|
|
149
|
-
`lint_token_budget_discipline.ts` gates the **ceiling** and publishes every rich
|
|
150
|
-
artifact's size on the green path. It does **not** gate the floor, and that is a
|
|
151
|
-
finding rather than an omission: running the check once surfaced a 1,931-token
|
|
152
|
-
skill legitimately holding the class, because `rich` buys exemption from
|
|
153
|
-
condensation — a claim about what compression would *lose*, not about file size.
|
|
154
|
-
The published study supplies a degradation threshold, which is a ceiling.
|
|
155
|
-
Nothing measures a minimum.
|
|
123
|
+
## The size band
|
|
156
124
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
125
|
+
`rich` is **2,000–3,500 tokens** (ADR-217); only the ceiling is gated, by
|
|
126
|
+
`lint_token_budget_discipline.ts`. Why no floor, and the approved candidate
|
|
127
|
+
list: `guideline:agent-infra/size-and-scope` § Rich-class size band.
|
|
160
128
|
|
|
161
129
|
## Governed by
|
|
162
130
|
|
|
163
|
-
- `tokens.rich_skills` setting in `.agent-settings.yml` (consumer override)
|
|
164
131
|
- `lint_token_budget_discipline.ts` (cap + justification + ceiling CI check)
|
|
165
132
|
- the telegraph-speak rule, where enabled (amended to except rich-tagged skills)
|
|
166
133
|
|
|
167
134
|
## See also
|
|
168
135
|
|
|
169
136
|
- `token_budget_class` key in `src/scripts/schemas/skill.schema.json`
|
|
170
|
-
- `tokens.rich_skills` in `src/config/agent-settings.template.yml`
|
|
171
137
|
- the telegraph-speak rule, where enabled — the frugality canon this rule amends
|
|
@@ -45,7 +45,6 @@ collision_ok:
|
|
|
45
45
|
"*.tsx": "one component file, two obligations: inventory before the write, review after it"
|
|
46
46
|
"*.jsx": "one component file, two obligations: inventory before the write, review after it"
|
|
47
47
|
"*.blade.php": "one template file, two obligations: inventory before the write, review after it"
|
|
48
|
-
# obligation: line 39
|
|
49
48
|
obligation_frequency: "per-edit"
|
|
50
49
|
---
|
|
51
50
|
|
|
@@ -155,7 +154,7 @@ Warn-only, capped at two per session, default-OFF, and bound only in the three
|
|
|
155
154
|
(**clarified 2026-08-17**: "where a slot exists" read as a host property, and it
|
|
156
155
|
is a manifest one; three further hosts alias a native pre-tool event without a
|
|
157
156
|
binding, and only claude honours a deny at all — the four states are tabulated
|
|
158
|
-
in
|
|
157
|
+
in `docs/contracts/hook-architecture-v1.md` § Which hosts carry pre_tool_use).
|
|
159
158
|
None of that changes the verdict here: a reminder that can be ignored is not a
|
|
160
159
|
gate, so `enforced_by:` stays `none`. Run `agent-config hooks:status` for the
|
|
161
160
|
host you are on rather than trusting this sentence.
|
|
@@ -20,7 +20,6 @@ workspaces: [engineering]
|
|
|
20
20
|
packs: [engineering-base]
|
|
21
21
|
enforced_by:
|
|
22
22
|
- "instruction-only: no deterministic gate inspects fetched content for injected instructions; injection_scan_hook is warn-only and default-OFF"
|
|
23
|
-
# obligation: line 38
|
|
24
23
|
obligation_frequency: "per-event"
|
|
25
24
|
evidence:
|
|
26
25
|
source_type: external-standard
|
|
@@ -19,7 +19,6 @@ load_context:
|
|
|
19
19
|
self_contained: true
|
|
20
20
|
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
21
21
|
packs: [meta]
|
|
22
|
-
# obligation: line 38
|
|
23
22
|
obligation_frequency: "per-turn"
|
|
24
23
|
---
|
|
25
24
|
|
|
@@ -56,9 +56,16 @@ export function gateBudgetLedgerPath(workspaceRoot: string): string {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/** The two caps decided by option (a). Both are USD. */
|
|
59
|
+
/**
|
|
60
|
+
* The two standing caps, each independently settable.
|
|
61
|
+
*
|
|
62
|
+
* Both figures are **US dollars**. Either may be `null`, meaning that cap was
|
|
63
|
+
* not set and therefore bounds nothing; `readGateBudgetCaps` returns `null`
|
|
64
|
+
* for the whole object only when NEITHER was set.
|
|
65
|
+
*/
|
|
59
66
|
export interface GateBudgetCaps {
|
|
60
|
-
maxCostPerRunUsd: number;
|
|
61
|
-
maxCostPerRolling7dUsd: number;
|
|
67
|
+
maxCostPerRunUsd: number | null;
|
|
68
|
+
maxCostPerRolling7dUsd: number | null;
|
|
62
69
|
}
|
|
63
70
|
|
|
64
71
|
/**
|
|
@@ -105,18 +112,26 @@ function _dig(settings: unknown, keys: readonly string[]): unknown {
|
|
|
105
112
|
/**
|
|
106
113
|
* Read the caps out of an already-merged settings dict.
|
|
107
114
|
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* template default would
|
|
112
|
-
*
|
|
115
|
+
* Each cap is returned on its own. Returns `null` only when NEITHER is set,
|
|
116
|
+
* which means no ceiling on money was configured — not that the run is
|
|
117
|
+
* unauthorised. Still deliberately NOT a fallback to the template numbers:
|
|
118
|
+
* inventing a cap from a template default would bound a run by a figure
|
|
119
|
+
* nobody chose.
|
|
120
|
+
*
|
|
121
|
+
* Until 2026-10-06 this returned `null` unless BOTH caps were numeric, with
|
|
122
|
+
* two consequences. A person who set one cap and left the other alone was
|
|
123
|
+
* bounded by NEITHER — the stricter-looking rule produced the laxer result.
|
|
124
|
+
* And absent caps were read by the caller as a refusal, so the gate would not
|
|
125
|
+
* run at all without them. ADR-279 supersedes that second reading: absence of
|
|
126
|
+
* a bound is not a bound, and `--confirm` remains the authorisation the caps
|
|
127
|
+
* only ever sized.
|
|
113
128
|
*/
|
|
114
129
|
export function readGateBudgetCaps(settings: unknown): GateBudgetCaps | null {
|
|
115
130
|
const perRun = _num(_dig(settings, ['roadmap', 'gate_budget', 'max_cost_per_run_usd']));
|
|
116
131
|
const rolling = _num(
|
|
117
132
|
_dig(settings, ['roadmap', 'gate_budget', 'max_cost_per_rolling_7d_usd']),
|
|
118
133
|
);
|
|
119
|
-
if (perRun === null
|
|
134
|
+
if (perRun === null && rolling === null) {
|
|
120
135
|
return null;
|
|
121
136
|
}
|
|
122
137
|
return { maxCostPerRunUsd: perRun, maxCostPerRolling7dUsd: rolling };
|
|
@@ -216,13 +231,15 @@ export function rollingSpendUsd(records: readonly GateBudgetReceipt[], now: Date
|
|
|
216
231
|
}
|
|
217
232
|
|
|
218
233
|
export type GateBudgetRefusal =
|
|
219
|
-
|
|
234
|
+
// 'no_caps' was removed on 2026-10-06 with ADR-279: the absence of a cap
|
|
235
|
+
// is no longer a refusal, so no path can produce it and leaving it in the
|
|
236
|
+
// union would advertise a verdict nothing returns.
|
|
220
237
|
| 'no_estimate'
|
|
221
238
|
| 'over_per_run'
|
|
222
239
|
| 'over_rolling_7d';
|
|
223
240
|
|
|
224
241
|
export type GateBudgetVerdict =
|
|
225
|
-
| { ok: true; estimateUsd: number; rollingUsd: number }
|
|
242
|
+
| { ok: true; estimateUsd: number | null; rollingUsd: number }
|
|
226
243
|
| { ok: false; reason: GateBudgetRefusal; detail: string };
|
|
227
244
|
|
|
228
245
|
/**
|
|
@@ -230,6 +247,12 @@ export type GateBudgetVerdict =
|
|
|
230
247
|
*
|
|
231
248
|
* Every refusal path renders rather than runs — the blocker's own prescription
|
|
232
249
|
* for a missing ledger, generalised to every way the budget can say no.
|
|
250
|
+
*
|
|
251
|
+
* What is NOT a refusal, per ADR-279: the absence of a cap. With no cap
|
|
252
|
+
* configured there is no ceiling on money to compare anything against, so the
|
|
253
|
+
* verdict is `ok` and the run proceeds on the authorisation `--confirm`
|
|
254
|
+
* already carries. A cap that WAS set still bounds exactly as its contract
|
|
255
|
+
* describes, and each bounds alone.
|
|
233
256
|
*/
|
|
234
257
|
export function evaluateGateBudget(opts: {
|
|
235
258
|
caps: GateBudgetCaps | null;
|
|
@@ -238,16 +261,17 @@ export function evaluateGateBudget(opts: {
|
|
|
238
261
|
now: Date;
|
|
239
262
|
}): GateBudgetVerdict {
|
|
240
263
|
const { caps, records, estimateUsd, now } = opts;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
'`roadmap.gate_budget.max_cost_per_rolling_7d_usd`)',
|
|
249
|
-
};
|
|
264
|
+
const perRunCap = caps === null ? null : caps.maxCostPerRunUsd;
|
|
265
|
+
const rollingCap = caps === null ? null : caps.maxCostPerRolling7dUsd;
|
|
266
|
+
// No ceiling on money was set anywhere, so nothing here can say no.
|
|
267
|
+
// `rollingUsd` is still computed and reported — recording spend never
|
|
268
|
+
// depended on bounding it.
|
|
269
|
+
if (perRunCap === null && rollingCap === null) {
|
|
270
|
+
return { ok: true, estimateUsd, rollingUsd: rollingSpendUsd(records, now) };
|
|
250
271
|
}
|
|
272
|
+
// A missing estimate refuses only because a cap exists that nothing can be
|
|
273
|
+
// compared against. With no cap there is no comparison to fail, which is
|
|
274
|
+
// why this sits BELOW the no-cap branch rather than above it.
|
|
251
275
|
if (estimateUsd === null) {
|
|
252
276
|
return {
|
|
253
277
|
ok: false,
|
|
@@ -257,17 +281,17 @@ export function evaluateGateBudget(opts: {
|
|
|
257
281
|
'can be compared against it',
|
|
258
282
|
};
|
|
259
283
|
}
|
|
260
|
-
if (estimateUsd >
|
|
284
|
+
if (perRunCap !== null && estimateUsd > perRunCap) {
|
|
261
285
|
return {
|
|
262
286
|
ok: false,
|
|
263
287
|
reason: 'over_per_run',
|
|
264
288
|
detail:
|
|
265
289
|
`the estimate ($${estimateUsd.toFixed(2)}) exceeds the per-run cap ` +
|
|
266
|
-
`($${
|
|
290
|
+
`($${perRunCap.toFixed(2)})`,
|
|
267
291
|
};
|
|
268
292
|
}
|
|
269
293
|
const spent = rollingSpendUsd(records, now);
|
|
270
|
-
if (spent + estimateUsd >
|
|
294
|
+
if (rollingCap !== null && spent + estimateUsd > rollingCap) {
|
|
271
295
|
return {
|
|
272
296
|
ok: false,
|
|
273
297
|
reason: 'over_rolling_7d',
|
|
@@ -275,7 +299,7 @@ export function evaluateGateBudget(opts: {
|
|
|
275
299
|
`$${spent.toFixed(2)} is already receipted in the last ` +
|
|
276
300
|
`${String(ROLLING_WINDOW_DAYS)} days and this run would add ` +
|
|
277
301
|
`$${estimateUsd.toFixed(2)}, over the rolling cap ` +
|
|
278
|
-
`($${
|
|
302
|
+
`($${rollingCap.toFixed(2)})`,
|
|
279
303
|
};
|
|
280
304
|
}
|
|
281
305
|
return { ok: true, estimateUsd, rollingUsd: spent };
|
|
@@ -297,7 +297,12 @@ function execute(
|
|
|
297
297
|
// generalised to every way the budget can say no. The `--confirm`
|
|
298
298
|
// requirement below is untouched: the caps bound the size of an authorised
|
|
299
299
|
// spend, they never supply the authorisation.
|
|
300
|
-
|
|
300
|
+
// `estimateUsd` is null only on the one path that reaches here without a
|
|
301
|
+
// USD figure: a class-1 entry that states no estimate AND an install with
|
|
302
|
+
// no cap set, so there was no cap for the missing estimate to fail
|
|
303
|
+
// against. A receipt needs a number, and inventing 0 would understate the
|
|
304
|
+
// ledger, so that path runs and reports that nothing was receipted.
|
|
305
|
+
let budgeted: { estimateUsd: number | null } | null = null;
|
|
301
306
|
if (cls === '1') {
|
|
302
307
|
const verdict = evaluateGateBudget({
|
|
303
308
|
caps: readGateBudgetCaps(load_agent_settings({ cwd: repoRoot })),
|
|
@@ -388,7 +393,7 @@ function execute(
|
|
|
388
393
|
code: 1,
|
|
389
394
|
};
|
|
390
395
|
}
|
|
391
|
-
if (budgeted !== null) {
|
|
396
|
+
if (budgeted !== null && budgeted.estimateUsd !== null) {
|
|
392
397
|
// Written BEFORE the file rewrite: an unreceipted spend is invisible to
|
|
393
398
|
// the rolling cap, and the cap failing open is the one way this
|
|
394
399
|
// mechanism could become a blank cheque. `actual_usd` is null because
|
|
@@ -421,8 +426,11 @@ function execute(
|
|
|
421
426
|
`and the status flipped to resolved ${when}.\n` +
|
|
422
427
|
(budgeted === null
|
|
423
428
|
? ''
|
|
424
|
-
:
|
|
425
|
-
`
|
|
429
|
+
: budgeted.estimateUsd === null
|
|
430
|
+
? `No receipt appended to ${LEDGER_REL}: the entry states no USD ` +
|
|
431
|
+
'estimate and no cap is configured, so there is no figure to record.\n'
|
|
432
|
+
: `Receipt appended to ${LEDGER_REL} ` +
|
|
433
|
+
`($${budgeted.estimateUsd.toFixed(2)} estimated).\n`) +
|
|
426
434
|
// The dashboard is derived from the file this just rewrote, so it
|
|
427
435
|
// is now stale. Saying so is the same follow-up `renderResumed`
|
|
428
436
|
// already prints for its own file-move suggestion.
|
|
@@ -11,3 +11,5 @@ Skip link & landmarks,skip link landmark main nav banner region,landmarks + skip
|
|
|
11
11
|
Drag and drop / reorder,drag drop reorder sortable kanban move,keyboard-equivalent commands,Every drag operation has a keyboard path (move-up/move-down buttons or grab mode with arrows + announcements); aria-live announces position changes,"WCAG 2.1.1, 2.5.7",Pointer-only reordering,https://www.w3.org/WAI/ARIA/apg/patterns/listbox/
|
|
12
12
|
Loading / busy state,loading spinner skeleton busy progress,aria-busy + progressbar/status,Region marked aria-busy during load OR role=progressbar with valuenow; announce completion via status region; skeletons are aria-hidden,WCAG 4.1.3,Spinner gif with no text alternative; focus lost on content swap,https://www.w3.org/WAI/ARIA/apg/patterns/meter/
|
|
13
13
|
Icon-only button,icon button close edit delete aria-label svg,accessible name on control,aria-label (or visually-hidden text) on the button; svg aria-hidden=true focusable=false; hit area ≥44px,"WCAG 4.1.2, 2.5.8",title attribute as the only name; emoji as icon,https://www.w3.org/WAI/ARIA/apg/patterns/button/
|
|
14
|
+
Meaningful standalone graphic,svg graphic chart diagram illustration logo standalone meaningful accessible name title desc,role=img + referenced title/desc,"role=img on the svg; a direct child title (plus optional desc) referenced by aria-labelledby using ids namespaced per instance; never aria-label together with title; delivered through img, the host alt is the accessible name and the inline title is unreachable","WCAG 1.1.1, 4.1.2","Generic id=""title"" reused by two inline graphics, so both announce the first one's name; title present without role=img; aria-label and title on the same element",https://www.w3.org/WAI/tutorials/images/complex/
|
|
15
|
+
Decorative graphic,decorative ornament flourish background presentational aria-hidden empty alt svg,aria-hidden + empty host alt,"aria-hidden=true and focusable=false on the svg; delivered through img, an empty alt (never a missing alt, which lets the file name become the name); the graphic carries no title",WCAG 1.1.1,Alt text describing an ornament; aria-hidden on a graphic carrying the only copy of its information,https://www.w3.org/WAI/tutorials/images/decorative/
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"owner": "package-maintainer",
|
|
28
28
|
"refresh_cadence": "quarterly",
|
|
29
29
|
"upstream": {
|
|
30
|
-
"repo": "derived: W3C ARIA Authoring Practices Guide + WCAG 2.2",
|
|
31
|
-
"sha": "WCAG 2.2 W3C-REC-2024-12-12; APG continuously-published, menu-button canonical slug",
|
|
32
|
-
"last_checked": "2026-10-
|
|
30
|
+
"repo": "derived: W3C ARIA Authoring Practices Guide + WCAG 2.2 + W3C WAI Images Tutorial",
|
|
31
|
+
"sha": "WCAG 2.2 W3C-REC-2024-12-12; APG continuously-published, menu-button canonical slug; the two graphic rows re-derived 2026-10-11 from the WAI Images Tutorial (complex, decorative) against WCAG 1.1.1 / 4.1.2, and both retrieval queries re-run after the append — 'meaningful standalone svg chart graphic accessible name' moved off the icon-button row, 'icon only close button' kept it",
|
|
32
|
+
"last_checked": "2026-10-11"
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -67,7 +67,10 @@ things follow, and the first is the one under pressure:
|
|
|
67
67
|
2. **Do not bounce to the user just because the council failed.** An
|
|
68
68
|
unreachable council does not upgrade a decidable question into a
|
|
69
69
|
user-required one. Decide it, label it own analysis, state the reason the
|
|
70
|
-
council was unavailable, and name what would change the answer.
|
|
70
|
+
council was unavailable, and name what would change the answer. Not for a
|
|
71
|
+
modification review (a change to the gated surface or one the learning
|
|
72
|
+
lanes originate, ADR-281): there an unavailable council stops the run for
|
|
73
|
+
the user per `docs/contracts/ratification-artifact.md`.
|
|
71
74
|
3. **Escalate only if it is genuinely undecidable without them** — the two
|
|
72
75
|
options are close AND the cost of being wrong is high AND nothing in the tree
|
|
73
76
|
separates them. Then say the council was attempted and why it failed, so the
|
|
@@ -311,9 +314,9 @@ attributed to the host.
|
|
|
311
314
|
identity — that primes the reviewer and collapses diversity.
|
|
312
315
|
- Do NOT silently truncate a too-large bundle — surface the size and
|
|
313
316
|
ask for narrower scope.
|
|
314
|
-
- Do NOT
|
|
315
|
-
|
|
316
|
-
|
|
317
|
+
- Do NOT ask for permission because no cap is set. ADR-279: a spend bound
|
|
318
|
+
applies only where one was set, and the absence of one is not a reason
|
|
319
|
+
to ask. Show the estimate as information and run.
|
|
317
320
|
- Do NOT reuse SDK clients across invocations — re-load keys via
|
|
318
321
|
`load_*_key()` each call.
|
|
319
322
|
|
|
@@ -47,6 +47,10 @@ table)` and render a per-member table. Heuristic: `len(text) / 4` for
|
|
|
47
47
|
input, member's `max_tokens` ceiling for output (actual spend is
|
|
48
48
|
usually lower).
|
|
49
49
|
|
|
50
|
+
This block is **information shown before the run**, not a prompt. Per
|
|
51
|
+
ADR-279 the absence of a cap is not a reason to ask, so there are no
|
|
52
|
+
numbered options here and nothing waits for an answer.
|
|
53
|
+
|
|
50
54
|
> External council call — billable
|
|
51
55
|
>
|
|
52
56
|
> Mode: roadmap · Target: `agents/roadmaps/<name>.md` (~3 KB after redaction)
|
|
@@ -57,21 +61,27 @@ usually lower).
|
|
|
57
61
|
> | openai / gpt-4o | ~750 / 1024 | $0.0121 |
|
|
58
62
|
> | **total** | | **$0.0297** |
|
|
59
63
|
>
|
|
60
|
-
> Budget:
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
> Budget: no cap set — token and USD ceilings are `0`.
|
|
65
|
+
|
|
66
|
+
The `Budget:` line states whatever the user configured. With nothing
|
|
67
|
+
configured it says so plainly, as above; with a cap set it names the
|
|
68
|
+
figure and its unit (`50k in / 20k out tokens · USD ceiling: $0.50`).
|
|
69
|
+
A cap that exists is what `on_overrun` fires against, below.
|
|
64
70
|
|
|
65
|
-
### Stale price
|
|
71
|
+
### Stale price table — stated, not asked
|
|
66
72
|
|
|
67
|
-
If `pricing.is_stale(table)` returns true,
|
|
73
|
+
If `pricing.is_stale(table)` returns true, say so in the same block and
|
|
74
|
+
proceed. ADR-237 § 3 already requires that a cost which cannot be
|
|
75
|
+
determined exactly is estimated conservatively and asked nothing about,
|
|
76
|
+
and a stale table is exactly that case:
|
|
68
77
|
|
|
69
|
-
>
|
|
70
|
-
>
|
|
71
|
-
>
|
|
72
|
-
> 3. Cancel
|
|
78
|
+
> Note: price table last updated YYYY-MM-DD and may be stale, so the
|
|
79
|
+
> figures above are an estimate. Refresh with
|
|
80
|
+
> `./scripts-run src/scripts/update_prices`.
|
|
73
81
|
|
|
74
|
-
Do not silently auto-refresh — the user keeps control
|
|
82
|
+
Do not silently auto-refresh — the user keeps control of when prices
|
|
83
|
+
change. Stating the staleness is what keeps that control without
|
|
84
|
+
turning it into a question.
|
|
75
85
|
|
|
76
86
|
### Mid-flow overrun callback (`on_overrun`)
|
|
77
87
|
|
|
@@ -45,14 +45,20 @@ have not migrated yet).
|
|
|
45
45
|
authorization the user already gave. Render the estimate and fan out.
|
|
46
46
|
`on_overrun` still fires per member on breach (below) — that is where
|
|
47
47
|
the user regains the decision.
|
|
48
|
-
- **Billable members with no
|
|
49
|
-
`daily_limit_usd: 0
|
|
50
|
-
|
|
48
|
+
- **Billable members with no cap set** (`max_total_usd: 0` AND
|
|
49
|
+
`daily_limit_usd: 0`, which is the shipped default) → render the
|
|
50
|
+
estimate as information and fan out. **No ask.** Per ADR-279 a spend
|
|
51
|
+
bound applies only where one was set, and the absence of one is not
|
|
52
|
+
a reason to ask.
|
|
51
53
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
All three cases now behave the same way: the estimate is information,
|
|
55
|
+
never a prompt. What differs is only whether a cap exists for
|
|
56
|
+
`on_overrun` to fire against.
|
|
57
|
+
|
|
58
|
+
Consumers who want a per-run gate set a small
|
|
54
59
|
`cost_budget.max_total_usd`: every call then breaches and `on_overrun`
|
|
55
|
-
asks, per member.
|
|
60
|
+
asks, per member. That is a bound they chose, which is the only kind
|
|
61
|
+
this procedure recognises.
|
|
56
62
|
4. **Fan out.** Dispatch the bundle to each enabled council member via
|
|
57
63
|
`scripts/ai_council/orchestrator.ts`. Each member receives the
|
|
58
64
|
neutrality preamble from `prompts.ts` plus the artefact — nothing
|
|
@@ -109,7 +109,7 @@ Constraint: **attack the biggest unknown first** (not breadth-first). Repeat unt
|
|
|
109
109
|
| New evidence appears | Re-evaluate all conclusions |
|
|
110
110
|
| Stuck in one skill | Broaden — switch to `universal-project-analysis` |
|
|
111
111
|
| Clear pattern recognized | Narrow — go deep with the right specialist |
|
|
112
|
-
| 3 failed attempts |
|
|
112
|
+
| 3 failed attempts | Change approach — `autonomous-execution`'s mandatory strategy shift, never a stop |
|
|
113
113
|
|
|
114
114
|
## Learning from past analyses
|
|
115
115
|
|
|
@@ -53,7 +53,7 @@ Pattern matching:
|
|
|
53
53
|
- `fix/DEV-1234/description` → extract `DEV-1234`
|
|
54
54
|
- `fix/PROJ-567-some-bug` → extract `PROJ-567`
|
|
55
55
|
- `hotfix/DEV-999` → extract `DEV-999`
|
|
56
|
-
-
|
|
56
|
+
- Read it with `agent-config git:convention ticket` — [`commit-subject`](../git-workflow/references/commit-subject.md) § Reading the ticket
|
|
57
57
|
|
|
58
58
|
If found, auto-fetch the ticket and confirm with the user.
|
|
59
59
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: inherit
|
|
3
3
|
name: canvas-design
|
|
4
|
-
description: "
|
|
4
|
+
description: "Static visual art — posters, marketing visuals, brand assets, PDF/PNG pieces — on 'design a poster' or 'mach uns ein Visual'."
|
|
5
5
|
domain: product
|
|
6
6
|
workspaces:
|
|
7
7
|
- small-business
|
|
@@ -73,7 +73,9 @@ Document it in `philosophy.md` under `## Subtle reference`.
|
|
|
73
73
|
|
|
74
74
|
Produce `agents/design-assets/{slug}/{slug}.{pdf|png}`:
|
|
75
75
|
|
|
76
|
-
1. Pick the execution tool (Pillow, matplotlib, SVG, or framework-native)
|
|
76
|
+
1. Pick the execution tool (Pillow, matplotlib, SVG, or framework-native). When
|
|
77
|
+
it is SVG, author it under [`svg-authoring`](../svg-authoring/SKILL.md) —
|
|
78
|
+
the canvas is still an asset and gets the same static check and witness
|
|
77
79
|
2. **Font selection** — pick a font that earns the philosophy. Inspect a working dir (e.g. `agents/design-assets/{slug}/fonts/` — create if missing) and place the chosen file there before render. System defaults (Arial, Helvetica, DejaVu, the matplotlib default sans) are the AI-template tell; reach for them only as deliberate fallback, never as the unexamined default
|
|
78
80
|
3. Limited palette — 2–5 colors, intentional and cohesive
|
|
79
81
|
4. Geometric or organic forms per philosophy
|