@event4u/agent-config 14.23.0 → 15.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +198 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/agent-handoff.md +8 -7
- package/dist/agent-src/commands/agents/init.md +1 -1
- package/dist/agent-src/commands/agents/user/accept.md +4 -4
- package/dist/agent-src/commands/agents/user/delete.md +2 -2
- package/dist/agent-src/commands/agents/user/init.md +3 -3
- package/dist/agent-src/commands/agents/user/review.md +3 -3
- package/dist/agent-src/commands/agents/user/show.md +3 -3
- package/dist/agent-src/commands/agents/user/update.md +2 -2
- package/dist/agent-src/commands/agents/user.md +6 -6
- package/dist/agent-src/commands/analytics/prune.md +1 -1
- package/dist/agent-src/commands/analytics/show.md +2 -2
- package/dist/agent-src/commands/analyze/decision.md +2 -2
- package/dist/agent-src/commands/analyze/inbox.md +5 -5
- package/dist/agent-src/commands/analyze/incident.md +3 -3
- package/dist/agent-src/commands/analyze/near-miss.md +3 -3
- package/dist/agent-src/commands/analyze/postmortem.md +4 -4
- package/dist/agent-src/commands/analyze/premortem.md +2 -2
- package/dist/agent-src/commands/analyze.md +2 -2
- package/dist/agent-src/commands/bug/fix.md +1 -1
- package/dist/agent-src/commands/bug/investigate.md +2 -2
- package/dist/agent-src/commands/cost/profile.md +3 -3
- package/dist/agent-src/commands/design.md +1 -1
- package/dist/agent-src/commands/feature/explore.md +1 -1
- package/dist/agent-src/commands/feature/plan.md +2 -2
- package/dist/agent-src/commands/feature/roadmap.md +2 -2
- package/dist/agent-src/commands/ghostwriter/fetch.md +4 -4
- package/dist/agent-src/commands/ghostwriter/list.md +1 -1
- package/dist/agent-src/commands/ghostwriter/show.md +1 -1
- package/dist/agent-src/commands/ghostwriter/write.md +9 -9
- package/dist/agent-src/commands/humanize.md +6 -6
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/judge/solo.md +1 -1
- package/dist/agent-src/commands/judge.md +1 -1
- package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -1
- package/dist/agent-src/commands/knowledge/ingest.md +2 -2
- package/dist/agent-src/commands/knowledge/list.md +1 -1
- package/dist/agent-src/commands/memory/add.md +3 -3
- package/dist/agent-src/commands/memory/load.md +4 -4
- package/dist/agent-src/commands/memory/mine-session.md +1 -1
- package/dist/agent-src/commands/memory/promote.md +4 -4
- package/dist/agent-src/commands/memory/propose.md +2 -2
- package/dist/agent-src/commands/mode.md +5 -5
- package/dist/agent-src/commands/post-as/ghostwriter.md +3 -3
- package/dist/agent-src/commands/post-as/me.md +7 -7
- package/dist/agent-src/commands/pr/create.md +1 -1
- package/dist/agent-src/commands/pr/merge.md +1 -1
- package/dist/agent-src/commands/profile/activate.md +1 -1
- package/dist/agent-src/commands/profile/show.md +1 -1
- package/dist/agent-src/commands/research/deep.md +2 -2
- package/dist/agent-src/commands/research/report.md +2 -2
- package/dist/agent-src/commands/review/changes.md +1 -1
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +2 -2
- package/dist/agent-src/commands/roadmap/next.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +2 -2
- package/dist/agent-src/commands/security-audit-config.md +3 -3
- package/dist/agent-src/commands/skill/preview.md +1 -1
- package/dist/agent-src/commands/skills/discover.md +1 -1
- package/dist/agent-src/commands/sync/agent-settings.md +2 -2
- package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
- package/dist/agent-src/commands/tests/create.md +1 -1
- package/dist/agent-src/commands/tests/e2e-heal.md +1 -1
- package/dist/agent-src/commands/tests/e2e-plan.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +6 -6
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -2
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +88 -1
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/contract-decision-sheet.md +3 -3
- package/dist/agent-src/contexts/execution/mandated-lines.md +1 -1
- package/dist/agent-src/contexts/execution/non-interactive-contract.md +1 -1
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -1
- package/dist/agent-src/contexts/execution/plan-confidence-gate.md +5 -5
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-routing.md +2 -2
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +1 -1
- package/dist/agent-src/contexts/execution/user-memory-channels.md +3 -3
- package/dist/agent-src/contexts/execution/verification-mechanics.md +1 -1
- package/dist/agent-src/contexts/judges/persona-voice-rubric.md +2 -2
- package/dist/agent-src/guidelines/abstraction-thresholds.md +88 -0
- package/dist/agent-src/guidelines/agent-infra/5w2h-analysis.md +260 -0
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +99 -0
- package/dist/agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +325 -0
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +222 -0
- package/dist/agent-src/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/asking-and-brevity-examples.md +198 -0
- package/dist/agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
- package/dist/agent-src/guidelines/agent-infra/carve-out-predicates.md +17 -0
- package/dist/agent-src/guidelines/agent-infra/comparison-matrix.md +179 -0
- package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +165 -0
- package/dist/agent-src/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/critical-thinking.md +156 -0
- package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
- package/dist/agent-src/guidelines/agent-infra/direct-answers-demos.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/domain-adoption-gates.md +112 -0
- package/dist/agent-src/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
- package/dist/agent-src/guidelines/agent-infra/domain-pack-architecture.md +56 -0
- package/dist/agent-src/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/emphasis-budget.md +45 -0
- package/dist/agent-src/guidelines/agent-infra/engineering-memory-data-format.md +210 -0
- package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/dist/agent-src/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/failure-signatures.md +70 -0
- package/dist/agent-src/guidelines/agent-infra/false-green.md +233 -0
- package/dist/agent-src/guidelines/agent-infra/first-principles.md +192 -0
- package/dist/agent-src/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
- package/dist/agent-src/guidelines/agent-infra/gate-authoring.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/dist/agent-src/guidelines/agent-infra/installed-tools-manifest.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/inversion-thinking.md +388 -0
- package/dist/agent-src/guidelines/agent-infra/ios-simulator-guide.md +378 -0
- package/dist/agent-src/guidelines/agent-infra/language-and-tone-examples.md +141 -0
- package/dist/agent-src/guidelines/agent-infra/layered-settings.md +317 -0
- package/dist/agent-src/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/mcp-request-signing.md +197 -0
- package/dist/agent-src/guidelines/agent-infra/memory-access.md +149 -0
- package/dist/agent-src/guidelines/agent-infra/mental-models.md +314 -0
- package/dist/agent-src/guidelines/agent-infra/minimal-safe-diff-mechanics.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/missing-tool-handling.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +101 -0
- package/dist/agent-src/guidelines/agent-infra/naming.md +69 -0
- package/dist/agent-src/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
- package/dist/agent-src/guidelines/agent-infra/output-patterns.md +117 -0
- package/dist/agent-src/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
- package/dist/agent-src/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/dist/agent-src/guidelines/agent-infra/review-routing-data-format.md +143 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +274 -0
- package/dist/agent-src/guidelines/agent-infra/role-contracts.md +209 -0
- package/dist/agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/rule-type-governance.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/scqa-framework.md +526 -0
- package/dist/agent-src/guidelines/agent-infra/security-lint-containment.md +121 -0
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/simplicity-and-goal-demos.md +211 -0
- package/dist/agent-src/guidelines/agent-infra/six-hats.md +353 -0
- package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +229 -0
- package/dist/agent-src/guidelines/agent-infra/skill-quality-checklist.md +157 -0
- package/dist/agent-src/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
- package/dist/agent-src/guidelines/agent-infra/systems-thinking.md +220 -0
- package/dist/agent-src/guidelines/agent-infra/tool-description-as-policy.md +35 -0
- package/dist/agent-src/guidelines/agent-infra/tool-integration.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/traceability-field-mechanics.md +50 -0
- package/dist/agent-src/guidelines/agent-infra/untrusted-input-spotlighting.md +166 -0
- package/dist/agent-src/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
- package/dist/agent-src/guidelines/augment-portability-patterns.md +70 -0
- package/dist/agent-src/guidelines/code-clarity.md +350 -0
- package/dist/agent-src/guidelines/component-oriented-and-oop-development.md +189 -0
- package/dist/agent-src/guidelines/cross-role-handoff.md +127 -0
- package/dist/agent-src/guidelines/design-antipatterns-triggers.json +18 -0
- package/dist/agent-src/guidelines/design-antipatterns.md +327 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +38 -0
- package/dist/agent-src/guidelines/design-canon.md +63 -0
- package/dist/agent-src/guidelines/design-fidelity-mechanics.md +293 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +78 -0
- package/dist/agent-src/guidelines/design-handover-extraction.md +117 -0
- package/dist/agent-src/guidelines/design-modes.md +143 -0
- package/dist/agent-src/guidelines/design-reconciliation.md +172 -0
- package/dist/agent-src/guidelines/docs/readme-size-and-splitting.md +209 -0
- package/dist/agent-src/guidelines/e2e/playwright.md +363 -0
- package/dist/agent-src/guidelines/gtm-handoff.md +114 -0
- package/dist/agent-src/guidelines/monorepo-antipatterns.md +141 -0
- package/dist/agent-src/guidelines/php/api-design.md +115 -0
- package/dist/agent-src/guidelines/php/artisan-commands.md +81 -0
- package/dist/agent-src/guidelines/php/blade-ui.md +78 -0
- package/dist/agent-src/guidelines/php/controllers.md +90 -0
- package/dist/agent-src/guidelines/php/database.md +194 -0
- package/dist/agent-src/guidelines/php/eloquent.md +208 -0
- package/dist/agent-src/guidelines/php/flux.md +80 -0
- package/dist/agent-src/guidelines/php/general.md +207 -0
- package/dist/agent-src/guidelines/php/git.md +164 -0
- package/dist/agent-src/guidelines/php/jobs.md +111 -0
- package/dist/agent-src/guidelines/php/livewire.md +71 -0
- package/dist/agent-src/guidelines/php/logging.md +79 -0
- package/dist/agent-src/guidelines/php/naming.md +89 -0
- package/dist/agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
- package/dist/agent-src/guidelines/php/patterns/dtos.md +199 -0
- package/dist/agent-src/guidelines/php/patterns/events.md +67 -0
- package/dist/agent-src/guidelines/php/patterns/factory.md +53 -0
- package/dist/agent-src/guidelines/php/patterns/pipelines.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/policies.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/repositories.md +122 -0
- package/dist/agent-src/guidelines/php/patterns/service-layer.md +64 -0
- package/dist/agent-src/guidelines/php/patterns/strategy.md +247 -0
- package/dist/agent-src/guidelines/php/patterns.md +28 -0
- package/dist/agent-src/guidelines/php/performance.md +92 -0
- package/dist/agent-src/guidelines/php/php-coding-patterns.md +80 -0
- package/dist/agent-src/guidelines/php/resources.md +100 -0
- package/dist/agent-src/guidelines/php/security.md +110 -0
- package/dist/agent-src/guidelines/php/sql.md +97 -0
- package/dist/agent-src/guidelines/php/validations.md +119 -0
- package/dist/agent-src/guidelines/php/websocket.md +100 -0
- package/dist/agent-src/guidelines/prompt-templates.md +189 -0
- package/dist/agent-src/guidelines/redundancy-taxonomy.md +208 -0
- package/dist/agent-src/guidelines/wing4-handoff.md +127 -0
- package/dist/agent-src/personas/README.md +1 -1
- package/dist/agent-src/personas/_template-specialist/persona.md +1 -1
- package/dist/agent-src/personas/product-owner.md +1 -1
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/architecture.md +2 -2
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/ask-when-uncertain.md +2 -2
- package/dist/agent-src/rules/brand-source-of-truth.md +9 -7
- package/dist/agent-src/rules/code-comment-discipline.md +2 -2
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/content-quoting-floor.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +5 -5
- package/dist/agent-src/rules/cross-source-consistency.md +1 -1
- package/dist/agent-src/rules/design-fidelity.md +36 -46
- package/dist/agent-src/rules/direct-answers.md +2 -2
- package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
- package/dist/agent-src/rules/evaluator-independence.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/icon-consistency.md +5 -1
- package/dist/agent-src/rules/improve-before-implement.md +1 -1
- package/dist/agent-src/rules/language-and-tone.md +3 -3
- package/dist/agent-src/rules/minimal-safe-diff.md +1 -1
- package/dist/agent-src/rules/notes-first-reasoning.md +2 -2
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/role-mode-adherence.md +2 -2
- package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
- package/dist/agent-src/rules/size-enforcement.md +1 -1
- package/dist/agent-src/rules/source-confidentiality.md +2 -2
- package/dist/agent-src/rules/think-before-action.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +7 -5
- package/dist/agent-src/rules/ui-audit-gate.md +3 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -3
- package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
- package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
- package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
- package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
- package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
- package/dist/agent-src/skills/code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
- package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
- package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
- package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
- package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
- package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
- package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
- package/dist/agent-src/skills/design-review/SKILL.md +4 -4
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
- package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
- package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
- package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
- package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
- package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
- package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
- package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
- package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
- package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
- package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
- package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
- package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +3 -3
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
- package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
- package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
- package/dist/agent-src/skills/org-design/SKILL.md +1 -1
- package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
- package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
- package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
- package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
- package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
- package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +11 -5
- package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
- package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
- package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
- package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
- package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
- package/dist/agent-src/templates/agent-settings.md +6 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
- package/dist/agent-src/templates/copilot-instructions.md +1 -1
- package/dist/agent-src/templates/roadmaps.md +1 -1
- package/dist/agent-src/templates/scripts/README.md +2 -2
- package/dist/agent-src/user-types/_template/user-type.md +1 -1
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
- package/dist/cli-delegate/{chunk-IAI3XL43.js → chunk-3FKR64R5.js} +22 -6
- package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
- package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
- package/dist/cli-delegate/{chunk-KCNTUSPI.js → chunk-AK6HODNQ.js} +4 -4
- package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
- package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-HZ52BRGG.js} +24 -18
- package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
- package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_explain.js +2 -2
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +4 -4
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +1 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_route_audit.js +3 -3
- package/dist/cli-delegate/cmd_route_explain.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +1 -1
- package/dist/cli-delegate/cmd_settings_get.js +15 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +41 -11
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +22 -75
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +5 -7
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +4 -6
- package/dist/hooks/dispatch.js +8607 -8930
- package/dist/install/install.mjs +35 -8
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1433 -1342
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +73 -0
- package/dist/scripts/_lib/agent_src.js +20 -0
- package/dist/scripts/_lib/guidelines_lane.js +158 -0
- package/dist/scripts/condense.js +2 -5
- package/dist/server/io/yamlIO.js +125 -17
- package/dist/server/schemas/settings.js +18 -4
- package/dist/shared/settingsSurface.js +6 -1
- package/docs/contracts/settings-classes.md +18 -9
- package/docs/guidelines/abstraction-thresholds.md +35 -0
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
- package/docs/guidelines/agent-infra/false-green.md +2 -2
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
- package/docs/guidelines/design-fidelity-mechanics.md +4 -0
- package/docs/guidelines/design-fidelity-routing.md +78 -0
- package/docs/guidelines/design-reconciliation.md +172 -0
- package/docs/guidelines/gtm-handoff.md +2 -2
- package/docs/guidelines/wing4-handoff.md +2 -2
- package/package.json +7 -3
- package/src/config/agent-settings.template.yml +55 -8
- package/src/config/ci-local-parity.yml +34 -0
- package/src/config/continuity-surface.json +4 -32
- package/src/config/gate-coverage.yml +31 -8
- package/src/config/gate-reachability-exemptions.json +1 -0
- package/src/config/gate-violation-baselines.json +3 -3
- package/src/config/hook-token-budget.json +1 -1
- package/src/config/host-injection-effect.json +2 -2
- package/src/config/pack-size-budget.json +55 -4
- package/src/config/platform-anchor.json +47 -0
- package/src/config/preamble-payload-budget.json +2 -3
- package/src/config/publish-surface.json +4 -2
- package/src/config/ratification-policy.json +7 -0
- package/src/config/rule-stub-ceilings.json +16 -9
- package/src/scripts/_cli/cmd_settings_get.ts +22 -7
- package/src/scripts/_lib/agent_settings.ts +85 -0
- package/src/scripts/_lib/agent_src.ts +21 -0
- package/src/scripts/_lib/artifact_maturity.ts +242 -0
- package/src/scripts/_lib/conformance_report.ts +403 -0
- package/src/scripts/_lib/continuity_writer.ts +72 -13
- package/src/scripts/_lib/design_system_import.ts +20 -0
- package/src/scripts/_lib/design_tolerance.ts +281 -0
- package/src/scripts/_lib/guidelines_lane.ts +164 -0
- package/src/scripts/_lib/obligation_frequency.ts +2 -3
- package/src/scripts/_lib/platform_anchor.ts +1053 -0
- package/src/scripts/_lib/ratification_artifact.ts +278 -0
- package/src/scripts/_lib/security_lint.ts +23 -2
- package/src/scripts/_lib/self_repair.ts +21 -0
- package/src/scripts/_lib/session_index_trust.ts +42 -1
- package/src/scripts/_lib/standing_bound_ratchet.ts +103 -37
- package/src/scripts/_lib/tolerance_shadow.ts +177 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
- package/src/scripts/autonomy_friction_traffic.ts +379 -0
- package/src/scripts/check_kernel_edit_ratified.ts +462 -0
- package/src/scripts/check_loss_class_declared.ts +793 -46
- package/src/scripts/check_platform_anchor.ts +390 -0
- package/src/scripts/check_preamble_payload_budget.ts +292 -4
- package/src/scripts/check_projected_rule_routes.ts +395 -0
- package/src/scripts/code_graph/cli.ts +6 -0
- package/src/scripts/condense.ts +2 -6
- package/src/scripts/generate_host_cost_table.ts +354 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +35 -27
- package/src/scripts/hooks/category_a.ts +1 -1
- package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
- package/src/scripts/hooks/session_eol_hook.ts +68 -154
- package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
- package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
- package/src/scripts/hot_context_hook.ts +41 -401
- package/src/scripts/lint_evidence_artifacts.ts +1 -0
- package/src/scripts/lint_knowledge_scale.ts +0 -26
- package/src/scripts/memory_lookup.ts +9 -9
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/session_memory_index.ts +5 -0
- package/src/scripts/sync_agent_settings.ts +270 -10
- package/src/server/io/yamlIO.ts +127 -17
- package/src/server/schemas/settings.ts +25 -5
- package/src/shared/settingsSurface.ts +13 -2
- package/src/templates/compact-instructions.md +8 -3
- package/dist/agent-src/commands/chat-history/import.md +0 -170
- package/dist/agent-src/commands/chat-history.md +0 -63
|
@@ -293,6 +293,17 @@ export const MERGEABLE_KEYS: readonly string[] = [
|
|
|
293
293
|
'knowledge.global_sharing.auto_promote_threshold',
|
|
294
294
|
'knowledge.global_sharing.freshness.hypothesis_after_days',
|
|
295
295
|
'knowledge.global_sharing.freshness.stale_after_days',
|
|
296
|
+
// `design.fidelity_mode` is a per-DEVELOPER working preference, not a
|
|
297
|
+
// per-project one: whether an agent may deviate from a handed-over design
|
|
298
|
+
// is a property of how that person works, and a designer who sets it once
|
|
299
|
+
// expects it in every checkout. `design-fidelity.md` already tells the
|
|
300
|
+
// reader to resolve it through the cascade — "that file is the project
|
|
301
|
+
// layer of a cascade that starts user-global" — and the cascade then
|
|
302
|
+
// filtered it out here, silently, so the rule's own instruction could not
|
|
303
|
+
// be followed. Class C, so a user still sets it by hand or through the
|
|
304
|
+
// GUI; whitelisting decides only whether the value SURVIVES the merge
|
|
305
|
+
// (ADR-271, road-to-design-intent-conformance 2.3).
|
|
306
|
+
'design.fidelity_mode',
|
|
296
307
|
];
|
|
297
308
|
|
|
298
309
|
/** The shipped template, relative to the package root. */
|
|
@@ -823,6 +834,80 @@ function _resolve_cascade_paths(
|
|
|
823
834
|
];
|
|
824
835
|
}
|
|
825
836
|
|
|
837
|
+
/** Per-layer read outcome. `absent` and `malformed` are NOT the same fact. */
|
|
838
|
+
export type SettingsLayerState = 'absent' | 'valid' | 'malformed';
|
|
839
|
+
|
|
840
|
+
export interface SettingsLayerReport {
|
|
841
|
+
path: string;
|
|
842
|
+
state: SettingsLayerState;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
/**
|
|
846
|
+
* Probe one settings file WITHOUT merging it, distinguishing absent from broken.
|
|
847
|
+
*
|
|
848
|
+
* `_read_yaml` returns `null` for both, which is fine for merging — an absent
|
|
849
|
+
* layer and an unreadable one contribute nothing either way — and is wrong for
|
|
850
|
+
* anything that has to decide differently in the two cases. That conflation
|
|
851
|
+
* silently disabled a documented safety property; see
|
|
852
|
+
* {@link settings_layer_states}.
|
|
853
|
+
*/
|
|
854
|
+
function _probe_yaml(p: string): SettingsLayerState {
|
|
855
|
+
if (!_is_file(p)) return 'absent';
|
|
856
|
+
let YAML: typeof YamlModule;
|
|
857
|
+
try {
|
|
858
|
+
YAML = _require('yaml') as typeof YamlModule;
|
|
859
|
+
} catch {
|
|
860
|
+
// No parser: this layer cannot be validated, so it is not `valid`.
|
|
861
|
+
return 'malformed';
|
|
862
|
+
}
|
|
863
|
+
try {
|
|
864
|
+
YAML.parse(fs.readFileSync(p, 'utf-8'), { version: '1.1' });
|
|
865
|
+
return 'valid';
|
|
866
|
+
} catch (err) {
|
|
867
|
+
if (_is_yaml_error(err) || _is_os_error(err)) return 'malformed';
|
|
868
|
+
throw err;
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
/**
|
|
873
|
+
* Per-layer validity for the layers a caller can actually break.
|
|
874
|
+
*
|
|
875
|
+
* A repair, not a feature. `load_agent_settings` merges a broken layer as if it
|
|
876
|
+
* were absent, so a key's resolved value says nothing about whether the user's
|
|
877
|
+
* own file parsed — measured 2026-09-10, a project `.agent-settings.yml` of
|
|
878
|
+
* `:\n - [\n` returns the template's values and throws nothing. Every reader
|
|
879
|
+
* shaped `try { …read… } catch { } return <default>` therefore has an
|
|
880
|
+
* UNREACHABLE catch for that case, and its "fails closed" claim is carried by
|
|
881
|
+
* its default value rather than by its own code. Worked example and the ruling
|
|
882
|
+
* that required this: `_lib/continuity_writer.ts` § `auto_record_enabled`.
|
|
883
|
+
*
|
|
884
|
+
* Scope is the user-global files and the in-project cascade — the layers a
|
|
885
|
+
* human edits. The shipped template is excluded deliberately: a malformed
|
|
886
|
+
* template is a package defect that already resolves every key to absent, so
|
|
887
|
+
* reporting it would blame a tree in which the user did nothing wrong.
|
|
888
|
+
*
|
|
889
|
+
* Reports, never decides. What a `malformed` layer MEANS is the key's polarity,
|
|
890
|
+
* which belongs to the caller.
|
|
891
|
+
*/
|
|
892
|
+
export function settings_layer_states(
|
|
893
|
+
options: {
|
|
894
|
+
project_path?: string | null;
|
|
895
|
+
user_global_path?: string | null;
|
|
896
|
+
cwd?: string | null;
|
|
897
|
+
} = {},
|
|
898
|
+
): SettingsLayerReport[] {
|
|
899
|
+
const project_path = options.project_path ?? null;
|
|
900
|
+
const cwd = options.cwd ?? null;
|
|
901
|
+
const user_global = options.user_global_path
|
|
902
|
+
? [options.user_global_path]
|
|
903
|
+
: user_global_settings_paths();
|
|
904
|
+
const out: SettingsLayerReport[] = [];
|
|
905
|
+
for (const p of [...user_global, ..._resolve_cascade_paths(cwd, project_path)]) {
|
|
906
|
+
out.push({ path: p, state: _probe_yaml(p) });
|
|
907
|
+
}
|
|
908
|
+
return out;
|
|
909
|
+
}
|
|
910
|
+
|
|
826
911
|
/**
|
|
827
912
|
* Return the merged settings dict.
|
|
828
913
|
*
|
|
@@ -44,6 +44,8 @@ import * as fs from 'node:fs';
|
|
|
44
44
|
import * as path from 'node:path';
|
|
45
45
|
import { fileURLToPath } from 'node:url';
|
|
46
46
|
|
|
47
|
+
import { iter_guidelines, resolve_guideline } from './guidelines_lane.js';
|
|
48
|
+
|
|
47
49
|
// --- Path-root configuration (mutable to mirror Python module attributes) ----
|
|
48
50
|
//
|
|
49
51
|
// the retired Python implementation derives ROOT from `Path(__file__).resolve().parents[3]`
|
|
@@ -567,6 +569,18 @@ export function* iter_all_sources(): Generator<[string, string]> {
|
|
|
567
569
|
seen.add(rel);
|
|
568
570
|
yield [p, rel];
|
|
569
571
|
}
|
|
572
|
+
// `docs/guidelines/` → logical `guidelines/…`. Appended here rather than
|
|
573
|
+
// added to `_root_specs` on purpose: `_root_specs` defines the artefact
|
|
574
|
+
// ESTATE, which the discovery manifest and every count/size ratchet walk,
|
|
575
|
+
// and a guideline is projected content rather than an estate artefact.
|
|
576
|
+
// Same shape and the same reason as the domains-commands lane above.
|
|
577
|
+
for (const [p, rel] of iter_guidelines(_roots.ROOT)) {
|
|
578
|
+
if (seen.has(rel)) {
|
|
579
|
+
continue;
|
|
580
|
+
}
|
|
581
|
+
seen.add(rel);
|
|
582
|
+
yield [p, rel];
|
|
583
|
+
}
|
|
570
584
|
}
|
|
571
585
|
|
|
572
586
|
/**
|
|
@@ -645,6 +659,13 @@ export function resolve_logical(logical_rel: string): string | null {
|
|
|
645
659
|
}
|
|
646
660
|
}
|
|
647
661
|
}
|
|
662
|
+
// `guidelines/<subpath>.md` is backed by `docs/guidelines/<subpath>.md`.
|
|
663
|
+
// Paired with the `iter_all_sources` lane above so the projector's
|
|
664
|
+
// staleness check and its stale-file sweep both resolve a guideline.
|
|
665
|
+
const guideline = resolve_guideline(_roots.ROOT, rel);
|
|
666
|
+
if (guideline !== null) {
|
|
667
|
+
return guideline;
|
|
668
|
+
}
|
|
648
669
|
return null;
|
|
649
670
|
}
|
|
650
671
|
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spec.maturity` — the artefact-maturity axis as a resolved field with
|
|
3
|
+
* provenance, not as a prose table two surfaces each keep a copy of.
|
|
4
|
+
*
|
|
5
|
+
* The axis itself is already decided. `design-fidelity.md` § Two axes states
|
|
6
|
+
* it: maturity is a property of the ARTEFACT, mandate is a property of the
|
|
7
|
+
* INSTRUCTION, and reproducing a wireframe's placeholder greys 1:1 honours the
|
|
8
|
+
* wrong half of the artefact. `design-fidelity-mechanics § Artefact maturity`
|
|
9
|
+
* carries the low-versus-finished table. What was missing is a value anything
|
|
10
|
+
* can read: the table was prose, so every consumer re-derived it by eye and two
|
|
11
|
+
* consumers could disagree without either being wrong about the text.
|
|
12
|
+
*
|
|
13
|
+
* **Two-valued on purpose, and not the same axis as `ReferenceMaturity`.**
|
|
14
|
+
* `ui_authority.ts` carries a five-valued `ReferenceMaturity`
|
|
15
|
+
* (`wireframe` | `prototype` | `finished-comp` | `runnable-artifact` |
|
|
16
|
+
* `production-incumbent`) answering *what kind of thing is this*. This answers
|
|
17
|
+
* the narrower question the rule actually branches on: *does its pixel detail
|
|
18
|
+
* carry decisions*. `mapReferenceMaturity` below is the one place the two are
|
|
19
|
+
* related, so a future edit to either enum has exactly one seam to update
|
|
20
|
+
* rather than a scattering of `=== 'wireframe'` comparisons.
|
|
21
|
+
*
|
|
22
|
+
* **The resolution ladder, and why `finished` is the default.** A user signal
|
|
23
|
+
* beats everything, then the artefact's own declaration, then inference from
|
|
24
|
+
* its content, then the default. The default is `finished` because the rule
|
|
25
|
+
* says so in as many words — *"When the artefact does not declare its maturity,
|
|
26
|
+
* it is treated as finished: the 1:1 floor is stricter, and guessing low
|
|
27
|
+
* fidelity would authorise the redesign this rule prevents."* Defaulting the
|
|
28
|
+
* other way would make silence a licence.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/** Does the artefact's pixel detail carry decisions, or placeholders? */
|
|
32
|
+
export type ArtifactMaturity = 'low' | 'finished';
|
|
33
|
+
|
|
34
|
+
/** Which rung of the ladder produced the verdict. */
|
|
35
|
+
export type MaturitySource = 'user' | 'declaration' | 'inference' | 'default';
|
|
36
|
+
|
|
37
|
+
export interface MaturityVerdict {
|
|
38
|
+
maturity: ArtifactMaturity;
|
|
39
|
+
source: MaturitySource;
|
|
40
|
+
/**
|
|
41
|
+
* The concrete thing that decided it, quotable back to the user. Never a
|
|
42
|
+
* restatement of the verdict — "the artefact declares itself a wireframe"
|
|
43
|
+
* is a signal, "it is low fidelity" is not.
|
|
44
|
+
*/
|
|
45
|
+
signal: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Everything the resolver may look at. Every field is optional by design. */
|
|
49
|
+
export interface MaturityInput {
|
|
50
|
+
/** What the user said this run. Beats every other rung. */
|
|
51
|
+
userSignal?: ArtifactMaturity | null;
|
|
52
|
+
/** A `spec.maturity` the artefact carries about itself. */
|
|
53
|
+
declared?: string | null;
|
|
54
|
+
/** The artefact's filename, if it has one. */
|
|
55
|
+
filename?: string | null;
|
|
56
|
+
/** The artefact's own body — markup, CSS, or a token file's text. */
|
|
57
|
+
body?: string | null;
|
|
58
|
+
/** A five-valued `ReferenceMaturity` already resolved elsewhere. */
|
|
59
|
+
referenceMaturity?: string | null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The one seam between the five-valued `ReferenceMaturity` and this axis.
|
|
64
|
+
* Returns `null` for a value that does not decide the question.
|
|
65
|
+
*/
|
|
66
|
+
export function mapReferenceMaturity(value: string | null | undefined): ArtifactMaturity | null {
|
|
67
|
+
switch (value) {
|
|
68
|
+
case 'wireframe':
|
|
69
|
+
return 'low';
|
|
70
|
+
case 'finished-comp':
|
|
71
|
+
case 'runnable-artifact':
|
|
72
|
+
case 'production-incumbent':
|
|
73
|
+
return 'finished';
|
|
74
|
+
// `prototype` is deliberately unmapped: the word covers both a greybox
|
|
75
|
+
// click-through and a pixel-complete interactive build, so mapping it
|
|
76
|
+
// either way would decide by vocabulary rather than by evidence. It
|
|
77
|
+
// falls through to inference, which reads the artefact itself.
|
|
78
|
+
default:
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Markers an artefact uses to declare itself low-fidelity. */
|
|
84
|
+
const LOW_DECLARATIONS = new Set(['low', 'low-fidelity', 'lofi', 'lo-fi', 'wireframe', 'sketch']);
|
|
85
|
+
/** Markers an artefact uses to declare itself finished. */
|
|
86
|
+
const FINISHED_DECLARATIONS = new Set([
|
|
87
|
+
'finished',
|
|
88
|
+
'final',
|
|
89
|
+
'high',
|
|
90
|
+
'high-fidelity',
|
|
91
|
+
'hifi',
|
|
92
|
+
'hi-fi',
|
|
93
|
+
'comp',
|
|
94
|
+
'production',
|
|
95
|
+
]);
|
|
96
|
+
|
|
97
|
+
/** Content tells that the pixels are placeholders rather than decisions. */
|
|
98
|
+
const LOW_CONTENT_TELLS: ReadonlyArray<readonly [RegExp, string]> = [
|
|
99
|
+
[/lorem\s+ipsum/i, 'placeholder copy (lorem ipsum) in the body'],
|
|
100
|
+
[/\bwireframe\b/i, 'the body calls itself a wireframe'],
|
|
101
|
+
[/\bgreybox\b|\bgraybox\b/i, 'the body describes greybox placeholders'],
|
|
102
|
+
// NOT a bare `\bplaceholder\b`. That fired on
|
|
103
|
+
// `<input placeholder="you@example.com">` in the committed finished
|
|
104
|
+
// fixture — an ordinary HTML attribute, present in most real forms, and
|
|
105
|
+
// the single broadest false positive available on this axis. The tell is
|
|
106
|
+
// the artefact CALLING ITS OWN CONTENT placeholder, so the noun has to
|
|
107
|
+
// follow.
|
|
108
|
+
[
|
|
109
|
+
/placeholder\s+(?:copy|content|text|image|images|art|asset|assets|data)\b/i,
|
|
110
|
+
'the body marks its own content as placeholder',
|
|
111
|
+
],
|
|
112
|
+
];
|
|
113
|
+
|
|
114
|
+
function normalizeDeclaration(value: string): string {
|
|
115
|
+
return value.trim().toLowerCase();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* True when every colour the body states is greyscale — the canonical wireframe
|
|
120
|
+
* tell, and the one the rule names by hand ("reproducing a wireframe's
|
|
121
|
+
* placeholder grays"). Requires at least two colours so a one-off `#fff`
|
|
122
|
+
* in an otherwise colourless token file does not decide anything.
|
|
123
|
+
*/
|
|
124
|
+
export function isGreyscaleOnly(body: string): boolean {
|
|
125
|
+
const hexes = body.match(/#[0-9a-fA-F]{3,8}\b/g) ?? [];
|
|
126
|
+
if (hexes.length < 2) return false;
|
|
127
|
+
return hexes.every((hex) => {
|
|
128
|
+
const raw = hex.slice(1);
|
|
129
|
+
const six =
|
|
130
|
+
raw.length === 3
|
|
131
|
+
? raw
|
|
132
|
+
.split('')
|
|
133
|
+
.map((c) => c + c)
|
|
134
|
+
.join('')
|
|
135
|
+
: raw.slice(0, 6);
|
|
136
|
+
if (six.length < 6) return false;
|
|
137
|
+
const r = parseInt(six.slice(0, 2), 16);
|
|
138
|
+
const g = parseInt(six.slice(2, 4), 16);
|
|
139
|
+
const b = parseInt(six.slice(4, 6), 16);
|
|
140
|
+
return r === g && g === b;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Resolve the artefact's maturity, naming the signal that decided it.
|
|
146
|
+
*
|
|
147
|
+
* Never throws: an unreadable or absent artefact resolves `finished` by
|
|
148
|
+
* default, which is the conservative direction — see the header.
|
|
149
|
+
*/
|
|
150
|
+
export function resolveArtifactMaturity(input: MaturityInput = {}): MaturityVerdict {
|
|
151
|
+
/** Set when rung 2 saw a declaration it could not read; reported, not obeyed. */
|
|
152
|
+
let unreadableDeclaration: string | null = null;
|
|
153
|
+
const withNote = (v: MaturityVerdict): MaturityVerdict =>
|
|
154
|
+
unreadableDeclaration === null
|
|
155
|
+
? v
|
|
156
|
+
: {
|
|
157
|
+
...v,
|
|
158
|
+
signal: `${v.signal} (the artifact also declares \`maturity: ${unreadableDeclaration}\`, which this resolver does not recognise)`,
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
// 1. The user. `design-fidelity` § Two axes: a user signal beats any
|
|
162
|
+
// inference, because the human can see what the heuristic cannot.
|
|
163
|
+
if (input.userSignal === 'low' || input.userSignal === 'finished') {
|
|
164
|
+
return {
|
|
165
|
+
maturity: input.userSignal,
|
|
166
|
+
source: 'user',
|
|
167
|
+
signal: `the user stated the artefact is ${input.userSignal} fidelity`,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// 2. The artefact's own declaration — the case the rule's Iron Law names.
|
|
172
|
+
if (typeof input.declared === 'string' && input.declared.trim() !== '') {
|
|
173
|
+
const declared = normalizeDeclaration(input.declared);
|
|
174
|
+
if (LOW_DECLARATIONS.has(declared)) {
|
|
175
|
+
return {
|
|
176
|
+
maturity: 'low',
|
|
177
|
+
source: 'declaration',
|
|
178
|
+
signal: `the artefact declares \`maturity: ${declared}\``,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
if (FINISHED_DECLARATIONS.has(declared)) {
|
|
182
|
+
return {
|
|
183
|
+
maturity: 'finished',
|
|
184
|
+
source: 'declaration',
|
|
185
|
+
signal: `the artefact declares \`maturity: ${declared}\``,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// An unrecognised declaration is NOT silently treated as absent, and it
|
|
189
|
+
// does NOT short-circuit the ladder either. The first version returned
|
|
190
|
+
// here, so an artifact declaring `maturity: draft` while carrying a
|
|
191
|
+
// wireframe filename, a lorem-ipsum body AND a greyscale-only palette
|
|
192
|
+
// resolved `finished` — an unparseable string outranking three signals
|
|
193
|
+
// the resolver does recognise, which inverts the ladder this module's
|
|
194
|
+
// header describes. Blind-review finding. It is remembered instead:
|
|
195
|
+
// reported on whatever verdict the remaining rungs produce, so the
|
|
196
|
+
// reader sees both the unreadable declaration and the evidence.
|
|
197
|
+
unreadableDeclaration = declared;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// 3. A ReferenceMaturity already resolved upstream, where it decides.
|
|
201
|
+
const mapped = mapReferenceMaturity(input.referenceMaturity);
|
|
202
|
+
if (mapped !== null) {
|
|
203
|
+
return withNote({
|
|
204
|
+
maturity: mapped,
|
|
205
|
+
source: 'inference',
|
|
206
|
+
signal: `reference_maturity is \`${String(input.referenceMaturity)}\``,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// 4. The filename. Cheap, and the one signal present even when the body is
|
|
211
|
+
// not readable.
|
|
212
|
+
if (typeof input.filename === 'string' && /wireframe|wf-|lofi|lo-fi/i.test(input.filename)) {
|
|
213
|
+
return withNote({
|
|
214
|
+
maturity: 'low',
|
|
215
|
+
source: 'inference',
|
|
216
|
+
signal: `the filename \`${input.filename}\` names a wireframe`,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// 5. The body.
|
|
221
|
+
if (typeof input.body === 'string' && input.body !== '') {
|
|
222
|
+
for (const [pattern, why] of LOW_CONTENT_TELLS) {
|
|
223
|
+
if (pattern.test(input.body)) {
|
|
224
|
+
return withNote({ maturity: 'low', source: 'inference', signal: why });
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (isGreyscaleOnly(input.body)) {
|
|
228
|
+
return withNote({
|
|
229
|
+
maturity: 'low',
|
|
230
|
+
source: 'inference',
|
|
231
|
+
signal: 'every color in the body is greyscale',
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// 6. Default — finished, deliberately. Silence is not a licence to redesign.
|
|
237
|
+
return withNote({
|
|
238
|
+
maturity: 'finished',
|
|
239
|
+
source: 'default',
|
|
240
|
+
signal: 'the artifact declares no maturity and shows no low-fidelity tell',
|
|
241
|
+
});
|
|
242
|
+
}
|