@event4u/agent-config 9.8.0 → 9.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +278 -298
- package/CONTRIBUTING.md +23 -7
- package/MIGRATION.md +20 -0
- package/README.md +55 -9
- package/dist/agent-src/commands/agents/audit.md +1 -1
- package/dist/agent-src/commands/agents/optimize.md +2 -2
- package/dist/agent-src/commands/agents/user.md +1 -1
- package/dist/agent-src/commands/agents.md +1 -1
- package/dist/agent-src/commands/check-current-md.md +3 -3
- package/dist/agent-src/commands/fix/portability.md +2 -2
- package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
- package/dist/agent-src/commands/fix/refs.md +2 -2
- package/dist/agent-src/commands/fix/route.md +4 -3
- package/dist/agent-src/commands/fix.md +9 -6
- package/dist/agent-src/commands/ghostwriter.md +1 -1
- package/dist/agent-src/commands/image.md +1 -1
- package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
- package/dist/agent-src/commands/optimize/skills.md +2 -2
- package/dist/agent-src/commands/post-as.md +1 -1
- package/dist/agent-src/commands/research.md +1 -1
- package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/team/delegate.md +4 -0
- package/dist/agent-src/commands/video.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
- package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
- package/dist/agent-src/rules/code-provenance.md +112 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +4 -4
- package/dist/agent-src/rules/history-discipline.md +80 -0
- package/dist/agent-src/rules/no-roadmap-references.md +1 -1
- package/dist/agent-src/rules/php-coding.md +1 -0
- package/dist/agent-src/rules/reviewer-awareness.md +1 -0
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +7 -0
- package/dist/agent-src/rules/scale-discipline.md +92 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +10 -0
- package/dist/agent-src/rules/session-canary.md +77 -0
- package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
- package/dist/agent-src/rules/tool-safety.md +3 -1
- package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
- package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
- package/dist/agent-src/skills/code-intelligence/SKILL.md +17 -14
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-review/SKILL.md +5 -6
- package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
- package/dist/agent-src/skills/history-design/SKILL.md +101 -0
- package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
- package/dist/agent-src/skills/image-editing/SKILL.md +1 -1
- package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
- package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
- package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
- package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
- package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
- package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
- package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
- package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
- package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +3 -4
- package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
- package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
- package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/command.md +3 -3
- package/dist/agent-src/templates/persona.md +2 -2
- package/dist/agent-src/templates/rule.md +2 -2
- package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
- package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
- package/dist/cli/commands/doctorShell.js +20 -0
- package/dist/cli/commands/doctorShell.js.map +1 -1
- package/dist/cli/commands/rtkDetect.js +58 -0
- package/dist/cli/commands/rtkDetect.js.map +1 -0
- package/dist/cli/firstRunNotice.js +70 -0
- package/dist/cli/firstRunNotice.js.map +1 -0
- package/dist/cli/main.js +35 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/registry.js +7 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +362 -78
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +6 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +90 -8
- package/dist/discovery/trust-report.md +11 -11
- package/dist/discovery/workspaces.json +31 -7
- package/dist/hooks/dispatch.js +19475 -0
- package/dist/install/agentSwitchDetection.js +75 -0
- package/dist/install/agentSwitchDetection.js.map +1 -0
- package/dist/install/agentSwitchProfile.js +117 -0
- package/dist/install/agentSwitchProfile.js.map +1 -0
- package/dist/install/atomic.js +1 -1
- package/dist/install/detect.js +1 -1
- package/dist/install/install.mjs +775 -486
- package/dist/install/rtkDetection.js +213 -0
- package/dist/install/rtkDetection.js.map +1 -0
- package/dist/install/rule_scope.js +2 -1
- package/dist/install/rule_scope.js.map +1 -1
- package/dist/install/types.js +2 -2
- package/dist/install/wizard-plan.js +1 -1
- package/dist/install/wizardDismissals.js +58 -0
- package/dist/install/wizardDismissals.js.map +1 -0
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +15 -4
- package/dist/mcp/server.json +20 -0
- package/dist/mcp/server.mjs +44292 -0
- package/dist/router.json +1 -1
- package/dist/scripts/condense.js +14 -7
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/app.js +4 -2
- package/dist/server/app.js.map +1 -1
- package/dist/server/io/sharedWriteCheck.js +101 -0
- package/dist/server/io/sharedWriteCheck.js.map +1 -0
- package/dist/server/routes/ping.js +14 -0
- package/dist/server/routes/ping.js.map +1 -1
- package/dist/server/routes/settings.js +21 -4
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/routes/userMd.js +21 -4
- package/dist/server/routes/userMd.js.map +1 -1
- package/dist/server/routes/wizard.js +68 -25
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/schemas/settings.js +4 -2
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/index-BpSQt5vm.js +40 -0
- package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
- package/dist/ui/assets/index-jSfMW8_t.css +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/MIGRATION.md +16 -0
- package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
- package/package.json +21 -11
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
- package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
- package/src/config/agent-settings.template.yml +52 -14
- package/src/config/discovery/packs.yml +22 -0
- package/src/config/discovery/workspaces.yml +1 -1
- package/src/config/evaluator-budgets.json +47 -0
- package/src/config/hook-latency-budget.json +20 -0
- package/src/install/agentSwitchDetection.ts +90 -0
- package/src/install/agentSwitchProfile.ts +131 -0
- package/src/install/atomic.ts +1 -1
- package/src/install/detect.ts +1 -1
- package/src/install/rtkDetection.ts +274 -0
- package/src/install/rule_scope.ts +9 -2
- package/src/install/types.ts +2 -2
- package/src/install/wizard-plan.ts +1 -1
- package/src/install/wizardDismissals.ts +60 -0
- package/src/scripts/_cli/cmd_doctor.ts +62 -1
- package/src/scripts/_cli/cmd_memory_get.ts +197 -0
- package/src/scripts/_cli/cmd_refresh.ts +30 -0
- package/src/scripts/_dispatch.bash +81 -0
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
- package/src/scripts/_lib/auto_dispatch.ts +76 -0
- package/src/scripts/_lib/detect_target_license.ts +714 -0
- package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +5 -0
- package/src/scripts/_lib/fixtures/secret-detector/positives.txt +4 -0
- package/src/scripts/_lib/install_drift.ts +194 -0
- package/src/scripts/_lib/memory_fts_index.ts +390 -0
- package/src/scripts/_lib/orchestration_record.ts +91 -2
- package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
- package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
- package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
- package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
- package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
- package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
- package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
- package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
- package/src/scripts/_lib/persistence/types.ts +109 -0
- package/src/scripts/_lib/rtk_allowlist.ts +44 -0
- package/src/scripts/_lib/secret_detector.test.ts +5 -0
- package/src/scripts/_lib/secret_detector.ts +9 -0
- package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
- package/src/scripts/_lib/spawn_env.ts +7 -0
- package/src/scripts/_lib/sqlite_guard.ts +191 -0
- package/src/scripts/_lib/subagent_spawn.ts +53 -0
- package/src/scripts/_lib/worker_budget.ts +107 -0
- package/src/scripts/ai_council/blind_review.ts +0 -0
- package/src/scripts/ai_council/config.ts +12 -6
- package/src/scripts/ai_council/orchestrator.ts +73 -3
- package/src/scripts/ai_team/review_gate.ts +8 -10
- package/src/scripts/ai_team/team_dispatch.ts +48 -0
- package/src/scripts/audit_initial_context.ts +1 -1
- package/src/scripts/bench_cross_source_eval.ts +400 -0
- package/src/scripts/bench_honesty_score.ts +1093 -0
- package/src/scripts/bench_hook_latency.ts +218 -0
- package/src/scripts/build_mcp_catalog.ts +275 -0
- package/src/scripts/build_mcp_registry_manifest.ts +46 -0
- package/src/scripts/build_proof.ts +45 -0
- package/src/scripts/chat_history.ts +8 -5
- package/src/scripts/check_backstop_debt.ts +23 -13
- package/src/scripts/check_bundle_path_leakage.ts +343 -0
- package/src/scripts/check_evaluator_budgets.ts +99 -0
- package/src/scripts/check_knowledge_sharing.ts +12 -1
- package/src/scripts/check_no_external_sources.ts +2 -2
- package/src/scripts/check_source_pointer_freshness.ts +28 -3
- package/src/scripts/code_graph/build.ts +0 -0
- package/src/scripts/code_graph/cli.ts +181 -9
- package/src/scripts/code_graph/detect.ts +52 -0
- package/src/scripts/code_graph/intent.ts +45 -0
- package/src/scripts/code_graph/query.ts +143 -29
- package/src/scripts/code_graph/sqlite_store.ts +174 -0
- package/src/scripts/condense.ts +14 -6
- package/src/scripts/context_hygiene_hook.ts +8 -5
- package/src/scripts/council_cli.ts +126 -12
- package/src/scripts/detect_target_license.ts +203 -0
- package/src/scripts/evaluator_umbrella.sh +145 -0
- package/src/scripts/external_sources_denylist.json +5 -3
- package/src/scripts/first_run_gate_hook.ts +9 -5
- package/src/scripts/hermetic-install.sh +3 -3
- package/src/scripts/hook_manifest.yaml +55 -16
- package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
- package/src/scripts/hooks/block_no_verify.ts +9 -9
- package/src/scripts/hooks/code_graph_nudge_hook.ts +11 -4
- package/src/scripts/hooks/concern_registry.ts +75 -0
- package/src/scripts/hooks/design_slop_hook.ts +8 -5
- package/src/scripts/hooks/dispatch_entry.ts +37 -0
- package/src/scripts/hooks/dispatch_hook.ts +176 -3
- package/src/scripts/hooks/hook_stdin.ts +42 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
- package/src/scripts/hot_context_hook.ts +7 -6
- package/src/scripts/injection_scan_hook.ts +9 -1
- package/src/scripts/install +6 -6
- package/src/scripts/install-hooks.sh +4 -4
- package/src/scripts/install.sh +5 -4
- package/src/scripts/install.ts +264 -23
- package/src/scripts/learning_sidecar.ts +0 -0
- package/src/scripts/lint_budget_ownership.ts +89 -0
- package/src/scripts/lint_command_routing.ts +35 -5
- package/src/scripts/lint_command_verbs.ts +42 -9
- package/src/scripts/lint_consumer_internal_refs.ts +211 -0
- package/src/scripts/lint_discovery_vocabulary.ts +2 -0
- package/src/scripts/lint_documented_commands.ts +670 -0
- package/src/scripts/lint_framework_leakage.ts +17 -3
- package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
- package/src/scripts/lint_governed_writes.ts +335 -0
- package/src/scripts/lint_hidden_unicode.ts +6 -0
- package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
- package/src/scripts/lint_memory_tripwire.ts +186 -0
- package/src/scripts/lint_override_kernel_guard.ts +74 -26
- package/src/scripts/lint_persistence.ts +171 -0
- package/src/scripts/lint_pre_migration_refs.ts +106 -0
- package/src/scripts/lint_provenance.ts +547 -0
- package/src/scripts/lint_provenance_vocabulary.ts +437 -0
- package/src/scripts/lint_spawn_payload.ts +283 -0
- package/src/scripts/lint_store_boundary.ts +152 -0
- package/src/scripts/lint_versioned_cache.ts +7 -1
- package/src/scripts/mcp_server/__main__.ts +7 -2
- package/src/scripts/mcp_server/catalog.ts +23 -1
- package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
- package/src/scripts/mcp_server/prompts.ts +6 -0
- package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
- package/src/scripts/mcp_server/tools.ts +56 -5
- package/src/scripts/mcp_telemetry_query.ts +2 -33
- package/src/scripts/mcp_telemetry_store.ts +64 -34
- package/src/scripts/memory_learn_hook.ts +126 -0
- package/src/scripts/memory_lookup.ts +0 -0
- package/src/scripts/memory_replay_24.ts +312 -0
- package/src/scripts/memory_report.ts +16 -3
- package/src/scripts/memory_signal.ts +48 -0
- package/src/scripts/memory_status.ts +6 -0
- package/src/scripts/minimal_safe_diff_hook.ts +8 -5
- package/src/scripts/onboarding_gate_hook.ts +8 -5
- package/src/scripts/orchestration_record.ts +16 -0
- package/src/scripts/pr_url_reminder_hook.ts +8 -1
- package/src/scripts/prepack-check.mjs +17 -0
- package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
- package/src/scripts/prepack_lifecycle_check.mjs +82 -0
- package/src/scripts/profile_staleness_hook.ts +8 -7
- package/src/scripts/report_install_drift.ts +109 -0
- package/src/scripts/roadmap_progress_hook.ts +8 -5
- package/src/scripts/schemas/license-policy.schema.json +89 -0
- package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
- package/src/scripts/schemas/rule.schema.json +10 -0
- package/src/scripts/self_review_gate.test.ts +173 -1
- package/src/scripts/self_review_gate.ts +155 -15
- package/src/scripts/session_canary_hook.ts +182 -0
- package/src/scripts/smoke_quickstart.ts +2 -2
- package/src/scripts/surface_probe_hook.ts +8 -7
- package/src/scripts/sync_gitattributes.ts +310 -0
- package/src/scripts/team_review_gate_hook.ts +13 -16
- package/src/scripts/verify_before_complete_hook.ts +8 -5
- package/src/scripts/wrapper_freshness_hook.ts +8 -7
- package/src/server/schemas/settings.ts +8 -2
- package/dist/ui/assets/index-BPFMZWUs.css +0 -1
- package/dist/ui/assets/index-CrmZ34Rg.js +0 -40
- package/dist/ui/assets/index-CrmZ34Rg.js.map +0 -1
- package/docs/CLAIMS.md +0 -286
- package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
- package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
- package/docs/SKILL_CENSUS.md +0 -352
- package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
- package/docs/adrs/cost/README.md +0 -9
- package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
- package/docs/adrs/memory/README.md +0 -10
- package/docs/adrs/router/0001-three-tier-routing.md +0 -119
- package/docs/adrs/router/README.md +0 -9
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
- package/docs/adrs/schema/README.md +0 -9
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
- package/docs/adrs/smoke/README.md +0 -9
- package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
- package/docs/adrs/telegraph/README.md +0 -9
- package/docs/announcements/2026-05-non-dev-launch.md +0 -79
- package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
- package/docs/anti-reskin-gate.md +0 -60
- package/docs/architecture/augment-projection.md +0 -70
- package/docs/architecture/claude-bundle.md +0 -77
- package/docs/architecture/current-onboard-baseline.md +0 -126
- package/docs/architecture/current-safety-behavior.md +0 -137
- package/docs/architecture/multi-tool-projection.md +0 -125
- package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
- package/docs/architecture/source-projection.md +0 -85
- package/docs/architecture.md +0 -390
- package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
- package/docs/archive/CHANGELOG-7.0.0.md +0 -419
- package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
- package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
- package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
- package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
- package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
- package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
- package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
- package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
- package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
- package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
- package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
- package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
- package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
- package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
- package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
- package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
- package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
- package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
- package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
- package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
- package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
- package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
- package/docs/artefact-census.md +0 -71
- package/docs/benchmark.md +0 -785
- package/docs/benchmark.pinned.yml +0 -31
- package/docs/benchmarks.md +0 -85
- package/docs/capability-matrix.md +0 -33
- package/docs/case-studies/_template.md +0 -60
- package/docs/case-studies/frontend-design-positioning.md +0 -86
- package/docs/catalog.md +0 -726
- package/docs/command-flows.md +0 -272
- package/docs/command-naming-audit.md +0 -60
- package/docs/comparison.yaml +0 -87
- package/docs/contracts/CHANGELOG-conventions.md +0 -149
- package/docs/contracts/STABILITY.md +0 -188
- package/docs/contracts/adoption-signal-floor.md +0 -127
- package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
- package/docs/contracts/adr-chat-history-split.md +0 -140
- package/docs/contracts/adr-command-suggestion.md +0 -144
- package/docs/contracts/adr-forecast-construction-shape.md +0 -90
- package/docs/contracts/adr-gtm-context-spine.md +0 -116
- package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
- package/docs/contracts/adr-install-user-type-axis.md +0 -107
- package/docs/contracts/adr-layout.md +0 -107
- package/docs/contracts/adr-level-6-productization.md +0 -145
- package/docs/contracts/adr-mcp-runtime.md +0 -128
- package/docs/contracts/adr-product-ui-track.md +0 -381
- package/docs/contracts/adr-prompt-driven-execution.md +0 -186
- package/docs/contracts/adr-settings-sync-engine.md +0 -128
- package/docs/contracts/adr-user-types-axis.md +0 -127
- package/docs/contracts/adr-wing4-context-spine.md +0 -126
- package/docs/contracts/agent-user-schema.md +0 -170
- package/docs/contracts/agents-layout.md +0 -148
- package/docs/contracts/agents-md-tech-stack.md +0 -75
- package/docs/contracts/ai-council-config.md +0 -829
- package/docs/contracts/ai-team-config.md +0 -224
- package/docs/contracts/analysis-memory-loop.md +0 -149
- package/docs/contracts/at-rest-encryption.md +0 -191
- package/docs/contracts/audit-log-v1.md +0 -150
- package/docs/contracts/auto-orchestration-v1.md +0 -70
- package/docs/contracts/benchmark-ab-contract.md +0 -106
- package/docs/contracts/benchmark-corpus-spec.md +0 -125
- package/docs/contracts/benchmark-report-schema.md +0 -113
- package/docs/contracts/branch-protection-policy.md +0 -139
- package/docs/contracts/brand-token-consumption.md +0 -74
- package/docs/contracts/capability-boundary.md +0 -69
- package/docs/contracts/capability-packs.md +0 -217
- package/docs/contracts/ci-cost-budget.md +0 -111
- package/docs/contracts/ci-green-floor.md +0 -141
- package/docs/contracts/command-category-governance.md +0 -84
- package/docs/contracts/command-clusters.md +0 -399
- package/docs/contracts/command-surface-tiers.md +0 -176
- package/docs/contracts/command-taxonomy.md +0 -137
- package/docs/contracts/condensation-default-kill-criterion.md +0 -116
- package/docs/contracts/config-presets.md +0 -144
- package/docs/contracts/conformance.md +0 -84
- package/docs/contracts/consumer-bridge.md +0 -73
- package/docs/contracts/context-paths.md +0 -101
- package/docs/contracts/context-spine.md +0 -179
- package/docs/contracts/cost-dashboard.md +0 -143
- package/docs/contracts/cost-enforcement.md +0 -134
- package/docs/contracts/cost-profile-defaults.md +0 -110
- package/docs/contracts/cost-summary-schema.md +0 -107
- package/docs/contracts/creative-pack-boundary.md +0 -63
- package/docs/contracts/cross-repo-retrieval.md +0 -64
- package/docs/contracts/cross-wing-handoff.md +0 -134
- package/docs/contracts/daily-workspace.md +0 -147
- package/docs/contracts/decision-engine-gates.md +0 -120
- package/docs/contracts/decision-trace-v1.md +0 -177
- package/docs/contracts/design-artifact-lifecycle.md +0 -93
- package/docs/contracts/design-artifact-verification.md +0 -153
- package/docs/contracts/discovery-manifest.md +0 -209
- package/docs/contracts/discovery-manifest.schema.json +0 -254
- package/docs/contracts/evidence-based-pruning.md +0 -102
- package/docs/contracts/explain-modes.md +0 -187
- package/docs/contracts/explain-trace.schema.json +0 -144
- package/docs/contracts/file-ownership-matrix.json +0 -13941
- package/docs/contracts/file-ownership-matrix.md +0 -135
- package/docs/contracts/frontmatter-contract.md +0 -140
- package/docs/contracts/ghostwriter-schema.md +0 -337
- package/docs/contracts/governance-enforcement-projection.md +0 -159
- package/docs/contracts/gui-wizard.md +0 -350
- package/docs/contracts/harness-expectations.md +0 -128
- package/docs/contracts/hook-architecture-v1.md +0 -325
- package/docs/contracts/host-agent-protocol.md +0 -110
- package/docs/contracts/implement-ticket-flow.md +0 -625
- package/docs/contracts/init-telemetry.md +0 -132
- package/docs/contracts/injected-block-authenticity-model.md +0 -66
- package/docs/contracts/install-layout.md +0 -249
- package/docs/contracts/install-scopes.md +0 -82
- package/docs/contracts/installed-tools-lockfile.md +0 -144
- package/docs/contracts/installer-agent-mode.md +0 -137
- package/docs/contracts/iron-law-overrides.txt +0 -26
- package/docs/contracts/kernel-membership.md +0 -339
- package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
- package/docs/contracts/linear-ai-three-layers.md +0 -130
- package/docs/contracts/linter-structural-model.md +0 -181
- package/docs/contracts/load-context-budget-model.md +0 -259
- package/docs/contracts/load-context-schema.md +0 -220
- package/docs/contracts/local-analytics.md +0 -160
- package/docs/contracts/local-knowledge-ingestion.md +0 -96
- package/docs/contracts/local-server-api.md +0 -134
- package/docs/contracts/local-server-ports.md +0 -53
- package/docs/contracts/low-impact-corpus-format.md +0 -95
- package/docs/contracts/mcp-beta-criteria.md +0 -130
- package/docs/contracts/mcp-cloud-scope.md +0 -355
- package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
- package/docs/contracts/mcp-phase-1-scope.md +0 -272
- package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
- package/docs/contracts/mcp-tool-inventory.md +0 -64
- package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
- package/docs/contracts/measurement-baseline.md +0 -103
- package/docs/contracts/memory-visibility-v1.md +0 -160
- package/docs/contracts/mental-models.md +0 -336
- package/docs/contracts/migrate-command.md +0 -233
- package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
- package/docs/contracts/namespace.md +0 -125
- package/docs/contracts/no-runtime-boundary.md +0 -61
- package/docs/contracts/one-off-script-lifecycle.md +0 -110
- package/docs/contracts/orchestration-dsl-v1.md +0 -153
- package/docs/contracts/package-self-orientation.md +0 -163
- package/docs/contracts/pilot/agent-authority.md +0 -24
- package/docs/contracts/pilot/direct-answers.md +0 -70
- package/docs/contracts/pilot/language-and-tone.md +0 -63
- package/docs/contracts/plain-language-surface.md +0 -117
- package/docs/contracts/prelaunch-diagnostics.md +0 -151
- package/docs/contracts/profile-system.md +0 -167
- package/docs/contracts/reasoning-discipline-protocol.md +0 -83
- package/docs/contracts/release-pr-gating.md +0 -151
- package/docs/contracts/release-sizing.md +0 -107
- package/docs/contracts/release-trunk-sync.md +0 -105
- package/docs/contracts/review-lens-schema.md +0 -64
- package/docs/contracts/roadmap-complexity-standard.md +0 -138
- package/docs/contracts/role-experience.md +0 -125
- package/docs/contracts/router-blending.md +0 -71
- package/docs/contracts/rule-classification.md +0 -171
- package/docs/contracts/rule-interactions.md +0 -132
- package/docs/contracts/rule-interactions.yml +0 -260
- package/docs/contracts/rule-priority-hierarchy.md +0 -88
- package/docs/contracts/rule-router.md +0 -287
- package/docs/contracts/safety-model.md +0 -129
- package/docs/contracts/session-profile-overlay.md +0 -157
- package/docs/contracts/settings-api.md +0 -264
- package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
- package/docs/contracts/settings-sync-yaml-subset.md +0 -139
- package/docs/contracts/skill-bundled-assets.md +0 -62
- package/docs/contracts/skill-discovery.md +0 -80
- package/docs/contracts/skill-distribution-channels.md +0 -66
- package/docs/contracts/skill-domains.md +0 -144
- package/docs/contracts/skill-dry-run.md +0 -47
- package/docs/contracts/skill-family-map.yml +0 -915
- package/docs/contracts/smoke-contracts.md +0 -144
- package/docs/contracts/subagent-boundary.md +0 -74
- package/docs/contracts/surface-agent-contracts.md +0 -153
- package/docs/contracts/surface-matrix.md +0 -108
- package/docs/contracts/surface-tiers.md +0 -81
- package/docs/contracts/telegraph-telemetry.md +0 -83
- package/docs/contracts/ticket-bundle-format.md +0 -233
- package/docs/contracts/tier-3-contrib-plugin.md +0 -137
- package/docs/contracts/trust-and-safety.md +0 -144
- package/docs/contracts/ui-stack-extension.md +0 -237
- package/docs/contracts/ui-track-flow.md +0 -329
- package/docs/contracts/universal-skills.md +0 -91
- package/docs/contracts/user-type-schema.md +0 -146
- package/docs/contracts/value-dashboard-spec.md +0 -378
- package/docs/contracts/value-report-schema.md +0 -168
- package/docs/contracts/workflow-packs.md +0 -121
- package/docs/contracts/workspace-boundary.md +0 -84
- package/docs/contracts/workspace-documents.md +0 -144
- package/docs/contracts/write-engine.md +0 -182
- package/docs/cookbook.md +0 -152
- package/docs/customization.md +0 -696
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
- package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
- package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
- package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
- package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
- package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
- package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
- package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
- package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
- package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
- package/docs/decisions/ADR-016-installer-architecture.md +0 -191
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
- package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
- package/docs/decisions/ADR-021-deployment-shape.md +0 -153
- package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
- package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
- package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
- package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
- package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
- package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
- package/docs/decisions/ADR-028-root-layout.md +0 -147
- package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
- package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
- package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
- package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
- package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
- package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
- package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
- package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
- package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
- package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
- package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
- package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
- package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
- package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
- package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
- package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
- package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
- package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
- package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
- package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
- package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
- package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
- package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
- package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
- package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
- package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
- package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
- package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
- package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
- package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
- package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
- package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
- package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
- package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
- package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
- package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
- package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
- package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
- package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
- package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
- package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
- package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
- package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
- package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
- package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
- package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
- package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
- package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
- package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
- package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
- package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
- package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
- package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
- package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
- package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
- package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
- package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
- package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
- package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
- package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
- package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
- package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
- package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
- package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
- package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
- package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
- package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
- package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
- package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
- package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
- package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
- package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
- package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
- package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
- package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
- package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
- package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
- package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
- package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -248
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -112
- package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
- package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
- package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -209
- package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
- package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
- package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
- package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
- package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
- package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
- package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
- package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
- package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
- package/docs/decisions/ADR-124-embedded-engine-doctrine.md +0 -255
- package/docs/decisions/ADR-125-doc-screenshot-anonymization.md +0 -131
- package/docs/decisions/ADR-126-internet-reach-operator-tooling.md +0 -254
- package/docs/decisions/ADR-127-enforcement-claims-must-resolve.md +0 -150
- package/docs/decisions/ADR-128-executable-evidence-and-measured-escalation.md +0 -201
- package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
- package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
- package/docs/decisions/INDEX.md +0 -157
- package/docs/decisions/engine-reclassification-2026-07.md +0 -104
- package/docs/deploy/connector-setup.md +0 -129
- package/docs/deploy/env-vars.md +0 -70
- package/docs/deploy/policy-cookbook.md +0 -130
- package/docs/deploy/quickstart.md +0 -112
- package/docs/deploy/small-team-recipe.md +0 -148
- package/docs/deploy/team-deployment-posture.md +0 -111
- package/docs/design/adversarial-council-eval.md +0 -106
- package/docs/design/council-vs-solo-baseline.md +0 -92
- package/docs/design/cross-model-parity-eval.md +0 -82
- package/docs/design/length-neutral-judge-rerun.md +0 -92
- package/docs/design/utilization-window-criteria.md +0 -51
- package/docs/development.md +0 -230
- package/docs/distribution/awesome-list-submission.md +0 -46
- package/docs/distribution/consumer-matrix.md +0 -96
- package/docs/distribution/launch-story-draft.md +0 -58
- package/docs/distribution/mcp-submission-checklist.md +0 -95
- package/docs/distribution/public-install-smoke.md +0 -68
- package/docs/distribution/registries.md +0 -126
- package/docs/distribution/registry-submissions.md +0 -85
- package/docs/distribution/telemetry-privacy.md +0 -128
- package/docs/distribution/telemetry-schema.md +0 -174
- package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
- package/docs/end-to-end-walkthroughs.md +0 -165
- package/docs/enforcement-by-host.md +0 -51
- package/docs/examples/agent-user.example.md +0 -22
- package/docs/experiences/agency.md +0 -49
- package/docs/experiences/content_creator.md +0 -49
- package/docs/experiences/developer.md +0 -49
- package/docs/experiences/finance.md +0 -50
- package/docs/experiences/founder.md +0 -49
- package/docs/experiences/ops.md +0 -49
- package/docs/featured-commands.md +0 -27
- package/docs/featured-skills.md +0 -95
- package/docs/flows.md +0 -67
- package/docs/getting-started-by-role.md +0 -190
- package/docs/getting-started-laravel.md +0 -72
- package/docs/getting-started-local-stdio.md +0 -77
- package/docs/getting-started.md +0 -254
- package/docs/github-topics.md +0 -93
- package/docs/governance-advantage.md +0 -72
- package/docs/governance.md +0 -96
- package/docs/guides/cross-repo-linked-projects.md +0 -93
- package/docs/guides/cross-repo-retrieval.md +0 -61
- package/docs/guides/frontend-design-corpus-refresh.md +0 -83
- package/docs/guides/gated-platform-reads.md +0 -221
- package/docs/guides/local-analytics.md +0 -125
- package/docs/guides/local-knowledge.md +0 -127
- package/docs/guides/skill-discovery.md +0 -71
- package/docs/guides/skill-preview.md +0 -71
- package/docs/hook-payload-capture.md +0 -221
- package/docs/install-friction-report.md +0 -66
- package/docs/installation.md +0 -959
- package/docs/maintainers/branch-protection.md +0 -105
- package/docs/maintainers/dev-mode.md +0 -106
- package/docs/maintainers/optional-media-deps.md +0 -50
- package/docs/maintainers/system-map.md +0 -85
- package/docs/mcp-registries.md +0 -94
- package/docs/mcp-server.md +0 -175
- package/docs/mcp.md +0 -147
- package/docs/media/proof-demo.cast +0 -14
- package/docs/media/proof-demo.gif +0 -0
- package/docs/migration/consumer-template-consumption-model.md +0 -145
- package/docs/migration/divergences/README.md +0 -55
- package/docs/migration/divergences/_template.md +0 -50
- package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
- package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
- package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
- package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
- package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
- package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
- package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
- package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
- package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
- package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
- package/docs/migration/node-floor.md +0 -86
- package/docs/migration/v1-to-v2.md +0 -156
- package/docs/migration/yaml-roundtrip-spike.md +0 -163
- package/docs/migrations/commands-1.15.0.md +0 -117
- package/docs/parity/bench-external.json +0 -58
- package/docs/parity/bench.json +0 -41
- package/docs/parity/command-frontmatter.md +0 -60
- package/docs/parity/external-runtime.md +0 -46
- package/docs/personas.md +0 -178
- package/docs/positioning-evidence.md +0 -86
- package/docs/profiles.md +0 -108
- package/docs/proof.md +0 -252
- package/docs/quality.md +0 -98
- package/docs/readme-split-plan.md +0 -102
- package/docs/recruits/_template.md +0 -81
- package/docs/release-runbook.md +0 -141
- package/docs/role-experiences.md +0 -19
- package/docs/safety.md +0 -30
- package/docs/second-brain-scope.md +0 -116
- package/docs/self-review-gate.md +0 -65
- package/docs/setup/enterprise-and-offline.md +0 -201
- package/docs/setup/mcp-client-config.md +0 -358
- package/docs/setup/mcp-cloud-endpoints.md +0 -116
- package/docs/setup/mcp-cloud-registry-listing.md +0 -99
- package/docs/setup/mcp-cloud-setup.md +0 -183
- package/docs/setup/mcp-r2-bootstrap.md +0 -82
- package/docs/setup/mcp-server-docker.md +0 -101
- package/docs/setup/per-ide/aider.md +0 -48
- package/docs/setup/per-ide/antigravity.md +0 -68
- package/docs/setup/per-ide/augment.md +0 -89
- package/docs/setup/per-ide/claude-code.md +0 -97
- package/docs/setup/per-ide/claude-desktop.md +0 -207
- package/docs/setup/per-ide/cline.md +0 -43
- package/docs/setup/per-ide/codebuddy.md +0 -63
- package/docs/setup/per-ide/codex.md +0 -46
- package/docs/setup/per-ide/continue.md +0 -68
- package/docs/setup/per-ide/copilot.md +0 -80
- package/docs/setup/per-ide/cursor.md +0 -125
- package/docs/setup/per-ide/droid.md +0 -65
- package/docs/setup/per-ide/gemini-cli.md +0 -45
- package/docs/setup/per-ide/jetbrains.md +0 -76
- package/docs/setup/per-ide/kilocode.md +0 -66
- package/docs/setup/per-ide/kiro.md +0 -72
- package/docs/setup/per-ide/opencode.md +0 -62
- package/docs/setup/per-ide/qoder.md +0 -63
- package/docs/setup/per-ide/roocode.md +0 -68
- package/docs/setup/per-ide/trae.md +0 -63
- package/docs/setup/per-ide/warp.md +0 -63
- package/docs/setup/per-ide/windsurf.md +0 -109
- package/docs/setup/per-ide/zed.md +0 -73
- package/docs/showcase.md +0 -209
- package/docs/skill-duplication-findings.md +0 -91
- package/docs/skills-catalog.md +0 -265
- package/docs/skills-taxonomy.md +0 -90
- package/docs/spawn-site-policy.md +0 -72
- package/docs/succession.md +0 -80
- package/docs/threat-model.md +0 -30
- package/docs/troubleshooting.md +0 -155
- package/docs/ui-track-mental-model.md +0 -121
- package/docs/us-vs-the-category.md +0 -38
- package/docs/value.md +0 -86
- package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
- package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
- package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
- package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
- package/docs/walkthroughs/daily-workspace.md +0 -127
- package/docs/wedge/production-validator/README.md +0 -81
- package/docs/wedge/production-validator/first-run-check.sh +0 -42
- package/docs/wedge/production-validator/production-validator.md +0 -83
- package/docs/wizard.md +0 -173
- package/src/scripts/postinstall_gui.ts +0 -129
|
@@ -148,19 +148,19 @@ const CROSS_STACK_HINTS: Record<string, string[]> = {
|
|
|
148
148
|
ruby: ['\\bRails\\b', '\\bbin/rails\\b', '\\bGemfile\\b', '\\bbundle exec\\b'],
|
|
149
149
|
python: ['\\bDjango\\b', '\\bFastAPI\\b', '\\bFlask\\b', '\\bpoetry\\b',
|
|
150
150
|
'\\buv (add|sync|run|pip)\\b', '\\bvenv\\b', '\\bPydantic\\b', '\\bJinja\\b',
|
|
151
|
-
'docs\\.python\\.org'],
|
|
151
|
+
'docs\\.python\\.org', '\\bPython\\b'],
|
|
152
152
|
node: ['\\bExpress\\b', '\\bNext\\.?js\\b', '\\bNode\\.?js\\b', '\\bnpx\\b',
|
|
153
153
|
'\\bvitest\\b', '\\bjest\\b', '\\beslint\\b', '\\bprettier\\b',
|
|
154
154
|
'\\bReact\\b', '\\bVue\\b', '\\bNestJS\\b', '\\bTypeScript\\b',
|
|
155
155
|
'\\btsc\\b', '\\bzod\\b', '\\bPrisma\\b', '\\bTailwind\\b',
|
|
156
156
|
'\\bTurborepo\\b', '\\bclass-validator\\b', '\\bInertia\\b',
|
|
157
157
|
'\\bJSX\\b', '\\bNx\\b',
|
|
158
|
-
'\\.tsx?\\b', 'typescriptlang\\.org'],
|
|
158
|
+
'\\.tsx?\\b', 'typescriptlang\\.org', '\\bTS\\b', '\\bJS\\b'],
|
|
159
159
|
go: ['\\bgo (test|build|run|mod)\\b', '\\bgolangci-lint\\b', '\\bGoLand\\b',
|
|
160
160
|
'\\bGolang\\b', '\\bgo\\.dev\\b'],
|
|
161
161
|
rust: ['\\bcargo (test|build|run|check|fmt|clippy|add|update)\\b',
|
|
162
162
|
'\\bClippy\\b', '\\brustfmt\\b', '\\bCargo\\.toml\\b',
|
|
163
|
-
'rust-lang\\.org'],
|
|
163
|
+
'rust-lang\\.org', '\\bRust\\b'],
|
|
164
164
|
dotnet: ['\\bdotnet (test|build|run|add|restore)\\b', '\\b\\.NET\\b'],
|
|
165
165
|
java: ['\\bSpring\\b', '\\bmvn (test|clean|install|package)\\b',
|
|
166
166
|
'\\bgradle\\b', '\\bMaven\\b'],
|
|
@@ -168,6 +168,20 @@ const CROSS_STACK_HINTS: Record<string, string[]> = {
|
|
|
168
168
|
// are hit patterns; these are window-only hints so a JS/Python hit next
|
|
169
169
|
// to plain-language PHP mentions self-suppresses as cross-stack docs.
|
|
170
170
|
php: ['\\bvendor/', '\\bPHP\\b'],
|
|
171
|
+
// Bare LANGUAGE names (Python / Rust / TS / JS above) are the same class of
|
|
172
|
+
// window-only hint the `php` family already had, and their absence was an
|
|
173
|
+
// asymmetry, not a policy: a checklist row naming "PHP typed properties +
|
|
174
|
+
// declare(strict_types=1), TS strict, Python type hints, Go / Rust" — five
|
|
175
|
+
// ecosystems on ONE line, the rule's textbook "multi-stack peers" case —
|
|
176
|
+
// matched the PHP hit pattern and found no cross-stack hint, because only
|
|
177
|
+
// PHP had a plain-language entry. So the linter flagged the exact shape
|
|
178
|
+
// framework-neutrality documents as allowed.
|
|
179
|
+
//
|
|
180
|
+
// `\bGo\b` is deliberately NOT added. These hints SUPPRESS, so an
|
|
181
|
+
// over-broad one hides real leakage — and "go to" / "go ahead" would fire
|
|
182
|
+
// constantly in prose. Golang / `go test|build|run|mod` / go.dev stay the
|
|
183
|
+
// Go signals; a Go-only line with none of those is not self-evidently
|
|
184
|
+
// cross-stack anyway.
|
|
171
185
|
// Polyglot-runner pseudo-family: a Taskfile/Makefile mention marks the
|
|
172
186
|
// window as multi-stack tooling documentation (runner files are
|
|
173
187
|
// ecosystem-neutral by definition).
|
|
@@ -116,6 +116,38 @@
|
|
|
116
116
|
185
|
|
117
117
|
],
|
|
118
118
|
"reason": "Multi-ecosystem capture-tools line and skip-marker grep spanning pytest/PHPUnit/JS in one pattern — documentation across stacks."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"file": "src/skills/test-driven-development/SKILL.md",
|
|
122
|
+
"lines": [
|
|
123
|
+
228,
|
|
124
|
+
231,
|
|
125
|
+
239,
|
|
126
|
+
243
|
|
127
|
+
],
|
|
128
|
+
"reason": "Example A of a deliberate A/B pair: '### Example A — PHP / Pest' (L228) sits opposite '### Example B — TypeScript / Vitest' (L259). That is framework-neutrality's textbook 'multi-stack peers' shape, but the two headings are 31 lines apart and the cross-stack window is +/-10, so the heuristic cannot see the sibling. Allowlisted rather than widening the window for a single document — if a second per-stack A/B skill appears, build the section-aware window instead of adding a second entry here."
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"file": "src/skills/image-editing/SKILL.md",
|
|
132
|
+
"lines": [
|
|
133
|
+
48
|
|
134
|
+
],
|
|
135
|
+
"reason": "npm install-location path of THIS package's own image-adapter scripts (node_modules/@event4u/agent-config/...) — the factual consumer path after the consumer-internal-ref decoupling (road-to-credible-install Phase 4), not a JS-stack mandate."
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"file": "src/skills/image-generation/SKILL.md",
|
|
139
|
+
"lines": [
|
|
140
|
+
45
|
|
141
|
+
],
|
|
142
|
+
"reason": "npm install-location path of THIS package's own image-adapter scripts (node_modules/@event4u/agent-config/...) — the factual consumer path after the consumer-internal-ref decoupling (road-to-credible-install Phase 4), not a JS-stack mandate."
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"file": "src/skills/prompt-engineering-image/SKILL.md",
|
|
146
|
+
"lines": [
|
|
147
|
+
74,
|
|
148
|
+
115
|
|
149
|
+
],
|
|
150
|
+
"reason": "npm install-location path of THIS package's own image-adapter scripts (node_modules/@event4u/agent-config/...) — the factual consumer path after the consumer-internal-ref decoupling (road-to-credible-install Phase 4), not a JS-stack mandate."
|
|
119
151
|
}
|
|
120
152
|
]
|
|
121
153
|
}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* lint_governed_writes — flag direct filesystem writes to protected
|
|
4
|
+
* ledger/governance surfaces that bypass the sanctioned write path.
|
|
5
|
+
*
|
|
6
|
+
* Scans: src/scripts/**\/*.ts (excluding *.test.ts and the atomic-write
|
|
7
|
+
* primitive itself, _lib/fs_atomic.ts, which is the sanctioned layer this
|
|
8
|
+
* lint measures bypasses of).
|
|
9
|
+
*
|
|
10
|
+
* Protected surfaces (each carries its own write policy):
|
|
11
|
+
* - docs/CLAIMS.md (claims ledger) — `always-forbidden`: ANY direct
|
|
12
|
+
* fs write/append call referencing this path is a violation; the
|
|
13
|
+
* ledger is only ever mutated via `write_atomic` from
|
|
14
|
+
* `src/scripts/_lib/fs_atomic.ts` (which this lint does not scan, and
|
|
15
|
+
* whose call name — `write_atomic` — never matches the banned-call
|
|
16
|
+
* patterns below, so a compliant writer is naturally clean).
|
|
17
|
+
* - agents/memory/intake/ (append-only signal JSONL) — `append-only`:
|
|
18
|
+
* an APPEND call (appendFileSync / fs.promises.appendFile /
|
|
19
|
+
* createWriteStream with an `'a'` flag) is the sanctioned operation;
|
|
20
|
+
* only a REWRITE call is a violation.
|
|
21
|
+
* - agents/runtime/state/audit/ (append-only audit-log-v1 JSONL) —
|
|
22
|
+
* `append-only`, same split as above.
|
|
23
|
+
*
|
|
24
|
+
* Banned call shapes (rewrite family): fs.writeFileSync(),
|
|
25
|
+
* fs.promises.writeFile(), fs.createWriteStream() without an append flag —
|
|
26
|
+
* each also matched via a bare destructured import (writeFileSync(...)).
|
|
27
|
+
* Banned call shapes (append family, sanctioned on append-only surfaces,
|
|
28
|
+
* always a violation on always-forbidden surfaces): fs.appendFileSync(),
|
|
29
|
+
* fs.promises.appendFile(), fs.createWriteStream() with `{ flags: 'a' }`.
|
|
30
|
+
*
|
|
31
|
+
* A call only counts against a surface when the surface's path fragment
|
|
32
|
+
* appears as a string/template literal INSIDE that call's own argument
|
|
33
|
+
* list (matched by balanced-paren scanning, so multi-line call arguments
|
|
34
|
+
* are captured) — a path built up through an unrelated variable (no
|
|
35
|
+
* literal in the call's own arguments) is not flagged; that is a known,
|
|
36
|
+
* deliberate scope limit of a static, zero-runtime-cost lint.
|
|
37
|
+
*
|
|
38
|
+
* Inline-ignore: add a comment on the same or previous line:
|
|
39
|
+
* lint-governed-writes-disable-next-line [-- reason]
|
|
40
|
+
* lint-governed-writes-disable-line [-- reason]
|
|
41
|
+
* lint-governed-writes-disable-file [-- reason] (top of file)
|
|
42
|
+
*
|
|
43
|
+
* Exit codes: 0 = clean, 2 = findings present, 1 = internal error.
|
|
44
|
+
*/
|
|
45
|
+
import fs from "node:fs";
|
|
46
|
+
import path from "node:path";
|
|
47
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
48
|
+
|
|
49
|
+
const _HERE = path.dirname(fileURLToPath(import.meta.url));
|
|
50
|
+
export const REPO_ROOT = path.resolve(_HERE, "..", "..");
|
|
51
|
+
export const SCRIPTS_DIR = path.join(REPO_ROOT, "src", "scripts");
|
|
52
|
+
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Protected surfaces
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
type SurfacePolicy = "always-forbidden" | "append-only";
|
|
57
|
+
|
|
58
|
+
interface ProtectedSurface {
|
|
59
|
+
id: string;
|
|
60
|
+
fragment: string;
|
|
61
|
+
policy: SurfacePolicy;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// No canonical bench-report index file was found under src/scripts at
|
|
65
|
+
// authoring time (no writer builds a single "bench index" registry path) —
|
|
66
|
+
// see the lint's own docstring history / task report. If one is added
|
|
67
|
+
// later, append it here with the matching policy.
|
|
68
|
+
const PROTECTED_SURFACES: ProtectedSurface[] = [
|
|
69
|
+
{ id: "claims-ledger", fragment: "docs/CLAIMS.md", policy: "always-forbidden" },
|
|
70
|
+
{ id: "memory-intake", fragment: "agents/memory/intake/", policy: "append-only" },
|
|
71
|
+
{ id: "audit-log", fragment: "agents/runtime/state/audit/", policy: "append-only" },
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Banned call-shape patterns
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
type CallFamily = "rewrite" | "append" | "stream";
|
|
78
|
+
|
|
79
|
+
interface CallPattern {
|
|
80
|
+
name: string;
|
|
81
|
+
family: CallFamily;
|
|
82
|
+
source: string; // regex source, compiled fresh per exec loop (stateful lastIndex)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const CALL_PATTERNS: CallPattern[] = [
|
|
86
|
+
{ name: "fs.writeFileSync", family: "rewrite", source: "\\b(?:fs\\.)?writeFileSync\\s*\\(" },
|
|
87
|
+
{ name: "fs.promises.writeFile", family: "rewrite", source: "\\bfs\\.promises\\.writeFile\\s*\\(" },
|
|
88
|
+
{ name: "fs.appendFileSync", family: "append", source: "\\b(?:fs\\.)?appendFileSync\\s*\\(" },
|
|
89
|
+
{ name: "fs.promises.appendFile", family: "append", source: "\\bfs\\.promises\\.appendFile\\s*\\(" },
|
|
90
|
+
{ name: "fs.createWriteStream", family: "stream", source: "\\b(?:fs\\.)?createWriteStream\\s*\\(" },
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
const APPEND_FLAG_RE = /flags\s*:\s*['"]a['"]/;
|
|
94
|
+
|
|
95
|
+
interface Finding {
|
|
96
|
+
file: string;
|
|
97
|
+
line: number;
|
|
98
|
+
surface: string;
|
|
99
|
+
call: string;
|
|
100
|
+
policy: SurfacePolicy;
|
|
101
|
+
snippet: string;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Balanced-paren call-argument extraction
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
/**
|
|
108
|
+
* Given the index of the opening `(` of a call, return the substring from
|
|
109
|
+
* that `(` through its matching `)` (inclusive) — the call's full argument
|
|
110
|
+
* list, spanning multiple lines when the call is formatted that way.
|
|
111
|
+
* String/template literals are tracked so a stray paren inside a quoted
|
|
112
|
+
* value never desyncs the depth count.
|
|
113
|
+
*/
|
|
114
|
+
function extractCallArgsRegion(content: string, openParenIdx: number): string {
|
|
115
|
+
let depth = 0;
|
|
116
|
+
let inString: string | null = null;
|
|
117
|
+
let escaped = false;
|
|
118
|
+
for (let i = openParenIdx; i < content.length; i++) {
|
|
119
|
+
const ch = content[i] as string;
|
|
120
|
+
if (inString) {
|
|
121
|
+
if (escaped) {
|
|
122
|
+
escaped = false;
|
|
123
|
+
} else if (ch === "\\") {
|
|
124
|
+
escaped = true;
|
|
125
|
+
} else if (ch === inString) {
|
|
126
|
+
inString = null;
|
|
127
|
+
}
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (ch === '"' || ch === "'" || ch === "`") {
|
|
131
|
+
inString = ch;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (ch === "(") {
|
|
135
|
+
depth++;
|
|
136
|
+
} else if (ch === ")") {
|
|
137
|
+
depth--;
|
|
138
|
+
if (depth === 0) {
|
|
139
|
+
return content.slice(openParenIdx, i + 1);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return content.slice(openParenIdx);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function lineOfIndex(content: string, idx: number): number {
|
|
147
|
+
let line = 1;
|
|
148
|
+
for (let i = 0; i < idx; i++) {
|
|
149
|
+
if (content[i] === "\n") line++;
|
|
150
|
+
}
|
|
151
|
+
return line;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
// Inline-ignore parsing (mirrors lint_output_slop's convention)
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
type IgnoreScope = "file" | "line" | "next-line";
|
|
158
|
+
interface Ignore {
|
|
159
|
+
scope: IgnoreScope;
|
|
160
|
+
lineNum?: number;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function parseIgnores(lines: string[]): Ignore[] {
|
|
164
|
+
const ignores: Ignore[] = [];
|
|
165
|
+
for (let i = 0; i < lines.length; i++) {
|
|
166
|
+
const line = lines[i] ?? "";
|
|
167
|
+
if (/lint-governed-writes-disable-file/i.test(line)) {
|
|
168
|
+
ignores.push({ scope: "file" });
|
|
169
|
+
}
|
|
170
|
+
if (/lint-governed-writes-disable-line/i.test(line)) {
|
|
171
|
+
ignores.push({ scope: "line", lineNum: i + 1 });
|
|
172
|
+
}
|
|
173
|
+
if (/lint-governed-writes-disable-next-line/i.test(line)) {
|
|
174
|
+
ignores.push({ scope: "next-line", lineNum: i + 2 });
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return ignores;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function isIgnored(ignores: Ignore[], lineNum: number): boolean {
|
|
181
|
+
for (const ig of ignores) {
|
|
182
|
+
if (ig.scope === "file") return true;
|
|
183
|
+
if (ig.scope === "line" && ig.lineNum === lineNum) return true;
|
|
184
|
+
if (ig.scope === "next-line" && ig.lineNum === lineNum) return true;
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
// Per-file scanning
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
export function scanContent(content: string, relFile: string): Finding[] {
|
|
193
|
+
const findings: Finding[] = [];
|
|
194
|
+
const lines = content.split("\n");
|
|
195
|
+
const ignores = parseIgnores(lines);
|
|
196
|
+
|
|
197
|
+
for (const pat of CALL_PATTERNS) {
|
|
198
|
+
const re = new RegExp(pat.source, "g");
|
|
199
|
+
let m: RegExpExecArray | null;
|
|
200
|
+
while ((m = re.exec(content)) !== null) {
|
|
201
|
+
const openParenIdx = m.index + m[0].length - 1;
|
|
202
|
+
const region = extractCallArgsRegion(content, openParenIdx);
|
|
203
|
+
|
|
204
|
+
let kind: "rewrite" | "append";
|
|
205
|
+
if (pat.family === "stream") {
|
|
206
|
+
kind = APPEND_FLAG_RE.test(region) ? "append" : "rewrite";
|
|
207
|
+
} else {
|
|
208
|
+
kind = pat.family;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const lineNum = lineOfIndex(content, m.index);
|
|
212
|
+
if (isIgnored(ignores, lineNum)) continue;
|
|
213
|
+
|
|
214
|
+
for (const surface of PROTECTED_SURFACES) {
|
|
215
|
+
if (!region.includes(surface.fragment)) continue;
|
|
216
|
+
const isViolation =
|
|
217
|
+
surface.policy === "always-forbidden" ||
|
|
218
|
+
(surface.policy === "append-only" && kind === "rewrite");
|
|
219
|
+
if (!isViolation) continue;
|
|
220
|
+
|
|
221
|
+
findings.push({
|
|
222
|
+
file: relFile,
|
|
223
|
+
line: lineNum,
|
|
224
|
+
surface: surface.id,
|
|
225
|
+
call: pat.name,
|
|
226
|
+
policy: surface.policy,
|
|
227
|
+
snippet: (lines[lineNum - 1] ?? "").trim().slice(0, 160),
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return findings;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
// File discovery
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
const EXCLUDED_RELATIVE_FILES = new Set<string>(["_lib/fs_atomic.ts"]);
|
|
239
|
+
|
|
240
|
+
function* walkTsFiles(dir: string, root: string): Generator<string> {
|
|
241
|
+
if (!fs.existsSync(dir)) return;
|
|
242
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
243
|
+
if (entry.name === "node_modules" || entry.name === "dist") continue;
|
|
244
|
+
const full = path.join(dir, entry.name);
|
|
245
|
+
if (entry.isDirectory()) {
|
|
246
|
+
yield* walkTsFiles(full, root);
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
if (!entry.name.endsWith(".ts")) continue;
|
|
250
|
+
if (entry.name.endsWith(".test.ts")) continue;
|
|
251
|
+
const rel = path.relative(root, full).split(path.sep).join("/");
|
|
252
|
+
if (EXCLUDED_RELATIVE_FILES.has(rel)) continue;
|
|
253
|
+
yield full;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/** Scan every eligible `.ts` file under `scriptsDir`. */
|
|
258
|
+
export function scanScriptsDir(scriptsDir: string): Finding[] {
|
|
259
|
+
const findings: Finding[] = [];
|
|
260
|
+
for (const file of walkTsFiles(scriptsDir, scriptsDir)) {
|
|
261
|
+
let content: string;
|
|
262
|
+
try {
|
|
263
|
+
content = fs.readFileSync(file, "utf-8");
|
|
264
|
+
} catch {
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
const rel = path.relative(scriptsDir, file).split(path.sep).join("/");
|
|
268
|
+
findings.push(...scanContent(content, rel));
|
|
269
|
+
}
|
|
270
|
+
return findings;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// ---------------------------------------------------------------------------
|
|
274
|
+
// Main
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
277
|
+
if (argv.includes("-h") || argv.includes("--help")) {
|
|
278
|
+
process.stdout.write(
|
|
279
|
+
"usage: lint_governed_writes [--json] [--quiet]\n" +
|
|
280
|
+
" Flags direct fs write/append calls to protected ledger/governance\n" +
|
|
281
|
+
" surfaces (docs/CLAIMS.md, agents/memory/intake/, agents/runtime/state/audit/)\n" +
|
|
282
|
+
" that bypass the sanctioned atomic-write layer or the append-only contract.\n" +
|
|
283
|
+
" Exit 2 on any finding, 0 clean.\n",
|
|
284
|
+
);
|
|
285
|
+
return 0;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const jsonMode = argv.includes("--json");
|
|
289
|
+
const quiet = argv.includes("--quiet");
|
|
290
|
+
|
|
291
|
+
const findings = scanScriptsDir(SCRIPTS_DIR);
|
|
292
|
+
|
|
293
|
+
if (jsonMode) {
|
|
294
|
+
process.stdout.write(JSON.stringify(findings, null, 2) + "\n");
|
|
295
|
+
return findings.length > 0 ? 2 : 0;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (findings.length === 0) {
|
|
299
|
+
if (!quiet) {
|
|
300
|
+
process.stdout.write(
|
|
301
|
+
"✅ lint_governed_writes: clean — no direct writes to protected surfaces found.\n",
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
return 0;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
for (const f of findings) {
|
|
308
|
+
process.stdout.write(
|
|
309
|
+
`❌ ${f.file}:${f.line} [${f.surface}/${f.policy}] ${f.call} — ${f.snippet}\n`,
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
process.stdout.write(
|
|
313
|
+
`\nlint_governed_writes: ${findings.length} finding(s). Route the write through ` +
|
|
314
|
+
"write_atomic (src/scripts/_lib/fs_atomic.ts) or the surface's sanctioned append " +
|
|
315
|
+
"call, or use lint-governed-writes-disable-next-line -- reason.\n",
|
|
316
|
+
);
|
|
317
|
+
return 2;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Main-guard (realpath-compared, mirrors the repo convention — importing this
|
|
321
|
+
// module for its exports, e.g. from a test, never triggers a CLI run).
|
|
322
|
+
if (process.argv[1] !== undefined) {
|
|
323
|
+
try {
|
|
324
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
325
|
+
const argv1 = fs.realpathSync(path.resolve(process.argv[1]));
|
|
326
|
+
if (here === argv1) {
|
|
327
|
+
process.exit(main());
|
|
328
|
+
}
|
|
329
|
+
} catch {
|
|
330
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
331
|
+
if (import.meta.url === argvUrl) {
|
|
332
|
+
process.exit(main());
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
@@ -342,7 +342,13 @@ export function main(argv: readonly string[] | null = null): number {
|
|
|
342
342
|
return sl.report(findings, { check_label: 'hidden-unicode' });
|
|
343
343
|
}
|
|
344
344
|
|
|
345
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
346
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
347
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
345
348
|
function _isCliEntry(): boolean {
|
|
349
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
346
352
|
if (process.argv[1] === undefined) {
|
|
347
353
|
return false;
|
|
348
354
|
}
|
|
@@ -33,6 +33,8 @@ const SCHEMA = path.join(ROOT, 'docs', 'contracts', 'mcp-registry-manifest.schem
|
|
|
33
33
|
const MANIFEST = path.join(ROOT, 'dist', 'mcp', 'registry-manifest.json');
|
|
34
34
|
const ROW_MD = path.join(ROOT, 'dist', 'mcp', 'awesome-mcp-servers.row.md');
|
|
35
35
|
const CF_JSON = path.join(ROOT, 'dist', 'mcp', 'mcp-cloudflare-catalogue.json');
|
|
36
|
+
const SERVER_JSON = path.join(ROOT, 'dist', 'mcp', 'server.json');
|
|
37
|
+
const PKG_FILE = path.join(ROOT, 'package.json');
|
|
36
38
|
|
|
37
39
|
function _relToRoot(p: string): string {
|
|
38
40
|
return path.relative(ROOT, p);
|
|
@@ -293,7 +295,7 @@ function main(argv: readonly string[]): number {
|
|
|
293
295
|
throw e;
|
|
294
296
|
}
|
|
295
297
|
|
|
296
|
-
for (const p of [SCHEMA, MANIFEST, ROW_MD, CF_JSON]) {
|
|
298
|
+
for (const p of [SCHEMA, MANIFEST, ROW_MD, CF_JSON, SERVER_JSON]) {
|
|
297
299
|
if (!fs.existsSync(p)) {
|
|
298
300
|
return _fail(`missing: ${_relToRoot(p)}`);
|
|
299
301
|
}
|
|
@@ -324,6 +326,29 @@ function main(argv: readonly string[]): number {
|
|
|
324
326
|
return _fail(`mcp-cloudflare-catalogue.json: ${(e as Error).message}`);
|
|
325
327
|
}
|
|
326
328
|
|
|
329
|
+
// Official-registry payload (road-to-credible-install Phase 3): valid
|
|
330
|
+
// JSON, reverse-DNS name matching package.json `mcpName`, and version
|
|
331
|
+
// equal to package.json.version (the CI version-equality gate).
|
|
332
|
+
let server_payload: JsonObject;
|
|
333
|
+
try {
|
|
334
|
+
server_payload = JSON.parse(fs.readFileSync(SERVER_JSON, 'utf-8')) as JsonObject;
|
|
335
|
+
} catch (e) {
|
|
336
|
+
return _fail(`server.json: ${(e as Error).message}`);
|
|
337
|
+
}
|
|
338
|
+
const pkg_for_gate = JSON.parse(fs.readFileSync(PKG_FILE, 'utf-8')) as JsonObject;
|
|
339
|
+
if (server_payload['version'] !== pkg_for_gate['version']) {
|
|
340
|
+
return _fail(
|
|
341
|
+
`server.json version (${String(server_payload['version'])}) != package.json version ` +
|
|
342
|
+
`(${String(pkg_for_gate['version'])}) — re-run build:mcp-manifest`,
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
if (server_payload['name'] !== pkg_for_gate['mcpName']) {
|
|
346
|
+
return _fail(
|
|
347
|
+
`server.json name (${String(server_payload['name'])}) != package.json mcpName ` +
|
|
348
|
+
`(${String(pkg_for_gate['mcpName'])})`,
|
|
349
|
+
);
|
|
350
|
+
}
|
|
351
|
+
|
|
327
352
|
if (!args.quiet) {
|
|
328
353
|
const registries = (manifest as JsonObject)['registries'];
|
|
329
354
|
const count = Array.isArray(registries) ? registries.length : 0;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Personal-context tripwire over TRACKED memory files — invariant 3 of
|
|
4
|
+
* ADR-130 (`subject` axis, road-to-reachable-code-memory Phase 8).
|
|
5
|
+
*
|
|
6
|
+
* Hand-authored first-person / preference vocabulary (DE+EN) that indicates
|
|
7
|
+
* a `subject: user` record leaked into a tracked project artifact. On a hit
|
|
8
|
+
* it HALTS (exit 1) and NEVER rewrites — a human decides.
|
|
9
|
+
*
|
|
10
|
+
* ── Honest-null verdict (pre-registered in the roadmap, applied 2026-07-27):
|
|
11
|
+
* `--history` scanned the FULL git history of agents/memory/** at cut time —
|
|
12
|
+
* see the run record in agents/evidence/reports/spike-reachable-code-memory-s0.md.
|
|
13
|
+
* Per the pre-registration, ZERO fires across the full history means
|
|
14
|
+
* invariant 3 is UNFOUNDED: this script is retained as evidence + an
|
|
15
|
+
* on-demand tool, but it is deliberately NOT wired into CI; invariants 1–2
|
|
16
|
+
* (structural: lint_store_boundary + the memory_signal provenance gate)
|
|
17
|
+
* carry the boundary. A non-zero history result at cut time would have
|
|
18
|
+
* wired it as a vitest gate instead.
|
|
19
|
+
*
|
|
20
|
+
* Exit codes: 0 clean · 1 hits · 2 usage · 3 internal.
|
|
21
|
+
*/
|
|
22
|
+
import { execFileSync } from 'node:child_process';
|
|
23
|
+
import fs from 'node:fs';
|
|
24
|
+
import path from 'node:path';
|
|
25
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
26
|
+
|
|
27
|
+
const _HERE = fileURLToPath(import.meta.url);
|
|
28
|
+
export const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..');
|
|
29
|
+
|
|
30
|
+
/** Tracked memory surfaces the tripwire watches. */
|
|
31
|
+
export const TRACKED_GLOB_ROOT = 'agents/memory';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Hand-authored personal-context vocabulary, DE+EN. Deliberately narrow:
|
|
35
|
+
* first-person preference/identity statements — not every "I" (change-log
|
|
36
|
+
* prose like "I/O" or quoted user feedback in an incident record must not
|
|
37
|
+
* trip). Word-boundary anchored; case-insensitive.
|
|
38
|
+
*/
|
|
39
|
+
export const TRIPWIRE_PATTERNS: readonly RegExp[] = [
|
|
40
|
+
// EN — first-person preference / identity
|
|
41
|
+
/\bI (?:prefer|like|dislike|hate|want|always use|never use)\b/i,
|
|
42
|
+
/\bmy (?:name|email|address|phone|password|birthday|salary)\b/i,
|
|
43
|
+
/\bcall me\b/i,
|
|
44
|
+
// DE — first-person preference / identity (Du-form package: user prose)
|
|
45
|
+
/\bich (?:bevorzuge|mag|hasse|will|möchte|nutze immer|nutze nie)\b/i,
|
|
46
|
+
/\bmein[e]? (?:name|e-?mail|adresse|telefonnummer|passwort|geburtstag|gehalt)\b/i,
|
|
47
|
+
/\bnenn mich\b/i,
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export interface Hit {
|
|
51
|
+
file: string;
|
|
52
|
+
line: number;
|
|
53
|
+
pattern: string;
|
|
54
|
+
/** commit sha for --history hits; 'worktree' otherwise. */
|
|
55
|
+
ref: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function scanText(text: string, file: string, ref: string): Hit[] {
|
|
59
|
+
const hits: Hit[] = [];
|
|
60
|
+
const lines = text.split('\n');
|
|
61
|
+
for (let i = 0; i < lines.length; i++) {
|
|
62
|
+
for (const re of TRIPWIRE_PATTERNS) {
|
|
63
|
+
if (re.test(lines[i]!)) {
|
|
64
|
+
hits.push({ file, line: i + 1, pattern: re.source, ref });
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return hits;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function _git(root: string, args: string[]): string {
|
|
73
|
+
return execFileSync('git', args, { cwd: root, encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Scan the current worktree's tracked memory files. */
|
|
77
|
+
export function scanWorktree(root: string): Hit[] {
|
|
78
|
+
const out: Hit[] = [];
|
|
79
|
+
let files: string[];
|
|
80
|
+
try {
|
|
81
|
+
files = _git(root, ['ls-files', TRACKED_GLOB_ROOT]).split('\n').filter(Boolean);
|
|
82
|
+
} catch {
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
for (const f of files) {
|
|
86
|
+
const p = path.join(root, f);
|
|
87
|
+
if (!fs.existsSync(p)) continue;
|
|
88
|
+
out.push(...scanText(fs.readFileSync(p, 'utf8'), f, 'worktree'));
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Scan EVERY historical version of every tracked memory file (all commits). */
|
|
94
|
+
export function scanHistory(root: string): { hits: Hit[]; commits: number; blobs: number } {
|
|
95
|
+
const shas = _git(root, ['log', '--all', '--pretty=%H', '--', TRACKED_GLOB_ROOT])
|
|
96
|
+
.split('\n')
|
|
97
|
+
.filter(Boolean);
|
|
98
|
+
const hits: Hit[] = [];
|
|
99
|
+
const seenBlobs = new Set<string>();
|
|
100
|
+
let blobs = 0;
|
|
101
|
+
for (const sha of shas) {
|
|
102
|
+
let listing: string;
|
|
103
|
+
try {
|
|
104
|
+
listing = _git(root, ['ls-tree', '-r', sha, '--', TRACKED_GLOB_ROOT]);
|
|
105
|
+
} catch {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
for (const row of listing.split('\n').filter(Boolean)) {
|
|
109
|
+
// <mode> blob <hash>\t<path>
|
|
110
|
+
const m = /^\d+ blob ([0-9a-f]+)\t(.+)$/.exec(row);
|
|
111
|
+
if (!m) continue;
|
|
112
|
+
const [, blob, file] = m;
|
|
113
|
+
if (seenBlobs.has(blob!)) continue;
|
|
114
|
+
seenBlobs.add(blob!);
|
|
115
|
+
blobs++;
|
|
116
|
+
let content: string;
|
|
117
|
+
try {
|
|
118
|
+
content = _git(root, ['cat-file', 'blob', blob!]);
|
|
119
|
+
} catch {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
hits.push(...scanText(content, file!, sha.slice(0, 10)));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return { hits, commits: shas.length, blobs };
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function main(argv: string[] = process.argv.slice(2)): number {
|
|
129
|
+
let root = REPO_ROOT;
|
|
130
|
+
let history = false;
|
|
131
|
+
for (let i = 0; i < argv.length; i++) {
|
|
132
|
+
const a = argv[i]!;
|
|
133
|
+
if (a === '--root') root = argv[++i] ?? root;
|
|
134
|
+
else if (a.startsWith('--root=')) root = a.slice('--root='.length);
|
|
135
|
+
else if (a === '--history') history = true;
|
|
136
|
+
else if (a === '-h' || a === '--help') {
|
|
137
|
+
process.stdout.write('usage: lint_memory_tripwire [--root ROOT] [--history]\n');
|
|
138
|
+
return 0;
|
|
139
|
+
} else {
|
|
140
|
+
process.stderr.write(`lint_memory_tripwire: unknown argument ${a}\n`);
|
|
141
|
+
return 2;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
if (history) {
|
|
146
|
+
const { hits, commits, blobs } = scanHistory(root);
|
|
147
|
+
process.stdout.write(
|
|
148
|
+
`scanned ${commits} commit(s), ${blobs} unique blob(s) under ${TRACKED_GLOB_ROOT}\n`,
|
|
149
|
+
);
|
|
150
|
+
if (hits.length === 0) {
|
|
151
|
+
process.stdout.write('✅ zero tripwire fires across the full history.\n');
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
154
|
+
for (const h of hits) {
|
|
155
|
+
process.stdout.write(` 🔴 ${h.ref} ${h.file}:${h.line} (pattern: ${h.pattern})\n`);
|
|
156
|
+
}
|
|
157
|
+
process.stdout.write(`❌ ${hits.length} fire(s). HALT — never rewrite; a human decides.\n`);
|
|
158
|
+
return 1;
|
|
159
|
+
}
|
|
160
|
+
const hits = scanWorktree(root);
|
|
161
|
+
if (hits.length === 0) {
|
|
162
|
+
process.stdout.write('✅ tripwire clean on tracked memory files.\n');
|
|
163
|
+
return 0;
|
|
164
|
+
}
|
|
165
|
+
for (const h of hits) {
|
|
166
|
+
process.stdout.write(` 🔴 ${h.file}:${h.line} (pattern: ${h.pattern})\n`);
|
|
167
|
+
}
|
|
168
|
+
process.stdout.write(`❌ ${hits.length} fire(s). HALT — never rewrite; a human decides.\n`);
|
|
169
|
+
return 1;
|
|
170
|
+
} catch (exc) {
|
|
171
|
+
process.stderr.write(`lint_memory_tripwire: internal error: ${String(exc)}\n`);
|
|
172
|
+
return 3;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const _isMain = (() => {
|
|
177
|
+
if (process.argv[1] === undefined) return false;
|
|
178
|
+
try {
|
|
179
|
+
return pathToFileURL(fs.realpathSync(path.resolve(process.argv[1]))).href === import.meta.url;
|
|
180
|
+
} catch {
|
|
181
|
+
return pathToFileURL(path.resolve(process.argv[1])).href === import.meta.url;
|
|
182
|
+
}
|
|
183
|
+
})();
|
|
184
|
+
if (_isMain) {
|
|
185
|
+
process.exit(main());
|
|
186
|
+
}
|