@event4u/agent-config 3.3.0 → 4.2.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/.agent-src/README.md +2 -2
- package/.agent-src/commands/agent-handoff.md +31 -2
- package/.agent-src/commands/agent-status.md +5 -5
- package/.agent-src/commands/agents/audit.md +8 -8
- package/.agent-src/commands/agents/init.md +25 -1
- package/.agent-src/commands/agents/optimize.md +3 -3
- package/.agent-src/commands/agents/user.md +1 -1
- package/.agent-src/commands/agents.md +1 -1
- package/.agent-src/commands/analyze-reference-repo.md +1 -1
- package/.agent-src/commands/check-current-md.md +8 -8
- package/.agent-src/commands/{compress.md → condense.md} +55 -55
- package/.agent-src/commands/context/create.md +7 -4
- package/.agent-src/commands/context/refactor.md +3 -1
- package/.agent-src/commands/feature/dev.md +1 -1
- package/.agent-src/commands/feature/explore.md +1 -1
- package/.agent-src/commands/feature/plan.md +10 -8
- package/.agent-src/commands/feature/refactor.md +3 -1
- package/.agent-src/commands/feature/roadmap.md +7 -4
- package/.agent-src/commands/fix/portability.md +3 -3
- package/.agent-src/commands/fix/refs.md +4 -4
- package/.agent-src/commands/ghostwriter.md +2 -2
- package/.agent-src/commands/memory/learn-low-impact.md +3 -3
- package/.agent-src/commands/module/explore.md +34 -8
- package/.agent-src/commands/optimize/agents-dir.md +9 -7
- package/.agent-src/commands/optimize/augmentignore.md +2 -2
- package/.agent-src/commands/optimize/skills.md +9 -9
- package/.agent-src/commands/post-as.md +1 -1
- package/.agent-src/commands/project-analyze.md +2 -2
- package/.agent-src/commands/project-health.md +3 -2
- package/.agent-src/commands/research/deep.md +1 -1
- package/.agent-src/commands/research/report.md +1 -1
- package/.agent-src/commands/research.md +1 -1
- package/.agent-src/commands/roadmap/ai-council.md +1 -1
- package/.agent-src/commands/roadmap/create.md +9 -4
- package/.agent-src/commands/rule-compliance-audit.md +1 -1
- package/.agent-src/commands/upstream-contribute.md +14 -14
- package/.agent-src/commands/video/from-script.md +1 -1
- package/.agent-src/commands/video/scene.md +1 -1
- package/.agent-src/commands/video/stitch.md +1 -1
- package/.agent-src/commands/video/storyboard.md +1 -1
- package/.agent-src/commands/video.md +1 -1
- package/.agent-src/contexts/augment-infrastructure.md +1 -1
- package/.agent-src/contexts/authority/commit-mechanics.md +15 -0
- package/.agent-src/contexts/authority/kernel-rule-edits.md +3 -3
- package/.agent-src/contexts/authority/scope-mechanics.md +1 -1
- package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +28 -28
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +4 -4
- package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/.agent-src/contexts/contracts/artifact-engagement-flow.md +6 -6
- package/.agent-src/contexts/contracts/command-suggestion-flow.md +3 -3
- package/.agent-src/contexts/contracts/emergency-triage-block.md +4 -4
- package/.agent-src/contexts/contracts/frugality-charter.md +3 -3
- package/.agent-src/contexts/documentation-hierarchy.md +14 -7
- package/.agent-src/contexts/execution/autonomy-examples.md +1 -1
- package/.agent-src/contexts/execution/cheap-question-mechanics.md +39 -2
- package/.agent-src/contexts/execution/roadmap-process-loop.md +28 -5
- package/.agent-src/contexts/override-system.md +5 -5
- package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
- package/.agent-src/personas/advisors/first-principles.md +1 -1
- package/.agent-src/personas/hollywood-director.md +1 -1
- package/.agent-src/rules/architecture.md +5 -1
- package/.agent-src/rules/augment-edit-discipline.md +5 -5
- package/.agent-src/rules/augment-source-of-truth.md +15 -15
- package/.agent-src/rules/commit-conventions.md +1 -1
- package/.agent-src/rules/commit-policy.md +10 -0
- package/.agent-src/rules/domain-adoption-policy.md +3 -3
- package/.agent-src/rules/fast-path-marker-visibility.md +3 -3
- package/.agent-src/rules/finance-safety-floor.md +1 -1
- package/.agent-src/rules/framework-neutrality-in-generic-skills.md +8 -8
- package/.agent-src/rules/git-history-discipline.md +1 -1
- package/.agent-src/rules/improve-before-implement.md +2 -2
- package/.agent-src/rules/language-and-tone.md +2 -2
- package/.agent-src/rules/media-governance-routing.md +5 -5
- package/.agent-src/rules/no-attribution-footers.md +1 -0
- package/.agent-src/rules/no-cheap-questions.md +3 -0
- package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +111 -0
- package/.agent-src/rules/no-pr-progress-comments.md +118 -0
- package/.agent-src/rules/no-roadmap-references.md +3 -3
- package/.agent-src/rules/non-destructive-by-default.md +1 -1
- package/.agent-src/rules/persona-governance.md +3 -3
- package/.agent-src/rules/preservation-guard.md +15 -15
- package/.agent-src/rules/roadmap-ci-steps-policy.md +7 -3
- package/.agent-src/rules/rule-type-governance.md +1 -1
- package/.agent-src/rules/skill-quality.md +1 -1
- package/.agent-src/rules/{caveman-speak.md → telegraph-speak.md} +15 -15
- package/.agent-src/rules/token-optimizer-maintenance.md +6 -6
- package/.agent-src/skills/agent-docs-writing/SKILL.md +17 -11
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
- package/.agent-src/skills/check-refs/SKILL.md +2 -2
- package/.agent-src/skills/code-refactoring/SKILL.md +2 -2
- package/.agent-src/skills/command-writing/SKILL.md +19 -19
- package/.agent-src/skills/comp-banding/SKILL.md +1 -1
- package/.agent-src/skills/condense-memory/SKILL.md +131 -0
- package/.agent-src/skills/context-authoring/SKILL.md +2 -2
- package/.agent-src/skills/context-document/SKILL.md +5 -3
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +3 -3
- package/.agent-src/skills/description-assist/SKILL.md +2 -2
- package/.agent-src/skills/git-workflow/SKILL.md +1 -1
- package/.agent-src/skills/guideline-writing/SKILL.md +5 -5
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
- package/.agent-src/skills/lint-skills/SKILL.md +3 -3
- package/.agent-src/skills/md-language-check/SKILL.md +2 -2
- package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +138 -0
- package/.agent-src/skills/module-management/SKILL.md +166 -94
- package/.agent-src/skills/override-management/SKILL.md +1 -1
- package/.agent-src/skills/persona-writing/SKILL.md +5 -5
- package/.agent-src/skills/positioning-strategy/SKILL.md +1 -1
- package/.agent-src/skills/project-docs/SKILL.md +6 -4
- package/.agent-src/skills/readme-reviewer/SKILL.md +2 -2
- package/.agent-src/skills/roadmap-management/SKILL.md +13 -1
- package/.agent-src/skills/roadmap-writing/SKILL.md +4 -2
- package/.agent-src/skills/rule-refactor/SKILL.md +5 -5
- package/.agent-src/skills/rule-writing/SKILL.md +18 -18
- package/.agent-src/skills/script-writing/SKILL.md +1 -1
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +6 -6
- package/.agent-src/skills/skill-management/SKILL.md +21 -21
- package/.agent-src/skills/skill-reviewer/SKILL.md +2 -2
- package/.agent-src/skills/skill-writing/SKILL.md +8 -8
- package/.agent-src/skills/skill-writing/evals/triggers.json +1 -1
- package/.agent-src/skills/token-optimizer/SKILL.md +4 -4
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -1
- package/.agent-src/skills/upstream-contribute/SKILL.md +17 -17
- package/.agent-src/templates/AGENTS.md +1 -0
- package/.agent-src/templates/agent-settings.md +24 -13
- package/.agent-src/templates/agents/agent-project-settings.example.yml +61 -2
- package/.agent-src/templates/command.md +5 -5
- package/.agent-src/templates/contexts.md +1 -1
- package/.agent-src/templates/copilot-instructions.md +8 -8
- package/.agent-src/templates/features.md +1 -1
- package/.agent-src/templates/hooks/pre-commit-frontmatter +2 -2
- package/.agent-src/templates/hooks/pre-commit-roadmap-progress +3 -3
- package/.agent-src/templates/persona.md +2 -2
- package/.agent-src/templates/roadmaps.md +1 -1
- package/.agent-src/templates/rule.md +13 -13
- package/.agent-src/templates/scripts/memory_lookup.py +1 -1
- package/.agent-src/templates/scripts/memory_status.py +2 -2
- package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +195 -1
- package/.agent-src/templates/scripts/work_engine/orchestration.py +1 -1
- package/.agent-src/templates/skill-archive-note.md +5 -5
- package/.agent-src/templates/skill.md +1 -1
- package/.claude-plugin/marketplace.json +4 -4
- package/AGENTS.md +16 -17
- package/CHANGELOG.md +216 -3
- package/CONTRIBUTING.md +31 -12
- package/README.md +21 -12
- package/config/agent-settings.template.yml +22 -2
- package/config/discovery/unassigned-artefacts.yml +24 -24
- package/config/profiles/full.ini +1 -1
- package/dist/cli/agent-config.js +52 -3
- package/dist/cli/agent-config.js.map +1 -1
- package/dist/cli/commands/uiServe.js +9 -0
- package/dist/cli/commands/uiServe.js.map +1 -1
- package/dist/cli/registry.js +2 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +649 -606
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +439 -437
- package/dist/discovery/trust-report.md +5 -5
- package/dist/discovery/workspaces.json +450 -448
- package/dist/install/atomic.js +92 -0
- package/dist/install/atomic.js.map +1 -0
- package/dist/install/conflict.js +196 -0
- package/dist/install/conflict.js.map +1 -0
- package/dist/install/detect.js +218 -0
- package/dist/install/detect.js.map +1 -0
- package/dist/install/paths.js +82 -0
- package/dist/install/paths.js.map +1 -0
- package/dist/install/plan.js +157 -0
- package/dist/install/plan.js.map +1 -0
- package/dist/install/txlog.js +140 -0
- package/dist/install/txlog.js.map +1 -0
- package/dist/install/types.js +19 -0
- package/dist/install/types.js.map +1 -0
- package/dist/install/wizard-plan.js +184 -0
- package/dist/install/wizard-plan.js.map +1 -0
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +67 -19
- package/dist/server/app.js +6 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/routes/install.js +358 -0
- package/dist/server/routes/install.js.map +1 -0
- package/dist/server/routes/wizard.js +468 -32
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/routes/workspace.js +396 -0
- package/dist/server/routes/workspace.js.map +1 -0
- package/dist/server/schemas/settings.js +5 -3
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/index-BDAhhpDV.js +40 -0
- package/dist/ui/assets/index-BDAhhpDV.js.map +1 -0
- package/dist/ui/assets/index-BXZILUxe.css +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/MIGRATION.md +1 -1
- package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
- package/docs/adrs/router/0001-three-tier-routing.md +4 -4
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +1 -1
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +4 -4
- package/docs/adrs/{caveman → telegraph}/0001-default-off-until-bench.md +9 -9
- package/docs/adrs/telegraph/README.md +9 -0
- package/docs/architecture/augment-projection.md +4 -4
- package/docs/architecture/claude-bundle.md +1 -1
- package/docs/architecture/current-onboard-baseline.md +3 -3
- package/docs/architecture/multi-tool-projection.md +10 -10
- package/docs/architecture/source-projection.md +27 -27
- package/docs/architecture.md +19 -15
- package/docs/archive/CHANGELOG-pre-2.11.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.15.0.md +3 -3
- package/docs/archive/CHANGELOG-pre-2.16.0.md +1 -1
- package/docs/archive/CHANGELOG-pre-2.2.0.md +70 -70
- package/docs/archive/CHANGELOG-pre-2.20.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.25.0.md +15 -15
- package/docs/archive/CHANGELOG-pre-3.0.0.md +4 -4
- package/docs/archive/CHANGELOG-pre-3.1.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-3.2.0.md +3 -3
- package/docs/benchmark.md +65 -0
- package/docs/benchmarks.md +16 -16
- package/docs/catalog.md +17 -15
- package/docs/contracts/CHANGELOG-conventions.md +1 -1
- package/docs/contracts/STABILITY.md +2 -2
- package/docs/contracts/adoption-signal-floor.md +110 -0
- package/docs/contracts/adr-chat-history-split.md +4 -4
- package/docs/contracts/adr-command-suggestion.md +4 -4
- package/docs/contracts/adr-gtm-context-spine.md +1 -1
- package/docs/contracts/adr-implement-ticket-runtime.md +4 -4
- package/docs/contracts/adr-install-user-type-axis.md +1 -1
- package/docs/contracts/adr-layout.md +2 -2
- package/docs/contracts/adr-product-ui-track.md +10 -10
- package/docs/contracts/adr-user-types-axis.md +3 -3
- package/docs/contracts/adr-wing4-context-spine.md +1 -1
- package/docs/contracts/agent-memory-contract.md +3 -3
- package/docs/contracts/agents-md-tech-stack.md +2 -2
- package/docs/contracts/ai-council-config.md +2 -2
- package/docs/contracts/at-rest-encryption.md +4 -0
- package/docs/contracts/audit-log-v1.md +1 -1
- package/docs/contracts/benchmark-ab-contract.md +101 -0
- package/docs/contracts/benchmark-corpus-spec.md +1 -1
- package/docs/contracts/branch-protection-policy.md +98 -0
- package/docs/contracts/ci-cost-budget.md +106 -0
- package/docs/contracts/ci-green-floor.md +141 -0
- package/docs/contracts/command-clusters.md +6 -6
- package/docs/contracts/command-surface-tiers.md +2 -2
- package/docs/contracts/command-taxonomy.md +2 -2
- package/docs/contracts/{compression-default-kill-criterion.md → condensation-default-kill-criterion.md} +29 -29
- package/docs/contracts/config-presets.md +1 -1
- package/docs/contracts/context-paths.md +3 -3
- package/docs/contracts/context-spine.md +1 -1
- package/docs/contracts/cost-summary-schema.md +12 -12
- package/docs/contracts/cross-wing-handoff.md +4 -4
- package/docs/contracts/daily-workspace.md +4 -0
- package/docs/contracts/decision-trace-v1.md +2 -2
- package/docs/contracts/discovery-manifest.md +4 -4
- package/docs/contracts/explain-modes.md +4 -0
- package/docs/contracts/file-ownership-matrix.json +3493 -3318
- package/docs/contracts/file-ownership-matrix.md +3 -3
- package/docs/contracts/frontmatter-contract.md +4 -4
- package/docs/contracts/ghostwriter-schema.md +3 -3
- package/docs/contracts/gui-wizard.md +110 -97
- package/docs/contracts/harness-expectations.md +123 -0
- package/docs/contracts/host-agent-protocol.md +4 -0
- package/docs/contracts/implement-ticket-flow.md +9 -9
- package/docs/contracts/install-scopes.md +77 -0
- package/docs/contracts/iron-law-overrides.txt +1 -1
- package/docs/contracts/kernel-membership.md +26 -26
- package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
- package/docs/contracts/linter-structural-model.md +2 -2
- package/docs/contracts/load-context-budget-model.md +4 -4
- package/docs/contracts/load-context-schema.md +13 -13
- package/docs/contracts/local-analytics.md +4 -0
- package/docs/contracts/local-knowledge-ingestion.md +1 -1
- package/docs/contracts/mcp-cloud-scope.md +2 -2
- package/docs/contracts/mcp-phase-1-scope.md +3 -3
- package/docs/contracts/measurement-baseline.md +5 -5
- package/docs/contracts/mental-models.md +30 -30
- package/docs/contracts/multi-tool-projection-fidelity.md +4 -4
- package/docs/contracts/namespace.md +4 -4
- package/docs/contracts/orchestration-dsl-v1.md +7 -7
- package/docs/contracts/package-self-orientation.md +12 -12
- package/docs/contracts/persona-schema.md +6 -6
- package/docs/contracts/pilot/language-and-tone.md +1 -1
- package/docs/contracts/plain-language-surface.md +117 -0
- package/docs/contracts/profile-system.md +3 -3
- package/docs/contracts/release-pr-gating.md +103 -0
- package/docs/contracts/role-experience.md +3 -3
- package/docs/contracts/rule-classification.md +13 -13
- package/docs/contracts/rule-interactions.md +4 -4
- package/docs/contracts/rule-interactions.yml +30 -30
- package/docs/contracts/rule-priority-hierarchy.md +13 -13
- package/docs/contracts/rule-router.md +2 -2
- package/docs/contracts/safety-model.md +1 -1
- package/docs/contracts/skill-distribution-channels.md +61 -0
- package/docs/contracts/skill-domains.md +2 -2
- package/docs/contracts/smoke-contracts.md +5 -5
- package/docs/contracts/telegraph-telemetry.md +83 -0
- package/docs/contracts/trust-and-safety.md +5 -5
- package/docs/contracts/ui-stack-extension.md +7 -7
- package/docs/contracts/ui-track-flow.md +9 -9
- package/docs/contracts/user-type-schema.md +4 -4
- package/docs/contracts/workflow-packs.md +4 -4
- package/docs/contracts/workspace-documents.md +4 -0
- package/docs/customization.md +28 -8
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +6 -6
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -11
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +2 -2
- package/docs/decisions/ADR-004-rule-governance-pruning.md +4 -4
- package/docs/decisions/ADR-005-subagent-worktrees.md +7 -7
- package/docs/decisions/ADR-011-domain-pack-readiness.md +6 -6
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +3 -3
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +3 -3
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +10 -10
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +6 -6
- package/docs/decisions/ADR-019-router-json-dist-location.md +2 -2
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +2 -2
- package/docs/decisions/ADR-021-deployment-shape.md +3 -3
- package/docs/decisions/ADR-022-daily-workspace-decomposition.md +1 -1
- package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +2 -2
- package/docs/decisions/ADR-028-root-layout.md +7 -7
- package/docs/decisions/ADR-029-multi-workspace-deferred.md +2 -2
- package/docs/decisions/ADR-rule-kernel-and-router.md +5 -5
- package/docs/deploy/connector-setup.md +2 -2
- package/docs/deploy/policy-cookbook.md +2 -2
- package/docs/deploy/team-deployment-posture.md +20 -0
- package/docs/development.md +17 -17
- package/docs/distribution/registries.md +32 -0
- package/docs/distribution/registry-submissions.md +85 -0
- package/docs/distribution/telemetry-schema.md +1 -1
- package/docs/getting-started-by-role.md +45 -3
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
- package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
- package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
- package/docs/guidelines/agent-infra/direct-answers-demos.md +1 -1
- package/docs/guidelines/agent-infra/first-principles.md +2 -2
- package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
- package/docs/guidelines/agent-infra/layered-settings.md +56 -2
- package/docs/guidelines/agent-infra/mental-models.md +3 -3
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +2 -2
- package/docs/guidelines/agent-infra/rule-type-governance.md +1 -1
- package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +2 -2
- package/docs/guidelines/agent-infra/six-hats.md +3 -3
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +1 -1
- package/docs/guidelines/augment-portability-patterns.md +4 -4
- package/docs/guidelines/cross-role-handoff.md +2 -2
- package/docs/guidelines/php/php-coding-patterns.md +1 -1
- package/docs/guidelines/prompt-templates.md +6 -6
- package/docs/maintainers/dev-mode.md +1 -1
- package/docs/mcp.md +1 -1
- package/docs/parity/bench.json +3 -3
- package/docs/parity/ruflo.md +2 -2
- package/docs/profiles.md +11 -11
- package/docs/quality.md +11 -11
- package/docs/safety.md +3 -3
- package/docs/setup/mcp-client-config.md +1 -1
- package/docs/setup/mcp-r2-bootstrap.md +1 -1
- package/docs/setup/mcp-server-docker.md +3 -3
- package/docs/setup/per-ide/windsurf.md +1 -1
- package/docs/skills-catalog.md +8 -7
- package/docs/troubleshooting.md +1 -1
- package/docs/walkthroughs/daily-workspace-a11y.md +87 -0
- package/llms.txt +7 -6
- package/package.json +1 -1
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_archive/README.md +2 -2
- package/scripts/_archive/_backfill_skill_domains.py +3 -3
- package/scripts/_archive/_bootstrap_tier_frontmatter.py +3 -3
- package/scripts/_archive/_p43_bodies.py +10 -10
- package/scripts/_archive/{_p43_compress.py → _p43_condense.py} +5 -5
- package/scripts/_archive/_p4_migrate.py +7 -7
- package/scripts/_archive/_phase2_shim_helper.py +1 -1
- package/scripts/_archive/_pilot_council_question.py +5 -5
- package/scripts/_cli/explain_last/inputs.py +1 -1
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/_lib/agent_settings.py +195 -1
- package/scripts/_lib/agent_src.py +19 -19
- package/scripts/_lib/bench_ab_cache.py +162 -0
- package/scripts/_lib/bench_ab_scoring.py +209 -0
- package/scripts/_lib/{bench_caveman.py → bench_telegraph.py} +21 -21
- package/scripts/_lib/{bench_caveman_report.py → bench_telegraph_report.py} +21 -21
- package/scripts/_lib/claude_desktop_bundler.py +5 -5
- package/scripts/_lib/module_detection.py +223 -0
- package/scripts/_lib/scope_guard.sh +162 -0
- package/scripts/_phase4_bucket.py +3 -3
- package/scripts/_pilot_measure.py +4 -4
- package/scripts/_tmp_scan_framework_leakage.py +1 -1
- package/scripts/adoption_report.py +195 -0
- package/scripts/adoption_snapshot.py +219 -0
- package/scripts/adoption_status.py +166 -0
- package/scripts/ai-video/lib/parse-blueprint.sh +1 -1
- package/scripts/ai_council/advisors.py +5 -5
- package/scripts/ai_council/compile_corpus.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +3 -3
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +2 -2
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +3 -3
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +6 -6
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +6 -6
- package/scripts/annotate_discovery.py +13 -13
- package/scripts/apply_modules_config.py +290 -0
- package/scripts/audit_adr_coverage.py +2 -2
- package/scripts/audit_auto_rules.py +2 -2
- package/scripts/audit_cloud_compatibility.py +3 -3
- package/scripts/audit_command_surface.py +9 -9
- package/scripts/audit_likelihood.py +2 -2
- package/scripts/audit_user_type_axis.py +2 -2
- package/scripts/bench_ab_cache_dispatch.py +68 -0
- package/scripts/bench_ab_clone.py +170 -0
- package/scripts/bench_ab_diff.py +227 -0
- package/scripts/bench_ab_integrity.py +143 -0
- package/scripts/bench_ab_run.py +235 -0
- package/scripts/bench_ab_task_runner.py +369 -0
- package/scripts/bench_ab_tracka_run.py +202 -0
- package/scripts/{bench_compress_memory.py → bench_condense_memory.py} +16 -16
- package/scripts/bench_run.py +33 -33
- package/scripts/bench_runner.py +2 -2
- package/scripts/bootstrap.sh +99 -0
- package/scripts/build_cloud_bundle.py +6 -6
- package/scripts/build_discovery_manifest.py +7 -7
- package/scripts/build_linear_digest.py +3 -3
- package/scripts/build_rule_trigger_matrix.py +8 -8
- package/scripts/chat_history.py +5 -5
- package/scripts/check_always_budget.py +11 -5
- package/scripts/check_augment_description_cap.py +3 -3
- package/scripts/check_cluster_patterns.py +2 -2
- package/scripts/check_command_count_messaging.py +3 -3
- package/scripts/{check_compression.py → check_condensation.py} +34 -34
- package/scripts/{check_compressed_paths.py → check_condensed_paths.py} +8 -8
- package/scripts/check_context_paths.py +7 -7
- package/scripts/check_council_layout.py +2 -2
- package/scripts/check_council_references.py +9 -9
- package/scripts/check_iron_law_prominence.py +2 -2
- package/scripts/check_kernel_rule_bundle.py +2 -2
- package/scripts/check_module_management_neutral.py +149 -0
- package/scripts/check_no_roadmap_refs.py +9 -9
- package/scripts/check_portability.py +3 -3
- package/scripts/check_public_catalog_links.py +4 -4
- package/scripts/check_references.py +7 -6
- package/scripts/check_release_pr_shape.py +112 -0
- package/scripts/check_reply_consistency.py +3 -3
- package/scripts/check_safety_floor_untouched.py +1 -1
- package/scripts/check_template_pin_drift.py +5 -5
- package/scripts/check_token_optimizer_freshness.py +3 -3
- package/scripts/ci_status.py +301 -0
- package/scripts/ci_time_ratio.py +1 -1
- package/scripts/cleanup_other_scope.sh +146 -0
- package/scripts/compile_router.py +10 -10
- package/scripts/{compress.py → condense.py} +64 -64
- package/scripts/condense.sh +18 -0
- package/scripts/{compress_memory.py → condense_memory.py} +33 -33
- package/scripts/config/presets.py +2 -2
- package/scripts/config/profiles.py +1 -1
- package/scripts/cost_by_conversation.py +3 -3
- package/scripts/cost_summary.py +7 -7
- package/scripts/count_token_optimizer_usage.sh +1 -1
- package/scripts/gen_discovery_baseline.py +5 -5
- package/scripts/generate_index.py +6 -6
- package/scripts/generate_ownership_matrix.py +10 -10
- package/scripts/generate_pack_manifests.py +1 -1
- package/scripts/ghostwriter_fixture_allowlist.txt +1 -1
- package/scripts/install +3 -3
- package/scripts/install-hooks.sh +6 -6
- package/scripts/install.py +273 -45
- package/scripts/install.sh +187 -1
- package/scripts/inventory_frontmatter.py +2 -2
- package/scripts/iron_law_sha.py +3 -3
- package/scripts/lint_agents_layout.py +14 -7
- package/scripts/lint_agents_md.py +4 -4
- package/scripts/lint_archived_skills.py +3 -3
- package/scripts/lint_artefact_frontmatter.py +2 -2
- package/scripts/lint_bench_ab.py +172 -0
- package/scripts/lint_bench_corpus.py +1 -1
- package/scripts/lint_command_tiers.py +5 -5
- package/scripts/lint_context_spine_usage.py +1 -1
- package/scripts/lint_framework_leakage.py +7 -7
- package/scripts/lint_framework_leakage_allowlist.json +152 -84
- package/scripts/lint_ghostwriter_source.py +3 -3
- package/scripts/lint_handoffs.py +1 -1
- package/scripts/lint_load_context.py +11 -11
- package/scripts/lint_media_policy_linkage.py +5 -5
- package/scripts/lint_namespace.py +1 -1
- package/scripts/lint_no_new_atomic_commands.py +2 -2
- package/scripts/lint_orchestration_dsl.py +1 -1
- package/scripts/lint_pack_boundaries.py +2 -2
- package/scripts/lint_persona_governance.py +4 -4
- package/scripts/lint_role_experiences.py +237 -0
- package/scripts/lint_rule_interactions.py +2 -2
- package/scripts/lint_rule_tiers.py +1 -1
- package/scripts/lint_trust_coherence.py +2 -2
- package/scripts/mcp_registry_submit.sh +187 -0
- package/scripts/mcp_server/tools.py +1 -1
- package/scripts/measure_frugality_savings.py +10 -10
- package/scripts/measure_patterns.py +1 -1
- package/scripts/measure_projection_bytes.py +5 -5
- package/scripts/measure_rule_budget.py +3 -3
- package/scripts/measure_skill_reduction.py +1 -1
- package/scripts/memory_lookup.py +1 -1
- package/scripts/memory_status.py +2 -2
- package/scripts/migrate_command_suggestions.py +3 -3
- package/scripts/mine_session.py +1 -1
- package/scripts/move_artefact.py +3 -3
- package/scripts/new_skill.py +2 -2
- package/scripts/pack_mcp_content.py +9 -9
- package/scripts/plan_physical_move.py +6 -6
- package/scripts/print_required_checks.py +196 -0
- package/scripts/probe_skill_registration.py +413 -0
- package/scripts/propose_modules_config.py +145 -0
- package/scripts/prototype_lint_contradictions.py +1 -1
- package/scripts/recruit_preflight.sh +152 -0
- package/scripts/refine_ticket_detect.py +3 -3
- package/scripts/release.py +20 -0
- package/scripts/render_benchmark_md.py +308 -0
- package/scripts/roadmap_progress_hook.py +1 -1
- package/scripts/run_skill_evals.py +2 -2
- package/scripts/runtime_registry.py +4 -4
- package/scripts/schemas/command.schema.json +4 -4
- package/scripts/schemas/rule.schema.json +5 -5
- package/scripts/schemas/skill.schema.json +3 -3
- package/scripts/schemas/user-type.schema.json +1 -1
- package/scripts/score_skill_selection.py +1 -1
- package/scripts/skill_collision_clusters.py +2 -2
- package/scripts/skill_linter.py +81 -81
- package/scripts/skill_overlap.py +5 -5
- package/scripts/skill_tools/audit_persona_coverage.py +2 -2
- package/scripts/skill_tools/audit_user_type_coverage.py +2 -2
- package/scripts/skill_tools/run_block_d_eval.py +1 -1
- package/scripts/skill_tools/score_skill_relevance.py +1 -1
- package/scripts/skill_tools/suggest_skill_for_task.py +1 -1
- package/scripts/skill_trigger_eval.py +3 -3
- package/scripts/smoke/kernel.sh +7 -1
- package/scripts/smoke/router.sh +5 -5
- package/scripts/smoke/skills.sh +1 -1
- package/scripts/smoke_quickstart.py +1 -1
- package/scripts/snapshot_agent_outputs.py +3 -3
- package/scripts/spotcheck_thin_root.py +1 -1
- package/scripts/{caveman_stats.py → telegraph_stats.py} +18 -18
- package/scripts/update_counts.py +1 -1
- package/scripts/validate_decision_engine.py +1 -1
- package/scripts/validate_frontmatter.py +1 -1
- package/scripts/validate_safe_paths.py +3 -3
- package/scripts/{validate_caveman_carveouts.py → validate_telegraph_carveouts.py} +7 -7
- package/scripts/verify_roadmap_closure.py +6 -6
- package/templates/consumer-settings/ONBOARDING.md +41 -0
- package/.agent-src/commands/install-via-agent.md +0 -129
- package/.agent-src/skills/compress-memory/SKILL.md +0 -131
- package/dist/ui/assets/index-D-DY1ywI.js +0 -35
- package/dist/ui/assets/index-D-DY1ywI.js.map +0 -1
- package/dist/ui/assets/index-Dqfhmg-d.css +0 -1
- package/docs/adrs/caveman/README.md +0 -9
- package/docs/contracts/caveman-telemetry.md +0 -83
- package/scripts/compress.sh +0 -18
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Pull the four public adoption signals into a single dated JSONL row.
|
|
3
|
+
|
|
4
|
+
Phase D Step 2 of ``road-to-adoption-proof-and-ci-green.md``.
|
|
5
|
+
Signals (per ``docs/contracts/adoption-signal-floor.md``):
|
|
6
|
+
|
|
7
|
+
1. npm install count — last 7 days, full lifetime.
|
|
8
|
+
2. npm version distribution — latest published version.
|
|
9
|
+
3. GitHub stars / forks — current count.
|
|
10
|
+
4. Topic-search rank — best-rank position for the two
|
|
11
|
+
project-scoped topics (`agent-skills`, `cinematic-ai-video`).
|
|
12
|
+
|
|
13
|
+
Output: one JSONL row appended to
|
|
14
|
+
``agents/runtime/metrics/adoption-snapshots.jsonl``. Each row carries
|
|
15
|
+
an ISO-8601 ``snapshot_at`` timestamp + the four signal payloads.
|
|
16
|
+
|
|
17
|
+
CLI:
|
|
18
|
+
|
|
19
|
+
scripts/adoption_snapshot.py [--out <path>] [--no-network]
|
|
20
|
+
|
|
21
|
+
--no-network Skip the four HTTP calls; emit a row with
|
|
22
|
+
``error: "skipped"`` on each signal. Used by
|
|
23
|
+
the pytest path so tests never hit the wire.
|
|
24
|
+
--out Override the output JSONL path (default:
|
|
25
|
+
``agents/runtime/metrics/adoption-snapshots.jsonl``).
|
|
26
|
+
|
|
27
|
+
Exit codes:
|
|
28
|
+
|
|
29
|
+
0 — row appended successfully.
|
|
30
|
+
1 — IO failure writing the JSONL.
|
|
31
|
+
2 — every signal failed (network outage; the row is appended but
|
|
32
|
+
annotated, so trend reports can spot the outage).
|
|
33
|
+
"""
|
|
34
|
+
from __future__ import annotations
|
|
35
|
+
|
|
36
|
+
import argparse
|
|
37
|
+
import datetime as dt
|
|
38
|
+
import json
|
|
39
|
+
import os
|
|
40
|
+
import sys
|
|
41
|
+
from pathlib import Path
|
|
42
|
+
from typing import Any
|
|
43
|
+
from urllib.error import URLError, HTTPError
|
|
44
|
+
from urllib.request import Request, urlopen
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
48
|
+
DEFAULT_OUT = REPO_ROOT / "agents" / "runtime" / "metrics" / "adoption-snapshots.jsonl"
|
|
49
|
+
|
|
50
|
+
NPM_PACKAGE = "@event4u/agent-config"
|
|
51
|
+
NPM_DOWNLOADS_URL = f"https://api.npmjs.org/downloads/range/last-week/{NPM_PACKAGE}"
|
|
52
|
+
NPM_REGISTRY_URL = f"https://registry.npmjs.org/{NPM_PACKAGE.replace('/', '%2F')}"
|
|
53
|
+
GH_REPO = "event4u-app/agent-config"
|
|
54
|
+
GH_REPO_URL = f"https://api.github.com/repos/{GH_REPO}"
|
|
55
|
+
GH_TOPICS = ("agent-skills", "cinematic-ai-video")
|
|
56
|
+
GH_SEARCH_URL_TEMPLATE = "https://api.github.com/search/repositories?q=topic:{topic}&sort=stars&order=desc&per_page=100"
|
|
57
|
+
|
|
58
|
+
TIMEOUT_S = 10
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _utc_now_iso() -> str:
|
|
62
|
+
return dt.datetime.now(dt.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _http_get_json(url: str, headers: dict[str, str] | None = None) -> dict[str, Any]:
|
|
66
|
+
req = Request(url, headers=headers or {})
|
|
67
|
+
with urlopen(req, timeout=TIMEOUT_S) as resp:
|
|
68
|
+
body = resp.read().decode("utf-8")
|
|
69
|
+
return json.loads(body)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def fetch_npm_downloads() -> dict[str, Any]:
|
|
73
|
+
try:
|
|
74
|
+
data = _http_get_json(NPM_DOWNLOADS_URL)
|
|
75
|
+
downloads = data.get("downloads", [])
|
|
76
|
+
total_7d = sum(d.get("downloads", 0) for d in downloads if isinstance(d, dict))
|
|
77
|
+
return {"package": NPM_PACKAGE, "last_7_days": total_7d, "source": "npm"}
|
|
78
|
+
except (URLError, HTTPError, ValueError) as exc:
|
|
79
|
+
return {"package": NPM_PACKAGE, "error": str(exc)[:120], "source": "npm"}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def fetch_npm_version() -> dict[str, Any]:
|
|
83
|
+
try:
|
|
84
|
+
data = _http_get_json(NPM_REGISTRY_URL)
|
|
85
|
+
latest = data.get("dist-tags", {}).get("latest", "")
|
|
86
|
+
versions = list(data.get("versions", {}).keys())
|
|
87
|
+
return {
|
|
88
|
+
"latest": latest,
|
|
89
|
+
"version_count": len(versions),
|
|
90
|
+
"source": "npm-registry",
|
|
91
|
+
}
|
|
92
|
+
except (URLError, HTTPError, ValueError) as exc:
|
|
93
|
+
return {"error": str(exc)[:120], "source": "npm-registry"}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def fetch_github_stars() -> dict[str, Any]:
|
|
97
|
+
try:
|
|
98
|
+
headers = {"Accept": "application/vnd.github+json"}
|
|
99
|
+
token = os.environ.get("GITHUB_TOKEN") or os.environ.get("GH_TOKEN")
|
|
100
|
+
if token:
|
|
101
|
+
headers["Authorization"] = f"Bearer {token}"
|
|
102
|
+
data = _http_get_json(GH_REPO_URL, headers=headers)
|
|
103
|
+
return {
|
|
104
|
+
"repo": GH_REPO,
|
|
105
|
+
"stars": data.get("stargazers_count", 0),
|
|
106
|
+
"forks": data.get("forks_count", 0),
|
|
107
|
+
"watchers": data.get("watchers_count", 0),
|
|
108
|
+
"source": "github-repo",
|
|
109
|
+
}
|
|
110
|
+
except (URLError, HTTPError, ValueError) as exc:
|
|
111
|
+
return {"repo": GH_REPO, "error": str(exc)[:120], "source": "github-repo"}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def fetch_topic_rank() -> dict[str, Any]:
|
|
115
|
+
out: dict[str, Any] = {"source": "github-search"}
|
|
116
|
+
for topic in GH_TOPICS:
|
|
117
|
+
try:
|
|
118
|
+
headers = {"Accept": "application/vnd.github+json"}
|
|
119
|
+
token = os.environ.get("GITHUB_TOKEN") or os.environ.get("GH_TOKEN")
|
|
120
|
+
if token:
|
|
121
|
+
headers["Authorization"] = f"Bearer {token}"
|
|
122
|
+
data = _http_get_json(GH_SEARCH_URL_TEMPLATE.format(topic=topic), headers=headers)
|
|
123
|
+
items = data.get("items", [])
|
|
124
|
+
rank = next(
|
|
125
|
+
(i + 1 for i, item in enumerate(items) if item.get("full_name") == GH_REPO),
|
|
126
|
+
None,
|
|
127
|
+
)
|
|
128
|
+
out[topic] = {
|
|
129
|
+
"rank": rank,
|
|
130
|
+
"total_results": data.get("total_count", 0),
|
|
131
|
+
}
|
|
132
|
+
except (URLError, HTTPError, ValueError) as exc:
|
|
133
|
+
out[topic] = {"error": str(exc)[:120]}
|
|
134
|
+
return out
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def collect_signals(skip_network: bool) -> dict[str, Any]:
|
|
138
|
+
if skip_network:
|
|
139
|
+
skipped = {"error": "skipped", "source": "skipped"}
|
|
140
|
+
return {
|
|
141
|
+
"npm_downloads": skipped,
|
|
142
|
+
"npm_version": skipped,
|
|
143
|
+
"github_stars": skipped,
|
|
144
|
+
"topic_rank": skipped,
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
"npm_downloads": fetch_npm_downloads(),
|
|
148
|
+
"npm_version": fetch_npm_version(),
|
|
149
|
+
"github_stars": fetch_github_stars(),
|
|
150
|
+
"topic_rank": fetch_topic_rank(),
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def build_row(signals: dict[str, Any]) -> dict[str, Any]:
|
|
155
|
+
return {
|
|
156
|
+
"snapshot_at": _utc_now_iso(),
|
|
157
|
+
"schema": "adoption-snapshot/v0",
|
|
158
|
+
"signals": signals,
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def append_row(out_path: Path, row: dict[str, Any]) -> None:
|
|
163
|
+
out_path.parent.mkdir(parents=True, exist_ok=True)
|
|
164
|
+
with out_path.open("a", encoding="utf-8") as fh:
|
|
165
|
+
fh.write(json.dumps(row) + "\n")
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def all_signals_failed(signals: dict[str, Any]) -> bool:
|
|
169
|
+
"""True when every signal (or every topic in topic_rank) errored.
|
|
170
|
+
|
|
171
|
+
A signal block carries `error` when its HTTP call failed. For
|
|
172
|
+
`topic_rank`, the outer dict does NOT carry `error`; instead each
|
|
173
|
+
nested per-topic entry does. The outage predicate counts the
|
|
174
|
+
composite as a failure when every nested topic errored.
|
|
175
|
+
"""
|
|
176
|
+
for name, value in signals.items():
|
|
177
|
+
if not isinstance(value, dict):
|
|
178
|
+
return False # Unknown shape — treat as success to be conservative.
|
|
179
|
+
if name == "topic_rank":
|
|
180
|
+
# Outage when every nested topic errored.
|
|
181
|
+
nested = [v for k, v in value.items() if k != "source" and isinstance(v, dict)]
|
|
182
|
+
if not nested:
|
|
183
|
+
return False
|
|
184
|
+
if any("error" not in v for v in nested):
|
|
185
|
+
return False
|
|
186
|
+
else:
|
|
187
|
+
if "error" not in value:
|
|
188
|
+
return False
|
|
189
|
+
return True
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
|
|
193
|
+
p = argparse.ArgumentParser(prog="adoption_snapshot")
|
|
194
|
+
p.add_argument("--out", type=Path, default=DEFAULT_OUT, help="JSONL output path.")
|
|
195
|
+
p.add_argument(
|
|
196
|
+
"--no-network",
|
|
197
|
+
action="store_true",
|
|
198
|
+
help="Skip the four HTTP calls (used by the pytest path).",
|
|
199
|
+
)
|
|
200
|
+
return p.parse_args(argv)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def main(argv: list[str] | None = None) -> int:
|
|
204
|
+
args = parse_args(argv)
|
|
205
|
+
signals = collect_signals(skip_network=args.no_network)
|
|
206
|
+
row = build_row(signals)
|
|
207
|
+
try:
|
|
208
|
+
append_row(args.out, row)
|
|
209
|
+
except OSError as exc:
|
|
210
|
+
print(f"error: failed to append snapshot: {exc}", file=sys.stderr)
|
|
211
|
+
return 1
|
|
212
|
+
print(f"appended snapshot @ {row['snapshot_at']} → {args.out}")
|
|
213
|
+
if not args.no_network and all_signals_failed(signals):
|
|
214
|
+
return 2
|
|
215
|
+
return 0
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
if __name__ == "__main__":
|
|
219
|
+
sys.exit(main())
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""One-screen adoption dashboard for the maintainer's weekly review.
|
|
3
|
+
|
|
4
|
+
Phase C Step 6 of ``road-to-adoption-proof-and-ci-green.md``. Prints
|
|
5
|
+
three things in one short block:
|
|
6
|
+
|
|
7
|
+
1. Registry-submission status — counts per status from
|
|
8
|
+
``docs/distribution/registry-submissions.md``.
|
|
9
|
+
2. Recruit-session report count — files matching
|
|
10
|
+
``agents/recruit-sessions/[0-9]*.md`` (excludes template / runbook /
|
|
11
|
+
findings).
|
|
12
|
+
3. Latest required-check colour on ``main`` — shells out to
|
|
13
|
+
``scripts/ci_status.py`` (zero-cost; per-shape required set).
|
|
14
|
+
|
|
15
|
+
CLI:
|
|
16
|
+
|
|
17
|
+
scripts/adoption_status.py [--json] [--branch main]
|
|
18
|
+
|
|
19
|
+
Exit codes:
|
|
20
|
+
|
|
21
|
+
0 — printed successfully (status itself does not gate the exit).
|
|
22
|
+
1 — IO error reading the registry-submissions sheet.
|
|
23
|
+
|
|
24
|
+
Anchored to:
|
|
25
|
+
|
|
26
|
+
- ``docs/distribution/registry-submissions.md`` § Tracking rows.
|
|
27
|
+
- ``agents/recruit-sessions/_runbook.md`` § Post-session.
|
|
28
|
+
- ``docs/contracts/ci-green-floor.md`` § Blocking set.
|
|
29
|
+
"""
|
|
30
|
+
from __future__ import annotations
|
|
31
|
+
|
|
32
|
+
import argparse
|
|
33
|
+
import json
|
|
34
|
+
import re
|
|
35
|
+
import shutil
|
|
36
|
+
import subprocess
|
|
37
|
+
import sys
|
|
38
|
+
from pathlib import Path
|
|
39
|
+
from typing import Iterable
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
43
|
+
REGISTRY_DOC = REPO_ROOT / "docs" / "distribution" / "registry-submissions.md"
|
|
44
|
+
RECRUIT_DIR = REPO_ROOT / "agents" / "recruit-sessions"
|
|
45
|
+
|
|
46
|
+
STATUS_VALUES = ("pending", "submitted", "accepted", "rejected", "stalled")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def parse_registry_statuses(text: str) -> dict[str, int]:
|
|
50
|
+
"""Parse the `Tracking rows` table; return counts per status value."""
|
|
51
|
+
counts = {s: 0 for s in STATUS_VALUES}
|
|
52
|
+
in_table = False
|
|
53
|
+
for line in text.splitlines():
|
|
54
|
+
if line.startswith("## Tracking rows"):
|
|
55
|
+
in_table = True
|
|
56
|
+
continue
|
|
57
|
+
if in_table and line.startswith("## "):
|
|
58
|
+
break
|
|
59
|
+
if not in_table:
|
|
60
|
+
continue
|
|
61
|
+
if not line.startswith("|"):
|
|
62
|
+
continue
|
|
63
|
+
cells = [c.strip() for c in line.split("|")[1:-1]]
|
|
64
|
+
if len(cells) < 4:
|
|
65
|
+
continue
|
|
66
|
+
# Header / separator rows have the literal "Registry" or "---" in cell 1.
|
|
67
|
+
if cells[0] in ("#", "---") or cells[1] in ("Registry", "---"):
|
|
68
|
+
continue
|
|
69
|
+
status_cell = cells[3].strip("`")
|
|
70
|
+
if status_cell in counts:
|
|
71
|
+
counts[status_cell] += 1
|
|
72
|
+
return counts
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def count_recruit_reports(reports_dir: Path) -> int:
|
|
76
|
+
"""Count files matching `<NN>-<role>.md` under recruit-sessions/."""
|
|
77
|
+
if not reports_dir.exists():
|
|
78
|
+
return 0
|
|
79
|
+
pattern = re.compile(r"^\d{2}-[a-z][a-z0-9-]*\.md$")
|
|
80
|
+
return sum(1 for p in reports_dir.iterdir() if p.is_file() and pattern.match(p.name))
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def ci_status_color(branch: str) -> tuple[str, str]:
|
|
84
|
+
"""Shell out to `scripts/ci_status.py --json` to find the required-set color."""
|
|
85
|
+
script = REPO_ROOT / "scripts" / "ci_status.py"
|
|
86
|
+
if not script.exists():
|
|
87
|
+
return ("unknown", "ci_status.py not present — Phase A Step 6 not landed")
|
|
88
|
+
if shutil.which("gh") is None:
|
|
89
|
+
return ("unknown", "gh CLI not on PATH — cannot probe required-check set")
|
|
90
|
+
try:
|
|
91
|
+
proc = subprocess.run(
|
|
92
|
+
["python3", str(script), "--branch", branch, "--json", "--no-phantom-resolve"],
|
|
93
|
+
capture_output=True,
|
|
94
|
+
text=True,
|
|
95
|
+
timeout=15,
|
|
96
|
+
)
|
|
97
|
+
except subprocess.TimeoutExpired:
|
|
98
|
+
return ("unknown", f"ci_status.py timed out probing branch {branch}")
|
|
99
|
+
if proc.returncode not in (0, 1):
|
|
100
|
+
return ("unknown", f"ci_status.py exit={proc.returncode}: {proc.stderr.strip()[:80]}")
|
|
101
|
+
try:
|
|
102
|
+
data = json.loads(proc.stdout or "{}")
|
|
103
|
+
except json.JSONDecodeError:
|
|
104
|
+
return ("unknown", "ci_status.py output not parseable as JSON")
|
|
105
|
+
if data.get("red"):
|
|
106
|
+
return ("red", f"{len(data['red'])} required check(s) red")
|
|
107
|
+
if data.get("missing"):
|
|
108
|
+
return ("amber", f"{len(data['missing'])} check(s) missing on {branch}")
|
|
109
|
+
return ("green", f"{len(data.get('green', []))} required check(s) green")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def render_text(registry_counts: dict[str, int], reports: int, ci: tuple[str, str], branch: str) -> str:
|
|
113
|
+
color_emoji = {"green": "🟢", "amber": "🟡", "red": "🔴", "unknown": "⚪"}
|
|
114
|
+
lines = []
|
|
115
|
+
lines.append("Adoption status (one-screen)")
|
|
116
|
+
lines.append("============================")
|
|
117
|
+
lines.append("")
|
|
118
|
+
lines.append("Registry submissions:")
|
|
119
|
+
for status in STATUS_VALUES:
|
|
120
|
+
lines.append(f" {status:10} {registry_counts[status]}")
|
|
121
|
+
lines.append("")
|
|
122
|
+
lines.append(f"Recruit-session reports filed: {reports}")
|
|
123
|
+
lines.append("")
|
|
124
|
+
lines.append(f"Required-check status on {branch}: {color_emoji[ci[0]]} {ci[0]} — {ci[1]}")
|
|
125
|
+
return "\n".join(lines)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def render_json(registry_counts: dict[str, int], reports: int, ci: tuple[str, str], branch: str) -> str:
|
|
129
|
+
return json.dumps(
|
|
130
|
+
{
|
|
131
|
+
"registries": registry_counts,
|
|
132
|
+
"recruit_reports": reports,
|
|
133
|
+
"ci": {"branch": branch, "color": ci[0], "summary": ci[1]},
|
|
134
|
+
},
|
|
135
|
+
indent=2,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
|
|
140
|
+
p = argparse.ArgumentParser(prog="adoption_status")
|
|
141
|
+
p.add_argument("--json", action="store_true", help="Emit JSON instead of text.")
|
|
142
|
+
p.add_argument("--branch", default="main", help="Branch to probe for CI color (default: main).")
|
|
143
|
+
return p.parse_args(argv)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def main(argv: list[str] | None = None) -> int:
|
|
147
|
+
args = parse_args(argv)
|
|
148
|
+
|
|
149
|
+
try:
|
|
150
|
+
registry_text = REGISTRY_DOC.read_text(encoding="utf-8")
|
|
151
|
+
except OSError as exc:
|
|
152
|
+
print(f"error: failed to read {REGISTRY_DOC}: {exc}", file=sys.stderr)
|
|
153
|
+
return 1
|
|
154
|
+
registry_counts = parse_registry_statuses(registry_text)
|
|
155
|
+
reports = count_recruit_reports(RECRUIT_DIR)
|
|
156
|
+
ci = ci_status_color(args.branch)
|
|
157
|
+
|
|
158
|
+
if args.json:
|
|
159
|
+
print(render_json(registry_counts, reports, ci, args.branch))
|
|
160
|
+
else:
|
|
161
|
+
print(render_text(registry_counts, reports, ci, args.branch))
|
|
162
|
+
return 0
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
if __name__ == "__main__":
|
|
166
|
+
sys.exit(main())
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# stdout. Pure POSIX-compatible bash (no associative arrays, runs
|
|
5
5
|
# on macOS bash 3.2); jq required for JSON safety.
|
|
6
6
|
#
|
|
7
|
-
# Schema: .agent-src.
|
|
7
|
+
# Schema: .agent-src.uncondensed/skills/scene-expander/scene-blueprint.schema.yaml
|
|
8
8
|
# Contract: scripts/ai-video/lib/adapter-contract.md
|
|
9
9
|
#
|
|
10
10
|
# Usage:
|
|
@@ -13,7 +13,7 @@ This module owns:
|
|
|
13
13
|
- `plan_advisor_swap()` — walks the enabled advisors, reads their
|
|
14
14
|
persona files, and returns the per-provider plan map consumed by
|
|
15
15
|
`orchestrator.consult()` / `estimate()` and by the CLI.
|
|
16
|
-
- `resolve_persona_text()` — reads a persona file with
|
|
16
|
+
- `resolve_persona_text()` — reads a persona file with condensed-tree
|
|
17
17
|
preference and frontmatter strip.
|
|
18
18
|
|
|
19
19
|
Cross-validation against the members block already ran at config load
|
|
@@ -75,14 +75,14 @@ def resolve_persona_text(
|
|
|
75
75
|
) -> tuple[str, dict]:
|
|
76
76
|
"""Read a persona file, returning ``(body, frontmatter)``.
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
same projection the rest of the package consumes.
|
|
80
|
-
(``.agent-src.
|
|
78
|
+
Condensed tree (``.agent-src/``) wins so production runs match the
|
|
79
|
+
same projection the rest of the package consumes. Uncondensed tree
|
|
80
|
+
(``.agent-src.uncondensed/``) is the fallback for in-repo
|
|
81
81
|
development before ``task sync`` has projected the file.
|
|
82
82
|
"""
|
|
83
83
|
candidates = [
|
|
84
84
|
repo_root / ".agent-src" / persona_path,
|
|
85
|
-
repo_root / ".agent-src.
|
|
85
|
+
repo_root / ".agent-src.uncondensed" / persona_path,
|
|
86
86
|
]
|
|
87
87
|
for candidate in candidates:
|
|
88
88
|
if candidate.exists():
|
|
@@ -8,7 +8,7 @@ through the hardened
|
|
|
8
8
|
:func:`scripts.ai_council.low_impact_corpus.parse_corpus_strict`
|
|
9
9
|
parser and writes a YAML lockfile that becomes the **runtime**
|
|
10
10
|
source-of-truth. The pattern mirrors `.agent-src/` vs
|
|
11
|
-
`.agent-src.
|
|
11
|
+
`.agent-src.uncondensed/`: human edits Markdown, `task consistency`
|
|
12
12
|
enforces lockfile parity via the same ``git diff --quiet`` gate.
|
|
13
13
|
|
|
14
14
|
YAML schema (`schema_version: 1`)::
|
|
@@ -40,8 +40,8 @@ REPO_ROOT = Path(__file__).resolve().parents[4]
|
|
|
40
40
|
ARTEFACTS = [
|
|
41
41
|
REPO_ROOT / "docs/contracts/load-context-budget-model.md",
|
|
42
42
|
REPO_ROOT / "agents/settings/contexts/budget-v2-matrix.md",
|
|
43
|
-
REPO_ROOT / ".agent-src.
|
|
44
|
-
REPO_ROOT / ".agent-src.
|
|
43
|
+
REPO_ROOT / ".agent-src.uncondensed/rules/direct-answers.md",
|
|
44
|
+
REPO_ROOT / ".agent-src.uncondensed/rules/no-cheap-questions.md",
|
|
45
45
|
]
|
|
46
46
|
|
|
47
47
|
ORIGINAL_ASK = (
|
|
@@ -60,7 +60,7 @@ REVIEW_PROMPT = """\
|
|
|
60
60
|
Phase 4 selected two 4d-trim paths from a fixed option set documented
|
|
61
61
|
in `budget-v2-matrix.md`. The matrix evaluated 4a (demote→auto), 4b
|
|
62
62
|
(merge), 4c (shared-context, locked at 3a Model (b) literal — no-op),
|
|
63
|
-
and 4d (
|
|
63
|
+
and 4d (condense prose) for every touchable always-rule. Safety-floor
|
|
64
64
|
rules (scope-control, non-destructive-by-default, commit-policy,
|
|
65
65
|
agent-authority) were untouchable. Outcome-untested rules were
|
|
66
66
|
restricted to 4d only per the Phase 4.0 inputs gate.
|
|
@@ -93,8 +93,8 @@ follow-ups Phase 1+2 closed) produced converging findings.
|
|
|
93
93
|
too heavy — auditable but not consumable for normal feature work,
|
|
94
94
|
needs complexity standard; (3) always-budget headroom 1,552 chars
|
|
95
95
|
(96.8% utilization) — slimming hebel exhausted, new strategy needed
|
|
96
|
-
(demote / merge / hard-
|
|
97
|
-
(4) slow-rollout protocol
|
|
96
|
+
(demote / merge / hard-condense / shared-context amortization);
|
|
97
|
+
(4) slow-rollout protocol condensed under autonomy mandate;
|
|
98
98
|
(5) one-off scripts accumulating in scripts/ai_council/.
|
|
99
99
|
- P0 before merge: PR description rewrite, one-off-script decision,
|
|
100
100
|
honest budget block, Phase 2A as finding.
|
|
@@ -7,7 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
# Scripts that accept --quiet (verified: 20 total = 3 pre-existing + 17 patched).
|
|
8
8
|
QUIET_AWARE = {
|
|
9
9
|
"check_always_budget", "check_one_off_location", "check_safety_floor_untouched",
|
|
10
|
-
"check_augmentignore", "check_command_count_messaging", "
|
|
10
|
+
"check_augmentignore", "check_command_count_messaging", "check_condensed_paths",
|
|
11
11
|
"check_council_layout", "check_council_references", "check_iron_law_prominence",
|
|
12
12
|
"check_md_language", "check_memory_proposal", "check_public_catalog_links",
|
|
13
13
|
"check_reply_consistency", "check_roadmap_trackable",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Phase 10.7 baseline — runs only verbosity-aware patched-script tasks.
|
|
3
3
|
# Skips broken-on-dirty-tree tasks (consistency, check-index, validate-schema).
|
|
4
4
|
# This subset is what actually demonstrates the --quiet effect.
|
|
5
|
-
TASKS="check-
|
|
5
|
+
TASKS="check-condensed-paths check-refs check-portability lint-roadmap-complexity check-public-catalog-links check-command-count check-cluster-patterns lint-rule-interactions lint-load-context check-context-paths check-no-roadmap-refs check-council-references lint-one-off-age check-reply-consistency check-iron-law-prominence check-always-budget check-one-off-location lint-rule-budget lint-skills lint-rule-tiers lint-handoffs lint-marketplace lint-examples"
|
|
6
6
|
|
|
7
7
|
run() {
|
|
8
8
|
local label=$1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Phase 10.7 baseline measurement: post-consistency task ci subset.
|
|
3
|
-
TASKS="counts-check check-index check-router check-
|
|
3
|
+
TASKS="counts-check check-index check-router check-condensation check-condensed-paths check-refs check-token-optimizer-freshness check-portability check-examples-shape lint-roadmap-complexity check-public-links check-public-catalog-links check-command-count lint-no-new-atomic-commands check-cluster-patterns lint-rule-interactions lint-load-context check-context-paths check-no-roadmap-refs check-council-references lint-one-off-age check-ownership-matrix check-reply-consistency check-iron-law-prominence check-always-budget check-one-off-location validate-schema lint-rule-budget lint-skills lint-rule-tiers lint-handoffs lint-hook-manifest lint-showcase-sessions lint-marketplace"
|
|
4
4
|
|
|
5
5
|
echo "=== MINIMAL ==="
|
|
6
6
|
AGENT_SCRIPT_VERBOSITY=minimal task $TASKS 2>&1 > /tmp/ci-min.log
|
|
@@ -41,8 +41,8 @@ from scripts.ai_council.session import SessionManifest, save as save_session
|
|
|
41
41
|
|
|
42
42
|
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
43
43
|
ARTEFACTS = [
|
|
44
|
-
REPO_ROOT / ".agent-src.
|
|
45
|
-
REPO_ROOT / ".agent-src.
|
|
44
|
+
REPO_ROOT / ".agent-src.uncondensed/rules/non-destructive-by-default.md",
|
|
45
|
+
REPO_ROOT / ".agent-src.uncondensed/contexts/authority/destructive-mechanics.md",
|
|
46
46
|
]
|
|
47
47
|
|
|
48
48
|
ORIGINAL_ASK = (
|
|
@@ -192,7 +192,7 @@ def main() -> int:
|
|
|
192
192
|
|
|
193
193
|
manifest = SessionManifest(
|
|
194
194
|
mode="files",
|
|
195
|
-
artefact=".agent-src.
|
|
195
|
+
artefact=".agent-src.uncondensed/rules/non-destructive-by-default.md",
|
|
196
196
|
original_ask=ORIGINAL_ASK,
|
|
197
197
|
members=[f"{r.provider}/{r.model}" for r in final_round],
|
|
198
198
|
rounds=len(rounds_collected),
|
|
@@ -16,7 +16,7 @@ from itertools import combinations
|
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
|
|
18
18
|
ROOT = Path(__file__).resolve().parent.parent
|
|
19
|
-
RULES_DIR = ROOT / ".agent-src.
|
|
19
|
+
RULES_DIR = ROOT / ".agent-src.uncondensed/rules"
|
|
20
20
|
|
|
21
21
|
RULES = [
|
|
22
22
|
"chat-history-cadence",
|
|
@@ -45,12 +45,12 @@ from scripts.ai_council.session import SessionManifest, save as save_session
|
|
|
45
45
|
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
46
46
|
ARTEFACTS = [
|
|
47
47
|
REPO_ROOT / "docs/contracts/load-context-budget-model.md",
|
|
48
|
-
REPO_ROOT / ".agent-src.
|
|
49
|
-
REPO_ROOT / ".agent-src.
|
|
50
|
-
REPO_ROOT / ".agent-src.
|
|
51
|
-
REPO_ROOT / ".agent-src.
|
|
52
|
-
REPO_ROOT / ".agent-src.
|
|
53
|
-
REPO_ROOT / ".agent-src.
|
|
48
|
+
REPO_ROOT / ".agent-src.uncondensed/rules/language-and-tone.md",
|
|
49
|
+
REPO_ROOT / ".agent-src.uncondensed/rules/ask-when-uncertain.md",
|
|
50
|
+
REPO_ROOT / ".agent-src.uncondensed/rules/direct-answers.md",
|
|
51
|
+
REPO_ROOT / ".agent-src.uncondensed/contexts/communication/rules-always/language-and-tone-mechanics.md",
|
|
52
|
+
REPO_ROOT / ".agent-src.uncondensed/contexts/communication/rules-always/ask-when-uncertain-mechanics.md",
|
|
53
|
+
REPO_ROOT / ".agent-src.uncondensed/contexts/communication/rules-always/direct-answers-mechanics.md",
|
|
54
54
|
]
|
|
55
55
|
|
|
56
56
|
ORIGINAL_ASK = (
|
|
@@ -37,7 +37,7 @@ Rebalancing means restoring intelligence without re-inflating Always-rules.
|
|
|
37
37
|
|
|
38
38
|
## Actual numbers from the PR #34 diff
|
|
39
39
|
|
|
40
|
-
Scope: git diff origin/main...HEAD, path .agent-src.
|
|
40
|
+
Scope: git diff origin/main...HEAD, path .agent-src.uncondensed/rules/
|
|
41
41
|
|
|
42
42
|
- 35 files changed: 202 insertions, 204 deletions => net -2 lines total.
|
|
43
43
|
- Largest delta: language-and-tone.md 37 ins / 96 del. The 96 lines were
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
Parses agents/settings/contexts/rule-trigger-matrix.md, emits tmp/tier-classification.md,
|
|
5
5
|
and inserts a `tier:` frontmatter key into every rule under
|
|
6
|
-
.agent-src.
|
|
6
|
+
.agent-src.uncondensed/rules/. Idempotent — re-runs are a no-op when a rule
|
|
7
7
|
already declares the same tier value.
|
|
8
8
|
|
|
9
9
|
Lifecycle: scripts/_one_off/2026-05/. Purge eligible after 2026-08-04 per
|
|
@@ -17,8 +17,8 @@ from pathlib import Path
|
|
|
17
17
|
|
|
18
18
|
REPO = Path(__file__).resolve().parents[3]
|
|
19
19
|
MATRIX = REPO / "agents" / "contexts" / "rule-trigger-matrix.md"
|
|
20
|
-
RULES_DIR = REPO / ".agent-src.
|
|
21
|
-
|
|
20
|
+
RULES_DIR = REPO / ".agent-src.uncondensed" / "rules"
|
|
21
|
+
CONDENSED_RULES_DIR = REPO / ".agent-src" / "rules"
|
|
22
22
|
SPREADSHEET = REPO / "tmp" / "tier-classification.md"
|
|
23
23
|
|
|
24
24
|
VALID_TIERS = {"1", "2a", "2b", "3", "safety-floor", "mechanical-already"}
|
|
@@ -161,9 +161,9 @@ def main() -> int:
|
|
|
161
161
|
for name, (tier, _) in classifications.items():
|
|
162
162
|
result = apply_tier(RULES_DIR / name, tier)
|
|
163
163
|
counts[result] += 1
|
|
164
|
-
|
|
165
|
-
if
|
|
166
|
-
mirror_counts[apply_tier(
|
|
164
|
+
condensed = CONDENSED_RULES_DIR / name
|
|
165
|
+
if condensed.exists():
|
|
166
|
+
mirror_counts[apply_tier(condensed, tier)] += 1
|
|
167
167
|
else:
|
|
168
168
|
mirror_counts["skipped"] += 1
|
|
169
169
|
print(
|