@event4u/agent-config 14.10.0 → 14.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +161 -208
- package/README.md +1 -1
- package/dist/agent-src/commands/design.md +88 -0
- package/dist/agent-src/commands/project/analyze.md +47 -0
- package/dist/agent-src/commands/review/changes.md +67 -6
- package/dist/agent-src/commands/roadmap/create.md +49 -0
- package/dist/agent-src/commands/roadmap/next.md +27 -11
- package/dist/agent-src/commands/roadmap/process-full.md +14 -0
- package/dist/agent-src/commands/video/from-script.md +60 -3
- package/dist/agent-src/commands/video/stitch.md +14 -0
- package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
- package/dist/agent-src/contexts/execution/evidence-discipline.md +26 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
- package/dist/agent-src/rules/active-remediation.md +3 -3
- package/dist/agent-src/rules/code-provenance.md +2 -2
- package/dist/agent-src/rules/context-hygiene.md +13 -33
- package/dist/agent-src/rules/council-availability.md +2 -2
- package/dist/agent-src/rules/decision-revisit-gate.md +3 -1
- package/dist/agent-src/rules/design-fidelity.md +18 -0
- package/dist/agent-src/rules/design-review-after-ui-write.md +2 -2
- package/dist/agent-src/rules/evaluator-independence.md +56 -44
- package/dist/agent-src/rules/fix-what-you-see.md +9 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +14 -20
- package/dist/agent-src/rules/missing-skill-recovery.md +13 -1
- package/dist/agent-src/rules/playbook-precedence.md +105 -0
- package/dist/agent-src/rules/recurring-criticism.md +3 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +14 -13
- package/dist/agent-src/rules/scale-discipline.md +24 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -2
- package/dist/agent-src/rules/settings-ask-protocol.md +2 -2
- package/dist/agent-src/rules/ui-audit-gate.md +27 -15
- package/dist/agent-src/rules/untrusted-input-defense.md +2 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
- package/dist/agent-src/skills/adr-create/SKILL.md +7 -0
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +33 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +17 -3
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +31 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +19 -0
- package/dist/agent-src/skills/alerting-doctrine/SKILL.md +225 -0
- package/dist/agent-src/skills/authz-review/SKILL.md +0 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +32 -0
- package/dist/agent-src/skills/brand/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-audit/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-identity/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-strategy/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -0
- package/dist/agent-src/skills/check-refs/SKILL.md +3 -0
- package/dist/agent-src/skills/code-refactoring/SKILL.md +45 -1
- package/dist/agent-src/skills/code-review/SKILL.md +75 -5
- package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
- package/dist/agent-src/skills/command-writing/SKILL.md +35 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +3 -0
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +3 -0
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +10 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -0
- package/dist/agent-src/skills/design-intelligence/SKILL.md +3 -0
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +36 -35
- package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +1 -0
- package/dist/agent-src/skills/design-review/SKILL.md +79 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +41 -0
- package/dist/agent-src/skills/design-system-capture/SKILL.md +35 -40
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +50 -0
- package/dist/agent-src/skills/design-tokens/SKILL.md +3 -0
- package/dist/agent-src/skills/design-variations/SKILL.md +3 -0
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +3 -0
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +3 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +28 -4
- package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
- package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
- package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
- package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
- package/dist/agent-src/skills/iconography/SKILL.md +3 -0
- package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
- package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
- package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -0
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +270 -0
- package/dist/agent-src/skills/laravel-migration/SKILL.md +3 -0
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +3 -0
- package/dist/agent-src/skills/lint-skills/SKILL.md +3 -0
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +3 -0
- package/dist/agent-src/skills/logging-monitoring/SKILL.md +234 -51
- package/dist/agent-src/skills/logo-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/md-language-check/SKILL.md +3 -0
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +149 -0
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +6 -0
- package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
- package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
- package/dist/agent-src/skills/override-management/SKILL.md +3 -0
- package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
- package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
- package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
- package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +23 -0
- package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
- package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +81 -33
- package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
- package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +2 -2
- package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
- package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
- package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +4 -0
- package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
- package/dist/agent-src/skills/skill-writing/references/procedure.md +24 -2
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +203 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
- package/dist/agent-src/skills/terraform/SKILL.md +3 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
- package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +17 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
- package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
- package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/playbook.md +75 -0
- package/dist/agent-src/templates/roadmaps.md +37 -0
- package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
- package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
- package/dist/cli/commands/uiAudit.js +221 -0
- package/dist/cli/commands/uiRender.js +206 -0
- package/dist/cli/main.js +22 -1
- package/dist/cli/mcp/content.js +64 -1
- package/dist/cli/mcp/dispatch.js +175 -10
- package/dist/cli/registry.js +3 -0
- package/dist/cli-delegate/{chunk-G23AT6GD.js → chunk-DMSZHXZS.js} +57 -1
- package/dist/cli-delegate/{chunk-77GR3VD4.js → chunk-FF7WAFMR.js} +58 -3
- package/dist/cli-delegate/{chunk-YM4GZDJG.js → chunk-JCW7ZLHK.js} +10 -0
- package/dist/cli-delegate/{chunk-H4VIVD4C.js → chunk-JJA2QEWA.js} +413 -391
- package/dist/cli-delegate/{chunk-PLSG6UL5.js → chunk-K4FFODTS.js} +341 -204
- package/dist/cli-delegate/{chunk-B2ERU2VA.js → chunk-WOKWX5PL.js} +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +8 -6
- package/dist/cli-delegate/cmd_conformance.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +70 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +362 -127
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +18 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -6
- package/dist/hooks/dispatch.js +2575 -1472
- package/dist/install/install.mjs +800 -708
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1685 -1250
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/lean_projection_mode.js +40 -0
- package/dist/scripts/_lib/scoped_projection.js +84 -0
- package/dist/scripts/_lib/ui_surface.js +89 -0
- package/dist/scripts/condense.js +6 -10
- package/dist/scripts/project_thin_rules.js +40 -2
- package/dist/server/schemas/settings.js +6 -0
- package/dist/shared/skillRanking.js +159 -0
- package/docs/contracts/provider-lifecycle.md +47 -18
- package/docs/contracts/settings-classes.md +35 -5
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
- package/docs/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
- package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/docs/guidelines/code-clarity.md +21 -0
- package/docs/guidelines/design-antipatterns.md +4 -2
- package/docs/guidelines/design-asset-discipline.md +38 -0
- package/docs/guidelines/design-fidelity-mechanics.md +45 -29
- package/docs/guidelines/design-handover-extraction.md +35 -5
- package/docs/guidelines/design-modes.md +41 -1
- package/docs/guidelines/monorepo-antipatterns.md +141 -0
- package/docs/guidelines/redundancy-taxonomy.md +180 -0
- package/llms.txt +50 -39
- package/package.json +6 -2
- package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
- package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
- package/src/config/agent-settings.template.yml +44 -0
- package/src/config/assurance-capability-registry.json +223 -0
- package/src/config/assurance-threshold-budget.json +65 -0
- package/src/config/budgets.yml +19 -0
- package/src/config/ci-local-parity.yml +29 -0
- package/src/config/discovery/prompt-patterns.yml +56 -0
- package/src/config/discovery/unassigned-artefacts.yml +2 -0
- package/src/config/dispatch-economy-metrics.json +4 -2
- package/src/config/estate-count-budget.json +8 -3
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +392 -8
- package/src/config/gate-violation-baselines.json +76 -72
- package/src/config/hook-latency-budget.json +1 -0
- package/src/config/hook-token-budget.json +137 -125
- package/src/config/pack-size-budget.json +39 -10
- package/src/config/preamble-payload-budget.json +97 -71
- package/src/config/quorum-attendance-budget.json +12 -4
- package/src/config/routing-coverage-seed.json +29 -0
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-enforcement-baseline.json +0 -1
- package/src/config/rule-stub-ceilings.json +112 -91
- package/src/config/suggestion-capture.json +28 -0
- package/src/config/surface-matrix.yml +21 -2
- package/src/config/web-launch-readiness.json +188 -0
- package/src/scripts/_cli/cmd_doctor.ts +15 -16
- package/src/scripts/_cli/doctor_install_mode.ts +49 -0
- package/src/scripts/_cli/doctor_overrides.ts +154 -0
- package/src/scripts/_dispatch.bash +17 -0
- package/src/scripts/_lib/as_of.ts +412 -0
- package/src/scripts/_lib/exec_evidence.ts +7 -0
- package/src/scripts/_lib/gate_baseline.ts +150 -1
- package/src/scripts/_lib/hook_settings.ts +33 -0
- package/src/scripts/_lib/host_listing_model.ts +192 -0
- package/src/scripts/_lib/lean_projection_mode.ts +44 -0
- package/src/scripts/_lib/mcp_bridge.ts +199 -0
- package/src/scripts/_lib/review_independence.ts +62 -10
- package/src/scripts/_lib/rule_injection.ts +239 -0
- package/src/scripts/_lib/run_checkpoint.ts +54 -1
- package/src/scripts/_lib/scoped_projection.ts +96 -0
- package/src/scripts/_lib/session_register.ts +44 -2
- package/src/scripts/_lib/skill_catalogue.ts +38 -2
- package/src/scripts/_lib/skill_estate.ts +115 -0
- package/src/scripts/_lib/transcript_reads.ts +207 -0
- package/src/scripts/_lib/ui_authority.ts +343 -0
- package/src/scripts/ai-video/adapters/fal.sh +8 -3
- package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
- package/src/scripts/ai-video/adapters/kling.sh +10 -0
- package/src/scripts/ai-video/adapters/sora.sh +10 -0
- package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
- package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
- package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
- package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
- package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
- package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
- package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
- package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
- package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
- package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
- package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
- package/src/scripts/ai-video/smoke-trace.sh +450 -2
- package/src/scripts/ai-video/stitch.sh +191 -10
- package/src/scripts/ai-video/test-pipeline.sh +84 -6
- package/src/scripts/ai_council/argument_exhaustion.ts +130 -0
- package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
- package/src/scripts/ai_council/clients.ts +3 -2
- package/src/scripts/ai_council/consensus.ts +63 -6
- package/src/scripts/ai_council/events_log.ts +46 -1
- package/src/scripts/ai_council/orchestrator.ts +103 -108
- package/src/scripts/ai_council/orchestrator_results.ts +166 -0
- package/src/scripts/ai_council/prompts.ts +12 -5
- package/src/scripts/ai_council/quorum.ts +82 -1
- package/src/scripts/ai_council/quorum_wiring.ts +82 -5
- package/src/scripts/ai_council/stance_tally.ts +22 -0
- package/src/scripts/bench_hook_latency.ts +62 -0
- package/src/scripts/build_proof.ts +12 -1
- package/src/scripts/capture_skill_catalogue.ts +21 -0
- package/src/scripts/check_always_budget.ts +2 -1
- package/src/scripts/check_augmentignore.ts +2 -1
- package/src/scripts/check_beta_review_markers.ts +2 -1
- package/src/scripts/check_bundle_path_leakage.ts +162 -7
- package/src/scripts/check_command_examples.ts +557 -0
- package/src/scripts/check_composite_arming.ts +364 -0
- package/src/scripts/check_corpus_staleness.ts +2 -1
- package/src/scripts/check_council_pin_staleness.ts +3 -1
- package/src/scripts/check_enforcement_coverage.ts +116 -3
- package/src/scripts/check_enforcement_denominator.ts +365 -0
- package/src/scripts/check_estate_count.ts +122 -3
- package/src/scripts/check_gate_coverage.ts +2 -1
- package/src/scripts/check_hook_bundle_freshness.ts +13 -1
- package/src/scripts/check_knowledge_cards.ts +2 -1
- package/src/scripts/check_knowledge_pages.ts +3 -2
- package/src/scripts/check_memory.ts +2 -1
- package/src/scripts/check_no_automerge_key.ts +287 -0
- package/src/scripts/check_pack_conformance_fixture.ts +565 -0
- package/src/scripts/check_preamble_payload_budget.ts +30 -3
- package/src/scripts/check_proposal.ts +2 -1
- package/src/scripts/check_reach_staleness.ts +2 -1
- package/src/scripts/check_release_adjacent_health.ts +2 -1
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_review_schema.ts +34 -1
- package/src/scripts/check_roadmap_trackable.ts +48 -3
- package/src/scripts/check_routing_coverage.ts +352 -0
- package/src/scripts/check_score_contract.ts +505 -0
- package/src/scripts/check_skill_admissions.ts +514 -0
- package/src/scripts/check_source_size_budget.ts +2 -1
- package/src/scripts/check_standing_payload_delta.ts +505 -0
- package/src/scripts/check_trigger_evals.ts +2 -1
- package/src/scripts/check_web_launch_readiness.ts +705 -0
- package/src/scripts/classify_change_risk.ts +281 -0
- package/src/scripts/compute_skill_tiers.ts +186 -0
- package/src/scripts/condense.ts +8 -13
- package/src/scripts/council_attendance_metrics.ts +183 -0
- package/src/scripts/council_cli.ts +10 -8
- package/src/scripts/council_parse_rate.ts +116 -0
- package/src/scripts/derive_playbooks.ts +406 -0
- package/src/scripts/description_route_check.ts +494 -0
- package/src/scripts/design_slop_rules.ts +56 -2
- package/src/scripts/dispatch_r2_reviewer.ts +16 -0
- package/src/scripts/frontend_corpus_hash.ts +116 -0
- package/src/scripts/grade_target_readiness.ts +478 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +124 -16
- package/src/scripts/hooks/concern_registry.ts +6 -0
- package/src/scripts/hooks/design_pass_hook.ts +356 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
- package/src/scripts/hooks/rule_inject_hook.ts +318 -0
- package/src/scripts/hooks/suggestion_capture_hook.ts +368 -0
- package/src/scripts/hot_context_hook.ts +74 -7
- package/src/scripts/install.ts +40 -89
- package/src/scripts/lint_adapter_tier.ts +663 -0
- package/src/scripts/lint_archived_skills.ts +93 -0
- package/src/scripts/lint_budget_ownership.ts +56 -5
- package/src/scripts/lint_deterministic_time.ts +470 -0
- package/src/scripts/lint_framework_leakage.ts +5 -0
- package/src/scripts/lint_handoffs.ts +525 -1
- package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
- package/src/scripts/lint_marketplace.ts +88 -0
- package/src/scripts/lint_media_policy_linkage.ts +140 -1
- package/src/scripts/lint_one_off_age.ts +6 -1
- package/src/scripts/lint_override_kernel_guard.ts +87 -5
- package/src/scripts/lint_roadmap_complexity.ts +56 -0
- package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
- package/src/scripts/lint_rule_norm_pin.ts +321 -0
- package/src/scripts/lint_skill_trigger_corpus.ts +349 -0
- package/src/scripts/lint_spawn_payload.ts +42 -5
- package/src/scripts/lint_symptom_intake.ts +2 -1
- package/src/scripts/mcp_parity_smoke.ts +30 -4
- package/src/scripts/mcp_render.ts +66 -1
- package/src/scripts/mcp_tool_fingerprint.ts +241 -0
- package/src/scripts/measure_risk_class_drift.ts +140 -0
- package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
- package/src/scripts/media/lib/adapter-common.sh +211 -1
- package/src/scripts/media/lib/adapter-contract.md +74 -6
- package/src/scripts/model_rule_injection.ts +907 -0
- package/src/scripts/pack_install_smoke.ts +363 -0
- package/src/scripts/pr_conflict_census.ts +187 -0
- package/src/scripts/project_thin_rules.ts +45 -2
- package/src/scripts/release.ts +66 -860
- package/src/scripts/release_drill.ts +59 -3
- package/src/scripts/release_env.ts +298 -0
- package/src/scripts/release_publication.ts +720 -0
- package/src/scripts/report_pack_delta.ts +204 -0
- package/src/scripts/roadmap_context.ts +778 -0
- package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
- package/src/scripts/schemas/rule.schema.json +24 -2
- package/src/scripts/schemas/skill.schema.json +39 -0
- package/src/scripts/schemas/ui-authority.schema.json +114 -0
- package/src/scripts/select_analysis_mode.ts +112 -0
- package/src/scripts/session_register_hook.ts +29 -3
- package/src/scripts/sessions_cli.ts +67 -3
- package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
- package/src/scripts/sync_pr_branch.ts +40 -1
- package/src/scripts/token_sink_report.ts +239 -0
- package/src/scripts/trigger_coverage.ts +122 -3
- package/src/scripts/update_counts.ts +7 -3
- package/src/scripts/validate_frontmatter.ts +66 -0
- package/src/server/schemas/settings.ts +10 -0
- package/src/shared/skillRanking.ts +183 -0
- package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
- package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
- package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
- package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
- package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
- package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
- package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
- package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
- package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
- package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
- package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
- package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
- package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
- package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
- package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
- package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
- package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
- package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
- package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
- package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
- package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
- package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
- package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
- package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
- package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
- package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
- package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
- package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -55
- package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
- package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
- package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
- package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
- package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
- package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
- package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
- package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
- package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
- package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
- package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
- package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
- package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
- package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
- package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
- package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
- package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
- package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
- package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
- package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
- package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
- package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
- package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
- package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
- package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
- package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
- package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
- package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
- package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
- package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
- package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
- package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
- package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
- package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
- package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
- package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
- package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
- package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
- package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
- package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
- package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
- package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
- package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
- package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
- package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
- package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
- package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
- package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
- package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
- package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
- package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
- package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
- package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
- package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
- package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
- package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
- package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
- package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
- package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
- package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
- package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
- package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
- package/dist/cli/agent-config.js.map +0 -1
- package/dist/cli/bash/runBash.js.map +0 -1
- package/dist/cli/commands/commands.js.map +0 -1
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/doctorShell.js.map +0 -1
- package/dist/cli/commands/mcpServer.js.map +0 -1
- package/dist/cli/commands/packs.js.map +0 -1
- package/dist/cli/commands/profiles.js.map +0 -1
- package/dist/cli/commands/recordTriggerEval.js.map +0 -1
- package/dist/cli/commands/rtkDetect.js.map +0 -1
- package/dist/cli/commands/settings.js.map +0 -1
- package/dist/cli/commands/uiServe.js.map +0 -1
- package/dist/cli/commands/versions.js.map +0 -1
- package/dist/cli/commands/workspaces.js.map +0 -1
- package/dist/cli/configRoot.js.map +0 -1
- package/dist/cli/discovery/loadManifest.js.map +0 -1
- package/dist/cli/firstRunNotice.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/initRouting.js.map +0 -1
- package/dist/cli/log/logger.js.map +0 -1
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/mcp/content.js.map +0 -1
- package/dist/cli/mcp/dispatch.js.map +0 -1
- package/dist/cli/mcp/stdio.js.map +0 -1
- package/dist/cli/paths.js.map +0 -1
- package/dist/cli/python/knowledge_ingest.js.map +0 -1
- package/dist/cli/python/workspace_analytics.js.map +0 -1
- package/dist/cli/python/workspace_crypto.js.map +0 -1
- package/dist/cli/python/workspace_documents.js.map +0 -1
- package/dist/cli/python/workspace_drive.js.map +0 -1
- package/dist/cli/python/workspace_drive_health.js.map +0 -1
- package/dist/cli/python/workspace_explain.js.map +0 -1
- package/dist/cli/python/workspace_hosts.js.map +0 -1
- package/dist/cli/python/workspace_inbox.js.map +0 -1
- package/dist/cli/python/workspace_render.js.map +0 -1
- package/dist/cli/python/workspace_roles.js.map +0 -1
- package/dist/cli/python/workspace_secrets.js.map +0 -1
- package/dist/cli/python/workspace_sessions.js.map +0 -1
- package/dist/cli/python/workspace_skills.js.map +0 -1
- package/dist/cli/registry.js.map +0 -1
- package/dist/install/agentSwitchDetection.js.map +0 -1
- package/dist/install/agentSwitchProfile.js.map +0 -1
- package/dist/install/atomic.js.map +0 -1
- package/dist/install/claudePathsPlan.js.map +0 -1
- package/dist/install/conflict.js.map +0 -1
- package/dist/install/detect.js.map +0 -1
- package/dist/install/emit_host_rules_cli.js.map +0 -1
- package/dist/install/globalRuleLayers.js.map +0 -1
- package/dist/install/hostLayerFingerprint.js.map +0 -1
- package/dist/install/partitionEligibility.js.map +0 -1
- package/dist/install/paths.js.map +0 -1
- package/dist/install/plan.js.map +0 -1
- package/dist/install/preflight.js.map +0 -1
- package/dist/install/rtkDetection.js.map +0 -1
- package/dist/install/ruleInScope.js.map +0 -1
- package/dist/install/ruleLayerPartition.js.map +0 -1
- package/dist/install/rule_scope.js.map +0 -1
- package/dist/install/rule_scope_cli.js.map +0 -1
- package/dist/install/selectedTools.js.map +0 -1
- package/dist/install/toolDetection.js.map +0 -1
- package/dist/install/txlog.js.map +0 -1
- package/dist/install/types.js.map +0 -1
- package/dist/install/wizard-plan.js.map +0 -1
- package/dist/install/wizardDismissals.js.map +0 -1
- package/dist/scripts/_lib/agent_settings.js.map +0 -1
- package/dist/scripts/_lib/agent_src.js.map +0 -1
- package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
- package/dist/scripts/_lib/claude_plugin.js.map +0 -1
- package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
- package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
- package/dist/scripts/_lib/environment_detector.js.map +0 -1
- package/dist/scripts/_lib/host_launch.js.map +0 -1
- package/dist/scripts/_lib/install_layout.js.map +0 -1
- package/dist/scripts/_lib/installed_lock.js.map +0 -1
- package/dist/scripts/_lib/model_tier.js.map +0 -1
- package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
- package/dist/scripts/_lib/scoped_projection.js.map +0 -1
- package/dist/scripts/_lib/script_output.js.map +0 -1
- package/dist/scripts/_lib/spawn_env.js.map +0 -1
- package/dist/scripts/_lib/surface_tiers.js.map +0 -1
- package/dist/scripts/_lib/token_count.js.map +0 -1
- package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
- package/dist/scripts/_lib/user_global_paths.js.map +0 -1
- package/dist/scripts/ai_council/modes.js.map +0 -1
- package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
- package/dist/scripts/condense.js.map +0 -1
- package/dist/scripts/project_thin_rules.js.map +0 -1
- package/dist/server/app.js.map +0 -1
- package/dist/server/io/atomicMultiWrite.js.map +0 -1
- package/dist/server/io/atomicWrite.js.map +0 -1
- package/dist/server/io/sharedWriteCheck.js.map +0 -1
- package/dist/server/io/substituteTemplate.js.map +0 -1
- package/dist/server/io/yamlIO.js.map +0 -1
- package/dist/server/nicknameResolver.js.map +0 -1
- package/dist/server/port.js.map +0 -1
- package/dist/server/routes/discovery.js.map +0 -1
- package/dist/server/routes/install.js.map +0 -1
- package/dist/server/routes/ping.js.map +0 -1
- package/dist/server/routes/schema.js.map +0 -1
- package/dist/server/routes/settings.js.map +0 -1
- package/dist/server/routes/settingsChanges.js.map +0 -1
- package/dist/server/routes/userMd.js.map +0 -1
- package/dist/server/routes/wizard.js.map +0 -1
- package/dist/server/routes/workspace.js.map +0 -1
- package/dist/server/schemas/settings.js.map +0 -1
- package/dist/server/serverInfo.js.map +0 -1
- package/dist/server/token.js.map +0 -1
- package/dist/server/writeRoot.js.map +0 -1
- package/dist/shared/capabilities.js.map +0 -1
- package/dist/shared/interactiveContext.js.map +0 -1
- package/dist/shared/nicknamePrefill.js.map +0 -1
- package/dist/shared/settingsAsks.js.map +0 -1
- package/dist/shared/settingsCarveOut.js.map +0 -1
- package/dist/shared/settingsClasses.js.map +0 -1
- package/dist/shared/settingsConsent.js.map +0 -1
- package/dist/shared/settingsSurface.js.map +0 -1
- package/dist/shared/userMd/formAdapter.js.map +0 -1
- package/dist/shared/userMd/schema.js.map +0 -1
- package/dist/shared/userMd/utils.js.map +0 -1
- package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
- package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
- package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
- package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
- package/src/scripts/_lib/secret_detector.test.ts +0 -108
- package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
- package/src/scripts/_lib/untrusted_content.test.ts +0 -175
- package/src/scripts/check_secret_leak.test.ts +0 -90
- package/src/scripts/design_slop_rules.test.ts +0 -239
- package/src/scripts/self_review_gate.test.ts +0 -296
- package/src/shared/capabilities.test.ts +0 -43
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* check_package_surface — read a JavaScript library's PACKAGE SURFACE and report what its
|
|
3
|
+
* own `package.json` says, without compiling anything.
|
|
4
|
+
*
|
|
5
|
+
* Scope, stated because the boundary is what keeps this useful: the subject is
|
|
6
|
+
* `package.json` **semantics** — the exports map, peer-dependency placement, the files
|
|
7
|
+
* allow-list, publish intent. It is NOT a build, not a type-check, and not proof that any
|
|
8
|
+
* bundler can produce the declared layout. A checker that grew a parser would start
|
|
9
|
+
* reporting compile errors as packaging errors, and the two have different fixes.
|
|
10
|
+
*
|
|
11
|
+
* The classification (`source-consumed` vs `built-surface`) is read from the DECLARED
|
|
12
|
+
* EXPORT TARGETS, never from the directory name. A fixture called `ui-lib-vite` is not
|
|
13
|
+
* evidence about Vite, and a directory called `buildable` is not evidence that anything
|
|
14
|
+
* builds — both council reviewers named that inference as the thing to avoid.
|
|
15
|
+
*
|
|
16
|
+
* Output is JSON on stdout. No network, no subprocess.
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* check_package_surface <library-root> [<library-root> …]
|
|
20
|
+
* check_package_surface --self-test
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import * as fs from 'node:fs';
|
|
24
|
+
import * as path from 'node:path';
|
|
25
|
+
|
|
26
|
+
export type Severity = 'error' | 'warn';
|
|
27
|
+
|
|
28
|
+
export interface Finding {
|
|
29
|
+
readonly code: string;
|
|
30
|
+
readonly severity: Severity;
|
|
31
|
+
readonly message: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type Classification = 'source-consumed' | 'built-surface' | 'undeclared';
|
|
35
|
+
|
|
36
|
+
export interface SurfaceReport {
|
|
37
|
+
readonly root: string;
|
|
38
|
+
readonly name: string | null;
|
|
39
|
+
readonly classification: Classification;
|
|
40
|
+
readonly findings: readonly Finding[];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Peer-only packages: a library that bundles these ships a second copy of them. */
|
|
44
|
+
const PEER_ONLY = ['react', 'react-dom'] as const;
|
|
45
|
+
|
|
46
|
+
const asRecord = (v: unknown): Record<string, unknown> =>
|
|
47
|
+
v !== null && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : {};
|
|
48
|
+
|
|
49
|
+
/** Every string target reachable in an exports map, at any nesting depth. */
|
|
50
|
+
export const exportTargets = (exportsField: unknown): string[] => {
|
|
51
|
+
const out: string[] = [];
|
|
52
|
+
const walk = (node: unknown): void => {
|
|
53
|
+
if (typeof node === 'string') {
|
|
54
|
+
out.push(node);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (Array.isArray(node)) {
|
|
58
|
+
for (const n of node) walk(n);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
for (const v of Object.values(asRecord(node))) walk(v);
|
|
62
|
+
};
|
|
63
|
+
walk(exportsField);
|
|
64
|
+
return out;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Classify from the declared targets.
|
|
69
|
+
*
|
|
70
|
+
* A package whose targets all point into a source directory is source-consumed; one whose
|
|
71
|
+
* targets point at build output is a built surface. **Mixed is `undeclared`, not a guess** —
|
|
72
|
+
* a package that declares both is making a statement this check cannot resolve, and picking
|
|
73
|
+
* one silently would hide exactly the ambiguity worth reporting.
|
|
74
|
+
*/
|
|
75
|
+
export const classify = (targets: readonly string[]): Classification => {
|
|
76
|
+
if (targets.length === 0) return 'undeclared';
|
|
77
|
+
const built = targets.filter((t) => /(^|\/)(dist|build|lib|out)\//.test(t));
|
|
78
|
+
if (built.length === targets.length) return 'built-surface';
|
|
79
|
+
if (built.length === 0) return 'source-consumed';
|
|
80
|
+
return 'undeclared';
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const checkPackage = (root: string): SurfaceReport => {
|
|
84
|
+
const manifestPath = path.join(root, 'package.json');
|
|
85
|
+
let manifest: Record<string, unknown> = {};
|
|
86
|
+
try {
|
|
87
|
+
manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8')) as Record<string, unknown>;
|
|
88
|
+
} catch {
|
|
89
|
+
return {
|
|
90
|
+
root,
|
|
91
|
+
name: null,
|
|
92
|
+
classification: 'undeclared',
|
|
93
|
+
findings: [{ code: 'no-manifest', severity: 'error', message: `no readable package.json at ${manifestPath}` }],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const findings: Finding[] = [];
|
|
98
|
+
const deps = asRecord(manifest['dependencies']);
|
|
99
|
+
const peers = asRecord(manifest['peerDependencies']);
|
|
100
|
+
const exportsField = manifest['exports'];
|
|
101
|
+
const targets = exportTargets(exportsField);
|
|
102
|
+
|
|
103
|
+
// (a) — the "invalid hook call" failure. Two copies of React in one tree break hooks at
|
|
104
|
+
// runtime with an error that names neither package, which is why this is an error and
|
|
105
|
+
// not a warning.
|
|
106
|
+
for (const p of PEER_ONLY) {
|
|
107
|
+
if (Object.prototype.hasOwnProperty.call(deps, p)) {
|
|
108
|
+
findings.push({
|
|
109
|
+
code: 'peer-as-dependency',
|
|
110
|
+
severity: 'error',
|
|
111
|
+
message: `\`${p}\` is in dependencies; a library must declare it as a peerDependency or the consumer gets two copies (the "invalid hook call" failure)`,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// (b) — legacy entry fields with no exports map: the resolution the consumer gets then
|
|
117
|
+
// depends on their bundler rather than on this manifest.
|
|
118
|
+
const hasLegacy = ['main', 'module', 'browser'].some((k) => typeof manifest[k] === 'string');
|
|
119
|
+
if (exportsField === undefined && hasLegacy) {
|
|
120
|
+
findings.push({
|
|
121
|
+
code: 'no-exports-map',
|
|
122
|
+
severity: 'warn',
|
|
123
|
+
message: 'main/module present without an exports map — the entry point resolves by bundler convention, not by declaration',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// (c) — `types` must be the FIRST key of a conditions object. Conditional exports are
|
|
128
|
+
// matched in declaration order, so a `types` key placed after `import` is skipped by
|
|
129
|
+
// resolvers that match `import` first, and the package silently ships untyped.
|
|
130
|
+
const walkConditions = (node: unknown, at: string): void => {
|
|
131
|
+
const rec = asRecord(node);
|
|
132
|
+
const keys = Object.keys(rec);
|
|
133
|
+
if (keys.includes('types') && keys[0] !== 'types') {
|
|
134
|
+
findings.push({
|
|
135
|
+
code: 'types-not-first',
|
|
136
|
+
severity: 'warn',
|
|
137
|
+
message: `\`types\` is not the first condition at \`${at}\` (order matters: a resolver matching \`${keys[0] ?? ''}\` first never sees it)`,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
for (const [k, v] of Object.entries(rec)) {
|
|
141
|
+
if (typeof v === 'object' && v !== null) walkConditions(v, `${at}${k}/`);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
if (exportsField !== undefined) walkConditions(exportsField, 'exports.');
|
|
145
|
+
|
|
146
|
+
// (d) — a `workspace:` range only resolves inside the workspace. Published with no
|
|
147
|
+
// `private: true` and no publishConfig, the consumer's install fails on a protocol
|
|
148
|
+
// their registry has never heard of.
|
|
149
|
+
const allDeps = { ...deps, ...asRecord(manifest['devDependencies']), ...peers };
|
|
150
|
+
const workspaceRanges = Object.entries(allDeps).filter(([, v]) => typeof v === 'string' && v.startsWith('workspace:'));
|
|
151
|
+
if (
|
|
152
|
+
workspaceRanges.length > 0 &&
|
|
153
|
+
manifest['private'] !== true &&
|
|
154
|
+
manifest['publishConfig'] === undefined
|
|
155
|
+
) {
|
|
156
|
+
findings.push({
|
|
157
|
+
code: 'workspace-range-publishable',
|
|
158
|
+
severity: 'warn',
|
|
159
|
+
message: `${String(workspaceRanges.length)} \`workspace:\` range(s) in a package that is neither private nor carrying publishConfig — the protocol does not resolve outside the workspace`,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// A declared target that is not in the tree is the drift the whole surface rests on.
|
|
164
|
+
for (const t of targets) {
|
|
165
|
+
if (!t.startsWith('.')) continue;
|
|
166
|
+
if (!fs.existsSync(path.join(root, t))) {
|
|
167
|
+
findings.push({
|
|
168
|
+
code: 'export-target-missing',
|
|
169
|
+
severity: 'error',
|
|
170
|
+
message: `exports target \`${t}\` does not exist in the package`,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const name = typeof manifest['name'] === 'string' ? manifest['name'] : null;
|
|
176
|
+
return { root, name, classification: classify(targets), findings };
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
/** Registry item types deprecated in v4 — writing one produces an item the CLI cannot read. */
|
|
180
|
+
const DEPRECATED_ITEM_TYPES = ['registry:build', 'registry:mcp'] as const;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Check a `registry.json` (or a single `registry-item.json`) published by a library.
|
|
184
|
+
*
|
|
185
|
+
* Same subject as the manifest checks: what the file DECLARES. A registry item that lists
|
|
186
|
+
* `react` in `dependencies` reproduces the two-copies-of-React failure one layer up — the
|
|
187
|
+
* consumer's app already has React, and the item installs a second.
|
|
188
|
+
*/
|
|
189
|
+
export const checkRegistry = (file: string): Finding[] => {
|
|
190
|
+
let doc: Record<string, unknown> = {};
|
|
191
|
+
try {
|
|
192
|
+
doc = JSON.parse(fs.readFileSync(file, 'utf8')) as Record<string, unknown>;
|
|
193
|
+
} catch {
|
|
194
|
+
return [{ code: 'no-registry', severity: 'error', message: `no readable registry JSON at ${file}` }];
|
|
195
|
+
}
|
|
196
|
+
// Both shapes are legal: an index with `items`, or a single item.
|
|
197
|
+
const items = Array.isArray(doc['items']) ? (doc['items'] as unknown[]) : [doc];
|
|
198
|
+
const findings: Finding[] = [];
|
|
199
|
+
for (const raw of items) {
|
|
200
|
+
const item = asRecord(raw);
|
|
201
|
+
const name = typeof item['name'] === 'string' ? item['name'] : '(unnamed)';
|
|
202
|
+
const deps = Array.isArray(item['dependencies']) ? (item['dependencies'] as unknown[]) : [];
|
|
203
|
+
for (const d of deps) {
|
|
204
|
+
const dep = String(d).split('@')[0];
|
|
205
|
+
if (PEER_ONLY.includes(dep as (typeof PEER_ONLY)[number])) {
|
|
206
|
+
findings.push({
|
|
207
|
+
code: 'registry-item-bundles-peer',
|
|
208
|
+
severity: 'error',
|
|
209
|
+
message: `registry item \`${name}\` lists \`${dep}\` in dependencies; the consuming app already has it, and installing a second copy is the same "invalid hook call" failure one layer up`,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const type = typeof item['type'] === 'string' ? item['type'] : '';
|
|
214
|
+
if (DEPRECATED_ITEM_TYPES.includes(type as (typeof DEPRECATED_ITEM_TYPES)[number])) {
|
|
215
|
+
findings.push({
|
|
216
|
+
code: 'registry-item-deprecated-type',
|
|
217
|
+
severity: 'error',
|
|
218
|
+
message: `registry item \`${name}\` uses \`${type}\`, deprecated in v4 — use \`registry:base\` or \`registry:font\``,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return findings;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
const selfTest = (): number => {
|
|
226
|
+
let failed = 0;
|
|
227
|
+
const check = (label: string, cond: boolean): void => {
|
|
228
|
+
if (!cond) {
|
|
229
|
+
process.stderr.write(`❌ ${label}\n`);
|
|
230
|
+
failed += 1;
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
check('a source target classifies as source-consumed', classify(['./src/index.ts']) === 'source-consumed');
|
|
235
|
+
check('a dist target classifies as built-surface', classify(['./dist/index.js']) === 'built-surface');
|
|
236
|
+
check('a MIXED declaration is undeclared, never guessed', classify(['./src/index.ts', './dist/index.js']) === 'undeclared');
|
|
237
|
+
check('no targets is undeclared', classify([]) === 'undeclared');
|
|
238
|
+
check(
|
|
239
|
+
'nested conditions are all collected',
|
|
240
|
+
exportTargets({ '.': { types: './a.d.ts', import: './b.js' } }).length === 2,
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
process.stdout.write(
|
|
244
|
+
failed === 0 ? '✅ check_package_surface: self-test passed\n' : `❌ ${String(failed)} failure(s)\n`,
|
|
245
|
+
);
|
|
246
|
+
return failed === 0 ? 0 : 1;
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
const main = (): number => {
|
|
250
|
+
const argv = process.argv.slice(2);
|
|
251
|
+
if (argv.includes('--self-test')) return selfTest();
|
|
252
|
+
const roots = argv.filter((a) => !a.startsWith('--'));
|
|
253
|
+
if (roots.length === 0) {
|
|
254
|
+
process.stderr.write('usage: check_package_surface <library-root> [...]\n');
|
|
255
|
+
return 2;
|
|
256
|
+
}
|
|
257
|
+
// A path ending in a registry file is checked as a registry, not as a package root —
|
|
258
|
+
// otherwise the caller has to know which of two checkers to reach for.
|
|
259
|
+
const reports = roots.map((r) =>
|
|
260
|
+
/registry(-item)?\.json$/.test(r)
|
|
261
|
+
? { root: r, name: null, classification: 'undeclared' as Classification, findings: checkRegistry(r) }
|
|
262
|
+
: checkPackage(r),
|
|
263
|
+
);
|
|
264
|
+
process.stdout.write(`${JSON.stringify({ reports }, null, 2)}\n`);
|
|
265
|
+
return reports.some((r) => r.findings.some((f) => f.severity === 'error')) ? 1 : 0;
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
if (process.argv[1] !== undefined && process.argv[1].includes('check_package_surface')) {
|
|
269
|
+
process.exit(main());
|
|
270
|
+
}
|
|
@@ -4,6 +4,9 @@ name: learning-to-rule-or-skill
|
|
|
4
4
|
description: "Use when a repeated learning, mistake, or successful pattern should be turned into a new rule or skill. Also use after completing a task to capture learnings from the work."
|
|
5
5
|
source: project
|
|
6
6
|
domain: process
|
|
7
|
+
scope:
|
|
8
|
+
write: []
|
|
9
|
+
verification_reason: "execution.handler is internal, so this skill spawns no subprocess — writes happen through the agent's declared allowed_tools. No command can prove a scope the skill never executes."
|
|
7
10
|
execution:
|
|
8
11
|
type: assisted
|
|
9
12
|
handler: internal
|
|
@@ -3,6 +3,9 @@ model_tier: medium
|
|
|
3
3
|
name: lint-skills
|
|
4
4
|
description: "Use when running the package's skill linter against all skills and rules to validate frontmatter, required sections, and execution metadata."
|
|
5
5
|
domain: process
|
|
6
|
+
scope:
|
|
7
|
+
write: []
|
|
8
|
+
verification_reason: "the declared command is a read-only linter: grep -c 'writeFileSync|mkdirSync|appendFileSync' src/scripts/skill_linter.ts returns 0. Absence of a write is not something a command can prove."
|
|
6
9
|
execution:
|
|
7
10
|
type: assisted
|
|
8
11
|
handler: shell
|
|
@@ -18,6 +18,9 @@ trust:
|
|
|
18
18
|
level: experimental
|
|
19
19
|
install:
|
|
20
20
|
removable: true
|
|
21
|
+
scope:
|
|
22
|
+
write: []
|
|
23
|
+
verification_reason: "execution declares no handler, so this skill runs nothing of its own — every write is the calling agent's, under the rules that govern it. No command can prove a scope the skill never executes."
|
|
21
24
|
execution:
|
|
22
25
|
type: manual
|
|
23
26
|
---
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: medium
|
|
3
3
|
name: logging-monitoring
|
|
4
|
-
description: "Use when
|
|
4
|
+
description: "Use when establishing what observability a project actually has — the four Golden Signals, required signal to detected implementation to evidence, and SLI/SLO provenance."
|
|
5
5
|
domain: devops
|
|
6
6
|
workspaces:
|
|
7
7
|
- engineering
|
|
@@ -13,93 +13,276 @@ packs:
|
|
|
13
13
|
|
|
14
14
|
## When to use
|
|
15
15
|
|
|
16
|
-
Use when
|
|
16
|
+
Use when answering **"what does this project actually have"** for observability:
|
|
17
|
+
which required signal exists, what implements it, and what evidence says so. Also
|
|
18
|
+
when adding logging or wiring a monitoring stack — but the posture question comes
|
|
19
|
+
first, because you cannot add the missing signal until you know which one is
|
|
20
|
+
missing.
|
|
17
21
|
|
|
18
22
|
Do NOT use when:
|
|
19
|
-
-
|
|
20
|
-
-
|
|
23
|
+
- Classifying an alert or writing a runbook (use `alerting-doctrine`)
|
|
24
|
+
- Adjudicating a go/no-go readiness verdict (use `operational-readiness`)
|
|
25
|
+
- Creating Grafana dashboards or queries (use `grafana`)
|
|
26
|
+
- Dashboard layout and visualization decisions (use `dashboard-design`)
|
|
27
|
+
- Hardening the host itself (use `server-hardening`)
|
|
21
28
|
|
|
22
|
-
##
|
|
29
|
+
## Golden Signals
|
|
23
30
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
Four signals. The family is named in many places; these are the definitions.
|
|
32
|
+
A posture report covers all four or records why it cannot — never four minus the
|
|
33
|
+
inconvenient ones.
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
### Golden Signal: Latency
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
| **Grafana** | Dashboards | Connected to Loki |
|
|
34
|
-
| **Loki** | Log aggregation | `itspire/monolog-loki` via Monolog |
|
|
35
|
-
| **Slack** | Alert notifications | Webhook for error-level |
|
|
37
|
+
**Measures** how long a served request takes, split by outcome — successful and
|
|
38
|
+
failed latency are different distributions, and averaging them hides both. Read
|
|
39
|
+
it as percentiles (p50 / p95 / p99), never as a mean.
|
|
36
40
|
|
|
37
|
-
|
|
41
|
+
**A missing one costs** the ability to see degradation that is not yet an outage.
|
|
42
|
+
The system is up, users are leaving, and every error-rate panel is green.
|
|
38
43
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
| `stack_without_slack` | Daily file + errorlog (no Slack) |
|
|
42
|
-
| `slack` | Error alerts to Slack |
|
|
43
|
-
| `loki` | Send logs to Grafana Loki |
|
|
44
|
-
| `loki_import_*` | Import-specific Loki with custom labels |
|
|
45
|
-
| `daily` | Rotating file logs |
|
|
44
|
+
**Typical detection paths** — APM transaction traces, a request-duration
|
|
45
|
+
histogram, reverse-proxy or load-balancer access logs, a middleware timer.
|
|
46
46
|
|
|
47
|
-
###
|
|
47
|
+
### Golden Signal: Traffic
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
**Measures** demand on the system — requests per second, jobs enqueued, messages
|
|
50
|
+
consumed, active sessions. The denominator every other signal needs.
|
|
51
|
+
|
|
52
|
+
**A missing one costs** all interpretation of the other three. Errors doubling is
|
|
53
|
+
meaningless without knowing whether traffic doubled; a quiet incident and a quiet
|
|
54
|
+
Sunday are indistinguishable.
|
|
55
|
+
|
|
56
|
+
**Typical detection paths** — a request counter, access-log volume, queue depth
|
|
57
|
+
and enqueue rate, a CDN or gateway request metric.
|
|
58
|
+
|
|
59
|
+
### Golden Signal: Errors
|
|
60
|
+
|
|
61
|
+
**Measures** the rate of requests that failed — explicitly (a 5xx, a raised
|
|
62
|
+
exception, a dead-lettered job) or implicitly (a 200 carrying a wrong body, a
|
|
63
|
+
policy-violating success). Rate, not count.
|
|
64
|
+
|
|
65
|
+
**A missing one costs** the ability to distinguish a broken deploy from a slow
|
|
66
|
+
one, and it is the signal most often mistaken for complete because an
|
|
67
|
+
error-tracking SDK is installed. An exception tracker is not an error rate: it
|
|
68
|
+
sees raised exceptions, not handled failures or wrong answers.
|
|
69
|
+
|
|
70
|
+
**Typical detection paths** — error-tracking SDK events, HTTP status
|
|
71
|
+
distribution, dead-letter queue depth, log-level counts at `error` and above.
|
|
72
|
+
|
|
73
|
+
### Golden Signal: Saturation
|
|
74
|
+
|
|
75
|
+
**Measures** how full the constrained resource is — the one that runs out first.
|
|
76
|
+
Connection pool, worker slots, disk, memory, file descriptors, a third-party
|
|
77
|
+
rate-limit budget. Expressed against its ceiling, which means the ceiling has to
|
|
78
|
+
be known.
|
|
52
79
|
|
|
53
|
-
|
|
80
|
+
**A missing one costs** every early warning. Saturation is the only one of the
|
|
81
|
+
four that is predictive: latency, traffic and errors report what already
|
|
82
|
+
happened, saturation reports what is about to. It is also the signal most often
|
|
83
|
+
absent entirely — see `scale-discipline` R-A12, which asks the finite-resource
|
|
84
|
+
question at review time.
|
|
54
85
|
|
|
55
|
-
|
|
86
|
+
**Typical detection paths** — pool-utilisation gauges, queue wait time (not
|
|
87
|
+
depth), host memory and disk metrics, rate-limit headers from an upstream
|
|
88
|
+
provider.
|
|
56
89
|
|
|
57
|
-
|
|
90
|
+
## Evidence states — a threshold carries its provenance
|
|
91
|
+
|
|
92
|
+
A number in a posture report is only as good as where it came from, and the
|
|
93
|
+
failure this prevents is an agent-suggested SLO becoming a commitment nobody
|
|
94
|
+
made. Provenance is part of the value, not a footnote.
|
|
95
|
+
|
|
96
|
+
| Provenance | Meaning | May be rendered as operational |
|
|
58
97
|
|---|---|---|
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
98
|
+
| `measured` | Observed in running telemetry | Yes |
|
|
99
|
+
| `committed` | Stated in a doc, contract or SLA, not yet verified | Yes, marked unverified |
|
|
100
|
+
| `proposed` | The agent suggested it | **Never** |
|
|
101
|
+
| `unknown` | Inspection could not establish a result | **Never** |
|
|
102
|
+
|
|
103
|
+
A `proposed` threshold stays `proposed` through every rendering. There is no
|
|
104
|
+
promotion path — not "it looks right", not "the user did not object". Promotion
|
|
105
|
+
requires a measurement or a stated commitment, which changes the provenance
|
|
106
|
+
first and the rendering second.
|
|
63
107
|
|
|
64
|
-
|
|
108
|
+
Two absences that are not the same thing, and collapsing them is how a gap
|
|
109
|
+
becomes invisible:
|
|
65
110
|
|
|
66
|
-
-
|
|
67
|
-
|
|
68
|
-
-
|
|
111
|
+
- **`unavailable`** — affirmatively established that the project cannot supply
|
|
112
|
+
this signal. Requires a **non-empty reason**. A recorded null.
|
|
113
|
+
- **`unknown`** — nobody looked, or the look was inconclusive. Never counts as
|
|
114
|
+
compliant, never counts as green, and is not a null — it is unfinished work.
|
|
69
115
|
|
|
70
|
-
|
|
116
|
+
Reported signal count equals four minus the recorded `unavailable` nulls.
|
|
117
|
+
`unknown` reduces nothing; it is an open question.
|
|
71
118
|
|
|
72
|
-
|
|
119
|
+
## Procedure: Establish the observability posture
|
|
120
|
+
|
|
121
|
+
1. **Take the four signals as the requirement.** Latency, traffic, errors,
|
|
122
|
+
saturation. The list does not shrink to what the project happens to have.
|
|
123
|
+
2. **Detect what implements each one.** Read the project rather than assuming a
|
|
124
|
+
stack: the logging config (`config/logging.php` in Laravel, `LOGGING` in
|
|
125
|
+
Django, `winston`/`pino` config in Node, `config/environments` in Rails),
|
|
126
|
+
then the metrics and APM wiring, then the dashboards and alert rules that
|
|
127
|
+
already exist. An installed SDK is evidence of a *capability*, never of a
|
|
128
|
+
*signal* — a Sentry integration does not give you latency percentiles.
|
|
129
|
+
3. **Attach evidence to every claim.** One concrete artefact per signal —
|
|
130
|
+
`file:line`, a dashboard panel, a metric name, a config key. A signal with no
|
|
131
|
+
artefact is `unknown`, not present.
|
|
132
|
+
4. **Record what is genuinely absent as `unavailable` plus a reason.** "No APM
|
|
133
|
+
configured, so no request-duration distribution exists" is a null. Silence is
|
|
134
|
+
not.
|
|
135
|
+
5. **Mark every threshold's provenance** per the table above, before the report
|
|
136
|
+
is rendered rather than after.
|
|
137
|
+
6. **Hand the normalized result on.** `alerting-doctrine` consumes it to decide
|
|
138
|
+
what earns a page; `operational-readiness` consumes it as one input to a
|
|
139
|
+
go/no-go verdict. Neither re-derives it.
|
|
73
140
|
|
|
74
141
|
### Validate
|
|
75
142
|
|
|
76
|
-
- Verify
|
|
143
|
+
- Verify all four signals appear in the report — present, `unavailable` with a
|
|
144
|
+
reason, or `unknown`. Four rows, always.
|
|
145
|
+
- Confirm every present signal cites a concrete artefact, not a stack guess.
|
|
146
|
+
- Confirm no `proposed` or `unknown` threshold is rendered as operational.
|
|
147
|
+
- Confirm `unavailable` rows carry a non-empty reason.
|
|
148
|
+
- Verify log level matches severity (no `error` for handled conditions).
|
|
77
149
|
- Confirm structured context is passed (not string interpolation).
|
|
78
150
|
- Check that no sensitive data (passwords, tokens, PII) appears in log output.
|
|
79
|
-
- Verify Sentry captures include relevant context for debugging.
|
|
80
151
|
|
|
81
152
|
## Output format
|
|
82
153
|
|
|
83
|
-
1.
|
|
84
|
-
2.
|
|
154
|
+
1. A four-row signal table — signal, status, implementation, evidence artefact.
|
|
155
|
+
2. Any threshold with its provenance marked.
|
|
156
|
+
3. The `unavailable` nulls with their reasons, and the `unknown` rows as open
|
|
157
|
+
questions.
|
|
158
|
+
|
|
159
|
+
## Examples
|
|
160
|
+
|
|
161
|
+
Contract fixtures. Each pair differs **only** in the condition under test, and
|
|
162
|
+
each case states the verdict it must produce. These are contract evidence for
|
|
163
|
+
review, not an executable suite — no parser or runner reads them.
|
|
164
|
+
|
|
165
|
+
### Missing signal — malformed vs clean
|
|
166
|
+
|
|
167
|
+
```yaml
|
|
168
|
+
# malformed — logs and error tracking, no saturation anywhere.
|
|
169
|
+
# Scored as missing a signal, NOT as observable.
|
|
170
|
+
signals:
|
|
171
|
+
latency: { status: present, evidence: "APM: http.server.duration p95" }
|
|
172
|
+
traffic: { status: present, evidence: "nginx access log rate" }
|
|
173
|
+
errors: { status: present, evidence: "error-tracker project 41" }
|
|
174
|
+
# saturation omitted entirely
|
|
175
|
+
verdict: "missing-signal: saturation"
|
|
176
|
+
reason: "no pool, memory, disk or rate-limit utilisation metric detected"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```yaml
|
|
180
|
+
# clean — the same project with the one signal supplied.
|
|
181
|
+
signals:
|
|
182
|
+
latency: { status: present, evidence: "APM: http.server.duration p95" }
|
|
183
|
+
traffic: { status: present, evidence: "nginx access log rate" }
|
|
184
|
+
errors: { status: present, evidence: "error-tracker project 41" }
|
|
185
|
+
saturation: { status: present, evidence: "db_pool_in_use / db_pool_size gauge" }
|
|
186
|
+
verdict: all-signals-detected
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Provenance — malformed vs clean
|
|
190
|
+
|
|
191
|
+
```yaml
|
|
192
|
+
# malformed — an agent-suggested number rendered as a commitment.
|
|
193
|
+
slo:
|
|
194
|
+
name: checkout_availability
|
|
195
|
+
threshold: 99.9
|
|
196
|
+
provenance: proposed
|
|
197
|
+
operational: true # <- promotion with no measurement and no commitment
|
|
198
|
+
verdict: invalid-provenance
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
```yaml
|
|
202
|
+
# clean — the suggestion stays a suggestion.
|
|
203
|
+
slo:
|
|
204
|
+
name: checkout_availability
|
|
205
|
+
threshold: 99.9
|
|
206
|
+
provenance: proposed
|
|
207
|
+
operational: false
|
|
208
|
+
verdict: valid-proposed-threshold
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Unavailable signal — malformed vs clean
|
|
212
|
+
|
|
213
|
+
```yaml
|
|
214
|
+
# malformed — a null with no reason is a silently dropped gap.
|
|
215
|
+
signals:
|
|
216
|
+
saturation: { status: unavailable }
|
|
217
|
+
verdict: invalid-unavailable-signal
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
```yaml
|
|
221
|
+
# clean — the null carries why.
|
|
222
|
+
signals:
|
|
223
|
+
saturation:
|
|
224
|
+
status: unavailable
|
|
225
|
+
reason: "managed runtime exposes no pool or host metrics on this plan"
|
|
226
|
+
verdict: valid-unavailable-signal
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Detected implementation — stack-specific evidence
|
|
230
|
+
|
|
231
|
+
Reached **after** detection, never before it. These are what a detected
|
|
232
|
+
implementation looks like in one common stack; the neutral model above is what
|
|
233
|
+
you reason from. Deep vendor material lives in the specialists, which this skill
|
|
234
|
+
points at rather than absorbing.
|
|
235
|
+
|
|
236
|
+
| Tool | Signal it can carry | Reached by |
|
|
237
|
+
|---|---|---|
|
|
238
|
+
| Error tracker (Sentry) | errors (raised only) | `sentry-integration` |
|
|
239
|
+
| Grafana | any, if the metric exists | `grafana`, `dashboard-design` |
|
|
240
|
+
| Loki | errors and traffic via log volume | `grafana` |
|
|
241
|
+
| Slack webhook | none — a delivery channel | `alerting-doctrine` |
|
|
242
|
+
|
|
243
|
+
A delivery channel is not a signal. Slack carrying error-level messages tells you
|
|
244
|
+
notifications work, not that an error *rate* exists.
|
|
245
|
+
|
|
246
|
+
A channel layout repeats across stacks whatever names it uses: a rotating file
|
|
247
|
+
channel, an error-alert channel, an aggregation channel, and a composite that
|
|
248
|
+
deliberately excludes the alert leg so a noisy job cannot page anyone. Aggregation
|
|
249
|
+
labels carry app, service and environment; the **service** label is what separates
|
|
250
|
+
log types in a query, and a workload needing its own labels gets its own scoped
|
|
251
|
+
channel rather than a shared one. Which categories reach which channel is gated by
|
|
252
|
+
config flags, not by call sites — so read the flags before concluding a category
|
|
253
|
+
is unlogged.
|
|
254
|
+
|
|
255
|
+
→ Log levels, structured context, what to log, and error-tracker patterns:
|
|
256
|
+
guideline `php/logging.md`.
|
|
85
257
|
|
|
86
258
|
## Gotcha
|
|
87
259
|
|
|
88
|
-
-
|
|
260
|
+
- An installed SDK is a capability, not a signal — the commonest false green.
|
|
261
|
+
- Queue **depth** is a traffic signal; queue **wait time** is the saturation one.
|
|
262
|
+
- Saturation needs a ceiling. A utilisation number with no known limit is
|
|
263
|
+
`unknown`, not present.
|
|
264
|
+
- Error trackers see raised exceptions, not handled failures or wrong answers.
|
|
265
|
+
- Sentry has a 200KB event size limit — large context gets truncated.
|
|
89
266
|
- Structured logging keys must be `snake_case`.
|
|
90
|
-
- Don't create
|
|
267
|
+
- Don't create a log channel without the query or dashboard that reads it.
|
|
91
268
|
|
|
92
269
|
## Do NOT
|
|
93
270
|
|
|
94
|
-
- Do NOT
|
|
95
|
-
|
|
96
|
-
- Do NOT
|
|
271
|
+
- Do NOT report three signals because the fourth was inconvenient — record it as
|
|
272
|
+
`unavailable` with a reason, or as `unknown`.
|
|
273
|
+
- Do NOT render a `proposed` or `unknown` threshold as operational.
|
|
274
|
+
- Do NOT treat `unknown` as green, compliant, or "probably fine".
|
|
275
|
+
- Do NOT infer a signal from an installed dependency.
|
|
276
|
+
- Do NOT interpolate variables into log messages — use a context array.
|
|
277
|
+
- Do NOT log at `error` level for expected, handled conditions.
|
|
97
278
|
|
|
98
279
|
## Auto-trigger keywords
|
|
99
280
|
|
|
100
281
|
- logging
|
|
101
282
|
- monitoring
|
|
102
|
-
-
|
|
103
|
-
-
|
|
283
|
+
- observability
|
|
284
|
+
- Golden Signals
|
|
285
|
+
- SLI
|
|
286
|
+
- SLO
|
|
104
287
|
- structured logging
|
|
105
288
|
- log levels
|
|
@@ -13,6 +13,9 @@ trust:
|
|
|
13
13
|
level: experimental
|
|
14
14
|
install:
|
|
15
15
|
removable: true
|
|
16
|
+
scope:
|
|
17
|
+
write: []
|
|
18
|
+
verification_reason: "execution declares no handler, so this skill runs nothing of its own — every write is the calling agent's, under the rules that govern it. No command can prove a scope the skill never executes."
|
|
16
19
|
execution:
|
|
17
20
|
type: manual
|
|
18
21
|
---
|