@event4u/agent-config 14.23.0 → 16.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 +144 -152
- 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 +4 -3
- 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 +51 -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/rules/user-interaction.md +31 -30
- 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/error-handling-patterns/SKILL.md +9 -0
- 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-H32DGUJH.js} +15 -84
- package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
- package/dist/cli-delegate/chunk-NUHLI2RX.js +80 -0
- package/dist/cli-delegate/{chunk-TYSY33MD.js → chunk-QJWAUMJW.js} +12 -2
- package/dist/cli-delegate/{chunk-2KKXJW25.js → chunk-S3VFXMTM.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 +834 -275
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_explain.js +5 -3
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +6 -6
- 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 +3 -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 +3 -3
- 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 +54 -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 +25 -78
- 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 +9684 -9304
- package/dist/install/install.mjs +36 -8
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +2147 -1470
- 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/_lib/installed_lock.js +1 -1
- package/dist/scripts/condense.js +2 -5
- package/dist/server/io/yamlIO.js +175 -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 +11 -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 +12 -8
- package/src/config/preamble-payload-exceptions.json +28 -0
- 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/_dispatch.bash +3 -1
- 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/base_ref_payload.ts +315 -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/dropped_decision.ts +142 -0
- package/src/scripts/_lib/guidelines_lane.ts +164 -0
- package/src/scripts/_lib/installed_lock.ts +1 -1
- package/src/scripts/_lib/measured_payload_ceiling.ts +424 -0
- package/src/scripts/_lib/obligation_frequency.ts +2 -3
- package/src/scripts/_lib/payload_catalogue_completeness.ts +211 -0
- package/src/scripts/_lib/platform_anchor.ts +1053 -0
- package/src/scripts/_lib/ratification_artifact.ts +278 -0
- package/src/scripts/_lib/release_findings_ingest.ts +324 -0
- package/src/scripts/_lib/release_tag_dispatch.ts +63 -0
- package/src/scripts/_lib/review_baseline.ts +254 -0
- package/src/scripts/_lib/review_skipped_record.ts +61 -1
- 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 +267 -88
- package/src/scripts/_lib/tolerance_shadow.ts +177 -0
- package/src/scripts/_lib/turn_end_refusals.ts +51 -4
- 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_beta_review_markers.ts +35 -4
- package/src/scripts/check_finding_dispositions.ts +167 -16
- package/src/scripts/check_held_object_arrivals.ts +381 -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 +672 -107
- package/src/scripts/check_projected_rule_routes.ts +395 -0
- package/src/scripts/check_release_published.ts +1 -1
- package/src/scripts/check_reply_consistency.ts +86 -17
- 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 +74 -30
- package/src/scripts/hooks/block_kernel_rule_writes.ts +12 -2
- package/src/scripts/hooks/category_a.ts +1 -1
- package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/end_review_nudge_hook.ts +101 -21
- package/src/scripts/hooks/review_baseline_hook.ts +130 -0
- 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/turn_end_gate_hook.ts +232 -14
- package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
- package/src/scripts/hooks_doctor.ts +4 -1
- package/src/scripts/hot_context_hook.ts +41 -401
- package/src/scripts/install.ts +1 -1
- package/src/scripts/interruption_report.ts +8 -2
- package/src/scripts/janitor.ts +8 -1
- package/src/scripts/lint_evidence_artifacts.ts +1 -0
- package/src/scripts/lint_knowledge_scale.ts +0 -26
- package/src/scripts/measure_turn_end_gate.ts +302 -5
- package/src/scripts/memory_lookup.ts +9 -9
- package/src/scripts/release.ts +52 -64
- package/src/scripts/release_drill.ts +193 -14
- package/src/scripts/release_env.ts +1 -1
- package/src/scripts/release_publication.ts +1 -1
- package/src/scripts/report_held_object_arrivals.ts +456 -0
- 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 +394 -12
- package/src/server/io/yamlIO.ts +175 -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
|
@@ -23,6 +23,31 @@
|
|
|
23
23
|
* classifier), and this script does no per-turn matching between them.
|
|
24
24
|
* R2 finding 7 removed the per-session min/max arithmetic that used to
|
|
25
25
|
* report disjoint findings of equal count as full agreement.
|
|
26
|
+
* · DETECTORS C AND F, added 2026-09-11 for ADR-277's named open limit: that
|
|
27
|
+
* record ships detector F with its false-positive rate UNMEASURED and says
|
|
28
|
+
* so. The rate below is the fire rate over a real corpus, which is the
|
|
29
|
+
* upper bound on it — every fire is a turn the shipped gate would have
|
|
30
|
+
* refused, and how many of those were wrong still needs a human read of the
|
|
31
|
+
* turns. An upper bound is not a precision figure and is not reported as
|
|
32
|
+
* one.
|
|
33
|
+
* · The C-SILENT OVERLAP, which is the one number ADR-277 rests an argument
|
|
34
|
+
* on. The record claims detector C does not already cover F's case, and the
|
|
35
|
+
* evidence for it was a single unit test asserting C stays silent on F's
|
|
36
|
+
* input. This counts the same thing over the corpus: of the turns F fires
|
|
37
|
+
* on, how many did C leave alone. A low count would refute the record's own
|
|
38
|
+
* "two different questions deserve two detectors" and is worth finding.
|
|
39
|
+
* · DETECTOR E, which until 2026-09-11 was scored by NO instrument at all.
|
|
40
|
+
* That gap is not cosmetic: it is how a commit came to land under the title
|
|
41
|
+
* "detector E measured" over an evidence file measuring F, with nothing in
|
|
42
|
+
* the tree able to contradict it. E is also the only detector here that
|
|
43
|
+
* reads the turn's assistant TEXTS rather than its last reply, so it needs
|
|
44
|
+
* an accumulation the other four do not — built at the same two boundaries
|
|
45
|
+
* `readTranscriptTail` uses, for the same population-parity reason C and
|
|
46
|
+
* F's tool calls are.
|
|
47
|
+
* · It does NOT score detector D. D reads `ci_last` out of per-session
|
|
48
|
+
* runtime state, which no transcript carries, so a transcript-derived D
|
|
49
|
+
* figure would be a measurement of an absent file rather than of the
|
|
50
|
+
* detector.
|
|
26
51
|
* · It does NOT compute recall against the 20 promissory occurrences the
|
|
27
52
|
* round-5 audit reported. Those came from subagent transcript READING;
|
|
28
53
|
* `conformance_scan.ts` states in its own header that promissory
|
|
@@ -39,15 +64,24 @@
|
|
|
39
64
|
* correction and would itself need re-measuring.
|
|
40
65
|
*
|
|
41
66
|
* Usage:
|
|
42
|
-
* ./scripts-run src/scripts/measure_turn_end_gate --store <dir> [--limit N]
|
|
67
|
+
* ./scripts-run src/scripts/measure_turn_end_gate --store <dir> [--limit N] [--show-fires]
|
|
43
68
|
*/
|
|
44
69
|
import * as fs from 'node:fs';
|
|
45
70
|
import * as path from 'node:path';
|
|
46
71
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
47
72
|
|
|
48
73
|
import { classify, isSyntheticPrompt } from './language_mirror_hook.js';
|
|
49
|
-
import { assistantText, scanSession
|
|
50
|
-
import {
|
|
74
|
+
import { assistantText, scanSession } from './conformance_scan.js';
|
|
75
|
+
import { entryText, isSidechain } from './_lib/transcript_entry.js';
|
|
76
|
+
import {
|
|
77
|
+
detectDroppedDecision,
|
|
78
|
+
detectLanguage,
|
|
79
|
+
detectPromissory,
|
|
80
|
+
detectUntestedChange,
|
|
81
|
+
detectUnverifiedEdit,
|
|
82
|
+
extractToolCalls,
|
|
83
|
+
type ToolCall,
|
|
84
|
+
} from './hooks/turn_end_gate_hook.js';
|
|
51
85
|
|
|
52
86
|
interface Counts {
|
|
53
87
|
/**
|
|
@@ -64,11 +98,98 @@ interface Counts {
|
|
|
64
98
|
assistant_entries: number;
|
|
65
99
|
promissory_fires: number;
|
|
66
100
|
language_fires: number;
|
|
101
|
+
/** Detector C — an edit with nothing run after it that could have checked it. */
|
|
102
|
+
unverified_fires: number;
|
|
103
|
+
/** Detector F — production source changed, no test touched, done claimed. */
|
|
104
|
+
untested_fires: number;
|
|
105
|
+
/** Detector E — an ask made earlier in the turn, absent from the closing reply. */
|
|
106
|
+
dropped_fires: number;
|
|
107
|
+
/**
|
|
108
|
+
* Turns carrying two or more assistant texts — E's precondition, and the
|
|
109
|
+
* same thing `turns_with_edit` is for C and F. Without it a low E rate is
|
|
110
|
+
* unreadable: "rarely applicable" and "rarely right" are different verdicts
|
|
111
|
+
* and only this denominator separates them.
|
|
112
|
+
*/
|
|
113
|
+
turns_multi_text: number;
|
|
114
|
+
/**
|
|
115
|
+
* E fires inside a turn that also made a tool call. E was designed from a
|
|
116
|
+
* stop-hook nudge producing a second assistant execution mid-turn, which is
|
|
117
|
+
* a tool-bearing shape; a fire OUTSIDE it is the one to read first, because
|
|
118
|
+
* it is the one the detector was not designed from.
|
|
119
|
+
*/
|
|
120
|
+
dropped_with_tool: number;
|
|
121
|
+
/**
|
|
122
|
+
* Turns where F fired and C did NOT. ADR-277 argues C cannot stand in for
|
|
123
|
+
* F; this is that argument's denominator-free form. F fires minus this is
|
|
124
|
+
* the set both would have caught.
|
|
125
|
+
*/
|
|
126
|
+
untested_c_silent: number;
|
|
127
|
+
/** Turns that edited at least one file — F's and C's shared precondition. */
|
|
128
|
+
turns_with_edit: number;
|
|
129
|
+
/**
|
|
130
|
+
* F's conditions, counted cumulatively, so a zero fire count is readable.
|
|
131
|
+
* A detector that never fires is either narrow-and-right or inert, and the
|
|
132
|
+
* difference is entirely in WHICH condition did the silencing — reporting
|
|
133
|
+
* only the fire count leaves that unanswerable and invites the wrong one of
|
|
134
|
+
* the two conclusions.
|
|
135
|
+
*/
|
|
136
|
+
e1_production_source: number;
|
|
137
|
+
/** …and touched no test file anywhere in the turn. */
|
|
138
|
+
e2_no_test_touched: number;
|
|
139
|
+
/**
|
|
140
|
+
* Where F fired — session prefix and turn ordinal only, plus the detector's
|
|
141
|
+
* own evidence span. ADR-277's open limit is a false-POSITIVE rate, and no
|
|
142
|
+
* instrument can decide that: only a human reading the turn can say whether
|
|
143
|
+
* a refusal would have been right. This is the pointer that makes the read
|
|
144
|
+
* possible instead of leaving "measure it" as an instruction nobody can act
|
|
145
|
+
* on. Printed only under `--show-fires`, because the spans carry the
|
|
146
|
+
* consumer's own file paths.
|
|
147
|
+
*/
|
|
148
|
+
untested_sites: { session: string; turn: number; evidence: string }[];
|
|
149
|
+
/**
|
|
150
|
+
* Where E fired, same shape and same reason as `untested_sites`: a fire
|
|
151
|
+
* count is an upper bound on the false-positive rate and nothing more, so
|
|
152
|
+
* the pointer that makes a human read possible ships with it.
|
|
153
|
+
*/
|
|
154
|
+
dropped_sites: { session: string; turn: number; evidence: string }[];
|
|
67
155
|
/** The independent scanner's own per-session language total, for context. */
|
|
68
156
|
scanner_language: number;
|
|
69
157
|
sessions: number;
|
|
70
158
|
}
|
|
71
159
|
|
|
160
|
+
/**
|
|
161
|
+
* The gate's own edit-tool set, duplicated here for ONE purpose: the
|
|
162
|
+
* `turns_with_edit` context line. It is deliberately not re-exported from the
|
|
163
|
+
* hook — nothing in the measurement depends on it, so a drift between the two
|
|
164
|
+
* changes a printed denominator and never a scored rate.
|
|
165
|
+
*/
|
|
166
|
+
const _EDIT_TOOL_NAMES = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* The path shapes detector F reads, restated here for the CUMULATIVE-CONDITION
|
|
170
|
+
* breakdown only — never for a scored rate, which always goes through
|
|
171
|
+
* `detectUntestedChange` itself.
|
|
172
|
+
*
|
|
173
|
+
* Restating them is the lesser of two bad options. The alternative is exporting
|
|
174
|
+
* two more internals from the hook purely so a diagnostic line can be printed,
|
|
175
|
+
* which widens the gate's public surface for a number that is context. If these
|
|
176
|
+
* drift from the hook's own, the breakdown stops adding to F's fire count and
|
|
177
|
+
* the discrepancy is visible in the same output.
|
|
178
|
+
*/
|
|
179
|
+
const _SOURCE_EXT_RE =
|
|
180
|
+
/\.(?:ts|tsx|js|jsx|mjs|cjs|vue|svelte|php|py|rb|go|rs|java|kt|swift|cs|scala|ex|exs)$/i;
|
|
181
|
+
const _TEST_DIR_RE = /(?:^|\/)(?:tests?|specs?|__tests__|__specs__|e2e|cypress|playwright|features)\//i;
|
|
182
|
+
const _TEST_FILE_RE =
|
|
183
|
+
/(?:\.(?:test|spec)\.[a-z]+$)|(?:_test\.[a-z]+$)|(?:(?:^|\/)test_[^/]+$)|(?:Test\.php$)|(?:Spec\.php$)|(?:\.feature$)/i;
|
|
184
|
+
|
|
185
|
+
function _looksTestPath(p: string): boolean {
|
|
186
|
+
return _TEST_DIR_RE.test(p) || _TEST_FILE_RE.test(p);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function _looksProductionSource(p: string): boolean {
|
|
190
|
+
return _SOURCE_EXT_RE.test(p) && !_looksTestPath(p);
|
|
191
|
+
}
|
|
192
|
+
|
|
72
193
|
function sessionFiles(store: string, limit: number): string[] {
|
|
73
194
|
let entries: string[];
|
|
74
195
|
try {
|
|
@@ -96,6 +217,17 @@ export function measure(store: string, limit: number): Counts {
|
|
|
96
217
|
assistant_entries: 0,
|
|
97
218
|
promissory_fires: 0,
|
|
98
219
|
language_fires: 0,
|
|
220
|
+
unverified_fires: 0,
|
|
221
|
+
untested_fires: 0,
|
|
222
|
+
dropped_fires: 0,
|
|
223
|
+
turns_multi_text: 0,
|
|
224
|
+
dropped_with_tool: 0,
|
|
225
|
+
untested_c_silent: 0,
|
|
226
|
+
turns_with_edit: 0,
|
|
227
|
+
e1_production_source: 0,
|
|
228
|
+
e2_no_test_touched: 0,
|
|
229
|
+
untested_sites: [],
|
|
230
|
+
dropped_sites: [],
|
|
99
231
|
scanner_language: 0,
|
|
100
232
|
sessions: 0,
|
|
101
233
|
};
|
|
@@ -132,12 +264,76 @@ export function measure(store: string, limit: number): Counts {
|
|
|
132
264
|
// measurement wearing the same label (R2 finding 1).
|
|
133
265
|
let pendingReply: string | null = null;
|
|
134
266
|
let pendingPin: 'de' | 'en' | 'und' = 'und';
|
|
267
|
+
// The turn's tool calls, rebuilt with the gate's OWN extractor and reset
|
|
268
|
+
// at every genuine user prompt — the same two rules `readTranscriptTail`
|
|
269
|
+
// applies. Detectors C and F read nothing else, so any divergence here
|
|
270
|
+
// would move the measurement off the shipped gate's population.
|
|
271
|
+
let pendingCalls: ToolCall[] = [];
|
|
272
|
+
// Detector E's whole input: the turn's assistant texts in order, reset
|
|
273
|
+
// on the same line the tool calls are. `readTranscriptTail` resets both
|
|
274
|
+
// there for one reason — a genuine user prompt ends the turn, so an ask
|
|
275
|
+
// it followed was answered rather than dropped — and splitting the two
|
|
276
|
+
// resets would measure a detector nobody ships.
|
|
277
|
+
//
|
|
278
|
+
// ONE KNOWN DIVERGENCE, stated rather than discovered later: the gate
|
|
279
|
+
// pushes `_messageText`'s result whenever a `text` block exists, so a
|
|
280
|
+
// whitespace-only reply becomes an element there and is dropped here by
|
|
281
|
+
// `assistantText`'s trim. It changes nothing while such a reply sits
|
|
282
|
+
// mid-turn — it carries no options block either way — but a
|
|
283
|
+
// whitespace-only CLOSING reply is E's `closing` in the gate and not
|
|
284
|
+
// here. Keeping one extractor for `pendingReply` and this array is the
|
|
285
|
+
// trade taken: the closing reply the two instruments score stays
|
|
286
|
+
// identical, which is the property the rest of this script rests on.
|
|
287
|
+
let pendingTexts: string[] = [];
|
|
288
|
+
// Per-SESSION, because that is the only ordinal a reader can use to find
|
|
289
|
+
// the turn again. `c.turns` is the corpus-wide running total, and
|
|
290
|
+
// labelling it "turn" in a per-session pointer sends the reader to the
|
|
291
|
+
// wrong turn of the right file — caught by reading the first fire this
|
|
292
|
+
// script reported and finding it at a different ordinal.
|
|
293
|
+
let sessionTurn = 0;
|
|
135
294
|
|
|
136
295
|
const scoreTurn = (): void => {
|
|
137
296
|
if (pendingReply === null) return;
|
|
138
297
|
c.turns += 1;
|
|
298
|
+
sessionTurn += 1;
|
|
139
299
|
if (detectPromissory(pendingReply) !== null) c.promissory_fires += 1;
|
|
140
300
|
if (detectLanguage(pendingReply, pendingPin) !== null) c.language_fires += 1;
|
|
301
|
+
const cFired = detectUnverifiedEdit(pendingCalls) !== null;
|
|
302
|
+
// Named for the detector it holds. It was `eFinding` until
|
|
303
|
+
// 2026-09-11, holding F's finding in a file that also names a
|
|
304
|
+
// detector E — the same mislabel that reached a commit title.
|
|
305
|
+
const fFinding = detectUntestedChange(pendingReply, pendingCalls);
|
|
306
|
+
if (cFired) c.unverified_fires += 1;
|
|
307
|
+
if (fFinding !== null) {
|
|
308
|
+
c.untested_fires += 1;
|
|
309
|
+
if (!cFired) c.untested_c_silent += 1;
|
|
310
|
+
c.untested_sites.push({
|
|
311
|
+
session: sessionId,
|
|
312
|
+
turn: sessionTurn,
|
|
313
|
+
evidence: fFinding.evidence,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
if (pendingTexts.length >= 2) c.turns_multi_text += 1;
|
|
317
|
+
const eFinding = detectDroppedDecision(pendingTexts);
|
|
318
|
+
if (eFinding !== null) {
|
|
319
|
+
c.dropped_fires += 1;
|
|
320
|
+
if (pendingCalls.length > 0) c.dropped_with_tool += 1;
|
|
321
|
+
c.dropped_sites.push({
|
|
322
|
+
session: sessionId,
|
|
323
|
+
turn: sessionTurn,
|
|
324
|
+
evidence: eFinding.evidence,
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
if (pendingCalls.some((call) => _EDIT_TOOL_NAMES.has(call.name))) {
|
|
328
|
+
c.turns_with_edit += 1;
|
|
329
|
+
}
|
|
330
|
+
const editedPaths = pendingCalls
|
|
331
|
+
.filter((call) => _EDIT_TOOL_NAMES.has(call.name) && call.path !== undefined)
|
|
332
|
+
.map((call) => call.path as string);
|
|
333
|
+
if (editedPaths.some(_looksProductionSource)) {
|
|
334
|
+
c.e1_production_source += 1;
|
|
335
|
+
if (!editedPaths.some(_looksTestPath)) c.e2_no_test_touched += 1;
|
|
336
|
+
}
|
|
141
337
|
pendingReply = null;
|
|
142
338
|
};
|
|
143
339
|
|
|
@@ -149,7 +345,7 @@ export function measure(store: string, limit: number): Counts {
|
|
|
149
345
|
continue;
|
|
150
346
|
}
|
|
151
347
|
|
|
152
|
-
const u =
|
|
348
|
+
const u = _userTurnText(entry);
|
|
153
349
|
if (u !== null) {
|
|
154
350
|
// `isSyntheticPrompt`, the SAME filter the gate uses for the
|
|
155
351
|
// ordinal — not `isInjectedBody`. R2 round 2, finding 10: the
|
|
@@ -159,17 +355,35 @@ export function measure(store: string, limit: number): Counts {
|
|
|
159
355
|
// correction, so the filter has to be the same one.
|
|
160
356
|
if (!isSyntheticPrompt(u)) {
|
|
161
357
|
scoreTurn(); // the previous turn ends here
|
|
358
|
+
pendingCalls = [];
|
|
359
|
+
pendingTexts = [];
|
|
162
360
|
const verdict = classify(u);
|
|
163
361
|
if (verdict.language !== 'und') pinned = verdict.language;
|
|
164
362
|
}
|
|
165
363
|
continue;
|
|
166
364
|
}
|
|
167
365
|
|
|
366
|
+
// Tool calls are collected BEFORE the text guard, exactly as the gate
|
|
367
|
+
// does it: an assistant entry carrying only a `tool_use` block has no
|
|
368
|
+
// text, so a `continue` above this line would drop precisely the
|
|
369
|
+
// entries detectors C and F exist to read.
|
|
370
|
+
if (entry['type'] === 'assistant' && !isSidechain(entry)) {
|
|
371
|
+
const msg = entry['message'];
|
|
372
|
+
if (typeof msg === 'object' && msg !== null && !Array.isArray(msg)) {
|
|
373
|
+
pendingCalls.push(
|
|
374
|
+
...extractToolCalls((msg as Record<string, unknown>)['content']),
|
|
375
|
+
);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
168
379
|
const a = assistantText(entry);
|
|
169
380
|
if (a === null || a.trim() === '') continue;
|
|
170
381
|
c.assistant_entries += 1;
|
|
171
|
-
// Overwrite: only the last one in the turn is the gate's input
|
|
382
|
+
// Overwrite: only the last one in the turn is the gate's input —
|
|
383
|
+
// for every detector except E, which is why the append below is not
|
|
384
|
+
// the same statement written twice.
|
|
172
385
|
pendingReply = a;
|
|
386
|
+
pendingTexts.push(a);
|
|
173
387
|
pendingPin = pinned;
|
|
174
388
|
}
|
|
175
389
|
scoreTurn(); // the transcript's final turn
|
|
@@ -178,6 +392,46 @@ export function measure(store: string, limit: number): Counts {
|
|
|
178
392
|
return c;
|
|
179
393
|
}
|
|
180
394
|
|
|
395
|
+
/**
|
|
396
|
+
* The text of a user-role entry, read the way `readTranscriptTail` reads it.
|
|
397
|
+
*
|
|
398
|
+
* Deliberately NOT `conformance_scan.userText`, and the difference is the whole
|
|
399
|
+
* point: that reader also returns null when the text CONTAINS
|
|
400
|
+
* `<system-reminder>` anywhere, while the gate nulls only on a missing text
|
|
401
|
+
* block and then filters with `isSyntheticPrompt`, which matches the marker at
|
|
402
|
+
* the START. An ordinary Claude Code prompt carries an appended reminder block,
|
|
403
|
+
* so the two disagree on the most common user entry there is — and an entry
|
|
404
|
+
* this instrument skips is one where the turn never resets, merging consecutive
|
|
405
|
+
* genuine turns into one. That made detector E fire on asks the user had
|
|
406
|
+
* answered and deflated the turn denominator at the same time, which is the
|
|
407
|
+
* exact class of divergence the header promises parity on (R2 round 3,
|
|
408
|
+
* finding 1).
|
|
409
|
+
*/
|
|
410
|
+
function _userTurnText(entry: Record<string, unknown>): string | null {
|
|
411
|
+
if (entry['type'] !== 'user' || isSidechain(entry)) return null;
|
|
412
|
+
const text = entryText(entry);
|
|
413
|
+
return text.trim() === '' ? null : text;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
export function renderFires(c: Counts): string {
|
|
417
|
+
if (c.untested_sites.length === 0) return ' detector F fired on no turn in this corpus.';
|
|
418
|
+
return c.untested_sites
|
|
419
|
+
.map((site) => ` ${site.session} turn ${String(site.turn)} — ${site.evidence}`)
|
|
420
|
+
.join('\n');
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* E's fires, as a separate function rather than a widened `renderFires`: the
|
|
425
|
+
* two lists answer different questions and a caller printing one must not
|
|
426
|
+
* silently start printing the other.
|
|
427
|
+
*/
|
|
428
|
+
export function renderDroppedFires(c: Counts): string {
|
|
429
|
+
if (c.dropped_sites.length === 0) return ' detector E fired on no turn in this corpus.';
|
|
430
|
+
return c.dropped_sites
|
|
431
|
+
.map((site) => ` ${site.session} turn ${String(site.turn)} — ${site.evidence}`)
|
|
432
|
+
.join('\n');
|
|
433
|
+
}
|
|
434
|
+
|
|
181
435
|
export function render(c: Counts): string {
|
|
182
436
|
const pct = (n: number): string => (c.turns === 0 ? '0.0' : ((100 * n) / c.turns).toFixed(1));
|
|
183
437
|
return [
|
|
@@ -185,6 +439,42 @@ export function render(c: Counts): string {
|
|
|
185
439
|
'',
|
|
186
440
|
` detector A (promissory) fires on ${c.promissory_fires} turns (${pct(c.promissory_fires)}%)`,
|
|
187
441
|
` detector B (language) fires on ${c.language_fires} turns (${pct(c.language_fires)}%)`,
|
|
442
|
+
` detector C (unverified) fires on ${c.unverified_fires} turns (${pct(c.unverified_fires)}%)`,
|
|
443
|
+
` detector E (dropped) fires on ${c.dropped_fires} turns (${pct(c.dropped_fires)}%)`,
|
|
444
|
+
` detector F (untested) fires on ${c.untested_fires} turns (${pct(c.untested_fires)}%)`,
|
|
445
|
+
'',
|
|
446
|
+
` Turns that edited a file at all: ${c.turns_with_edit} — C's and F's shared`,
|
|
447
|
+
' precondition, printed so a low F rate can be read as "rarely applicable"',
|
|
448
|
+
' rather than as "rarely right".',
|
|
449
|
+
'',
|
|
450
|
+
" F's three conditions, cumulative — where the silence comes from:",
|
|
451
|
+
` 1. edited production source ${c.e1_production_source} turns`,
|
|
452
|
+
` 2. …and touched no test file ${c.e2_no_test_touched} turns`,
|
|
453
|
+
` 3. …and claimed done (= F fires) ${c.untested_fires} turns`,
|
|
454
|
+
' A large drop at step 2 means the corpus writes its tests; a large drop at',
|
|
455
|
+
' step 3 means the turns that did not are also not claiming to be finished.',
|
|
456
|
+
' Only the first reading says the detector is narrow-and-right.',
|
|
457
|
+
'',
|
|
458
|
+
` Turns carrying two or more assistant texts: ${c.turns_multi_text} — E's precondition,`,
|
|
459
|
+
' and the same reading `turns_with_edit` supports for C and F: a turn with one',
|
|
460
|
+
' reply cannot drop a question an earlier reply asked.',
|
|
461
|
+
` Of E's ${c.dropped_fires} fires, ${c.dropped_with_tool} sit in a turn that also made a tool call.`,
|
|
462
|
+
' That is the shape E was designed from — a stop-hook nudge or a reviewer',
|
|
463
|
+
' return producing a second assistant execution inside one user turn. A fire',
|
|
464
|
+
' outside it is the one to read first, being the one nothing predicted.',
|
|
465
|
+
'',
|
|
466
|
+
` Of F's ${c.untested_fires} fires, detector C was SILENT on ${c.untested_c_silent}.`,
|
|
467
|
+
' That is the number ADR-277 rests its "two different questions deserve two',
|
|
468
|
+
' detectors" argument on, measured here over the corpus rather than over the',
|
|
469
|
+
' one unit test that asserted it. A count at or near zero refutes the record.',
|
|
470
|
+
'',
|
|
471
|
+
' These are FIRE RATES, never precision. Every fire is a turn the shipped gate',
|
|
472
|
+
' would have refused; how many of those refusals were WRONG needs a human read',
|
|
473
|
+
" of the turns, and this script does not claim to have done one. ADR-277's",
|
|
474
|
+
' open limit is the false-positive rate, and an upper bound is not it.',
|
|
475
|
+
'',
|
|
476
|
+
' Detector D is absent by construction: it reads `ci_last` from per-session',
|
|
477
|
+
' runtime state, which no transcript carries.',
|
|
188
478
|
'',
|
|
189
479
|
' Rates are per TURN, over the last assistant text of each turn — the same',
|
|
190
480
|
' population the shipped gate inspects. The entry count is printed beside',
|
|
@@ -208,10 +498,13 @@ export function render(c: Counts): string {
|
|
|
208
498
|
export function main(argv: string[] = process.argv.slice(2)): number {
|
|
209
499
|
let store = '';
|
|
210
500
|
let limit = 30;
|
|
501
|
+
let showFires = false;
|
|
211
502
|
for (let i = 0; i < argv.length; i += 1) {
|
|
212
503
|
if (argv[i] === '--store' && argv[i + 1] !== undefined) {
|
|
213
504
|
store = argv[i + 1]!;
|
|
214
505
|
i += 1;
|
|
506
|
+
} else if (argv[i] === '--show-fires') {
|
|
507
|
+
showFires = true;
|
|
215
508
|
} else if (argv[i] === '--limit' && argv[i + 1] !== undefined) {
|
|
216
509
|
// R2 finding 15: an unvalidated parseInt made `--limit abc` yield
|
|
217
510
|
// NaN, `slice(0, NaN)` return nothing, and the script exit 2 with
|
|
@@ -240,6 +533,10 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
240
533
|
return 2;
|
|
241
534
|
}
|
|
242
535
|
process.stdout.write(`${render(counts)}\n`);
|
|
536
|
+
if (showFires) {
|
|
537
|
+
process.stdout.write(`\n detector F fired here — read these turns before\n calling any of them a false positive:\n${renderFires(counts)}\n`);
|
|
538
|
+
process.stdout.write(`\n detector E fired here — same reading, same reason:\n${renderDroppedFires(counts)}\n`);
|
|
539
|
+
}
|
|
243
540
|
return 0;
|
|
244
541
|
}
|
|
245
542
|
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* File-first memory retrieval.
|
|
4
4
|
*
|
|
5
5
|
* Ported from the retired Python `src/scripts/memory_lookup.py` (ADR-200). The public
|
|
6
|
-
* API and CLI contract mirror
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* flagged as divergence candidates.
|
|
6
|
+
* API and CLI contract mirror it EXACTLY — same exported names (snake_case kept
|
|
7
|
+
* deliberately, especially `retrieve(...)`, whose signature and return shape are cited
|
|
8
|
+
* by rules), same exit codes, stdout/stderr split, byte-identical messages, same
|
|
9
|
+
* memory-file scan, ranking and JSON output. No behaviour changes; latent Python bugs
|
|
10
|
+
* are replicated and flagged as divergence candidates.
|
|
12
11
|
*
|
|
13
12
|
* Implements the shared `retrieve(types, keys, limit)` abstraction used
|
|
14
13
|
* by skills. Reads YAML under `agents/memory/<type>/` (curated, hand-
|
|
@@ -16,9 +15,8 @@
|
|
|
16
15
|
* append-only, supersede-chain aware), plus user-ingested `knowledge`
|
|
17
16
|
* chunks and opted-in `cross-repo` matches.
|
|
18
17
|
*
|
|
19
|
-
* Retrieval is entirely repo-side and file-backed —
|
|
20
|
-
*
|
|
21
|
-
* was removed; see `docs/decisions/` for the agent-memory removal ADR.)
|
|
18
|
+
* Retrieval is entirely repo-side and file-backed — no external backend. (The former
|
|
19
|
+
* optional `@event4u/agent-memory` routing was removed; see `docs/decisions/`.)
|
|
22
20
|
*
|
|
23
21
|
* Usage:
|
|
24
22
|
* memory_lookup --types domain-invariants,ownership --key "app/Http/Controllers/Foo" --limit 5
|
|
@@ -26,6 +24,8 @@
|
|
|
26
24
|
*
|
|
27
25
|
* import { retrieve } from './memory_lookup.js';
|
|
28
26
|
* const hits = retrieve(['ownership'], ['app/Http'], 3);
|
|
27
|
+
* loss_class: recoverable-lossy
|
|
28
|
+
* loss_recovery: the envelope's `truncation.omitted` plus its next-path hint under `agents/memory/`.
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
31
|
import * as fs from 'node:fs';
|