@event4u/agent-config 16.1.0 → 16.3.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 +98 -257
- package/README.md +14 -12
- package/dist/agent-src/commands/analyze/inbox.md +1 -1
- package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
- package/dist/agent-src/commands/bug/fix.md +17 -2
- package/dist/agent-src/commands/feature/plan.md +1 -1
- package/dist/agent-src/commands/feature/roadmap.md +1 -1
- package/dist/agent-src/commands/fix/ci.md +1 -1
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +5 -5
- package/dist/agent-src/commands/roadmap/resolve-blockers.md +361 -0
- package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
- package/dist/agent-src/commands/roadmap.md +18 -4
- package/dist/agent-src/commands/tests/create.md +17 -3
- package/dist/agent-src/commands/tests/execute.md +22 -5
- package/dist/agent-src/commands/work.md +4 -0
- package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
- package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +6 -6
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +4 -8
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +32 -2
- package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +101 -7
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/autonomous-execution.md +1 -0
- package/dist/agent-src/rules/broken-access-control.md +1 -0
- package/dist/agent-src/rules/command-suggestion-policy.md +1 -0
- package/dist/agent-src/rules/context-hygiene.md +1 -1
- package/dist/agent-src/rules/decision-revisit-gate.md +16 -33
- package/dist/agent-src/rules/design-fidelity.md +13 -16
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -0
- package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -0
- package/dist/agent-src/rules/domain-safety-pii.md +1 -0
- package/dist/agent-src/rules/domain-safety-retention.md +1 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +1 -0
- package/dist/agent-src/rules/evaluator-independence.md +3 -2
- package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -0
- package/dist/agent-src/rules/finance-safety-floor.md +1 -0
- package/dist/agent-src/rules/git-history-discipline.md +1 -0
- package/dist/agent-src/rules/image-likeness-and-rights.md +1 -0
- package/dist/agent-src/rules/legal-safety-floor.md +3 -2
- package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -0
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -0
- package/dist/agent-src/rules/media-governance-routing.md +14 -17
- package/dist/agent-src/rules/persona-governance.md +2 -2
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +1 -1
- package/dist/agent-src/rules/question-not-instruction.md +1 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/runtime-safety.md +1 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +1 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +3 -2
- package/dist/agent-src/rules/session-canary.md +8 -62
- package/dist/agent-src/rules/settings-ask-protocol.md +1 -0
- package/dist/agent-src/rules/source-confidentiality.md +1 -0
- package/dist/agent-src/rules/strategy-safety-floor.md +1 -0
- package/dist/agent-src/rules/tool-safety.md +1 -0
- package/dist/agent-src/rules/ui-audit-gate.md +1 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +1 -0
- package/dist/agent-src/rules/user-interrupt-priority.md +1 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/dist/agent-src/scripts/deferral_carry.ts +339 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +1 -1
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
- package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
- package/dist/agent-src/skills/design-review/SKILL.md +30 -4
- package/dist/agent-src/skills/design-review/references/verification-automation.md +32 -0
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +18 -3
- package/dist/agent-src/skills/existing-ui-audit/references/component-taxonomy-detection.md +56 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +1 -1
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
- package/dist/agent-src/skills/markitdown/SKILL.md +4 -0
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/playwright-testing/SKILL.md +30 -6
- package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
- package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
- package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +25 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +30 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/dist/agent-src/templates/scripts/work_engine/state.ts +57 -7
- package/dist/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
- package/dist/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
- package/dist/cli/python/knowledge_ingest.js +1 -1
- package/dist/cli/python/workspace_drive.js +1 -1
- package/dist/cli/registry.js +1 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
- package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
- package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
- package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-CQWX336L.js} +1 -1
- package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
- package/dist/cli-delegate/chunk-EEHDXSYD.js +2040 -0
- package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-GKE7ZVFA.js} +4 -4
- package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
- package/dist/cli-delegate/{chunk-UNCRJBT3.js → chunk-JQVYKIZA.js} +41 -0
- package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-JY2I2DXV.js} +12 -1
- package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
- package/dist/cli-delegate/{chunk-YUM5KURG.js → chunk-KR6EM23A.js} +235 -1455
- package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-LIYTLH6O.js} +1 -1
- package/dist/cli-delegate/chunk-NQ7WT43P.js +2729 -0
- package/dist/cli-delegate/chunk-NXEILF2K.js +2160 -0
- package/dist/cli-delegate/{chunk-5R7HOLAF.js → chunk-NYX3L2PZ.js} +1 -1
- package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
- package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
- package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-QLDHIPWR.js} +1 -1
- package/dist/cli-delegate/{chunk-HDVVGPQW.js → chunk-RQNNW7IF.js} +1405 -567
- package/dist/cli-delegate/{chunk-S3VFXMTM.js → chunk-S4UMZNES.js} +1 -1
- package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-S4YWNRKO.js} +24 -8
- package/dist/cli-delegate/{chunk-GJCBB2UG.js → chunk-TRI6DQZ6.js} +3054 -325
- package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
- package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
- package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
- package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +1862 -809
- package/dist/cli-delegate/cmd_doctor.js +13 -6
- package/dist/cli-delegate/cmd_doctor_neighbours.js +23 -0
- package/dist/cli-delegate/cmd_explain.js +5 -5
- package/dist/cli-delegate/cmd_export.js +11 -8
- package/dist/cli-delegate/cmd_fleet.js +3 -3
- package/dist/cli-delegate/cmd_handoff.js +10 -7
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +3 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +3 -3
- package/dist/cli-delegate/cmd_preflight.js +6 -6
- package/dist/cli-delegate/cmd_prune.js +11 -8
- package/dist/cli-delegate/cmd_refresh.js +2 -1
- package/dist/cli-delegate/cmd_route_audit.js +8 -6
- package/dist/cli-delegate/cmd_route_explain.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +4 -3
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +11 -8
- package/dist/cli-delegate/cmd_settings_set.js +4 -4
- package/dist/cli-delegate/cmd_sync.js +11 -8
- package/dist/cli-delegate/cmd_uninstall.js +11 -8
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +3 -2
- package/dist/cli-delegate/cmd_validate.js +11 -8
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/deferral_carry.js +16 -0
- package/dist/cli-delegate/gate_execute.js +2 -2
- package/dist/cli-delegate/roadmap_gates.js +5 -5
- package/dist/cli-delegate/update_roadmap_progress.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +132 -80
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +7 -5
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +6 -4
- package/dist/hooks/dispatch.js +7972 -5186
- package/dist/hooks/dispatch.sha256 +1 -0
- package/dist/install/claudePathsPlan.js +47 -6
- package/dist/install/claudeRuleRewrite.js +7 -0
- package/dist/install/emit_host_rules_cli.js +39 -36
- package/dist/install/globalRuleScope.js +87 -0
- package/dist/install/host_rule_ownership.js +160 -0
- package/dist/install/install.mjs +2226 -1055
- package/dist/install/installThinLayer.js +261 -0
- package/dist/install/installedRuleLinks.js +176 -0
- package/dist/install/wizard-plan.js +24 -0
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +40913 -34865
- package/dist/scripts/_lib/agent_settings.js +11 -0
- package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
- package/dist/scripts/_lib/installed_layer.js +378 -0
- package/dist/scripts/_lib/lean_projection_mode.js +218 -15
- package/dist/scripts/_lib/rule_consequence_class.js +45 -0
- package/dist/scripts/_lib/rule_injection.js +67 -10
- package/dist/scripts/_lib/rule_law_section.js +122 -0
- package/dist/scripts/_lib/thin_rules.js +458 -0
- package/dist/scripts/_lib/windsurf_render.js +60 -0
- package/dist/scripts/condense.js +14 -26
- package/dist/scripts/project_thin_rules.js +14 -294
- package/dist/server/schemas/settings.js +29 -0
- package/dist/shared/skillRanking.js +74 -13
- package/dist/ui/assets/index-Cwq4d0hX.js +23 -0
- package/dist/ui/assets/index-Cyjy8bWO.css +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/contracts/settings-classes.md +10 -6
- package/package.json +4 -4
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/src/agent-src/scripts/deferral_carry.ts +339 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/src/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
- package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/src/agent-src/templates/scripts/work_engine/state.ts +57 -7
- package/src/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
- package/src/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
- package/src/config/agent-settings.template.yml +91 -22
- package/src/config/ci-local-parity.yml +18 -0
- package/src/config/continuity-surface.json +9 -2
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +327 -3
- package/src/config/gate-violation-baselines.json +21 -9
- package/src/config/hook-bundle-budget.json +25 -0
- package/src/config/hook-latency-budget.json +21 -0
- package/src/config/hook-token-budget.json +8 -3
- package/src/config/host-instruction-limits.json +33 -0
- package/src/config/metric-registry.yml +114 -0
- package/src/config/placeholder-drift-budget.json +10 -0
- package/src/config/routing-coverage-seed.json +38 -3
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-consequence-class.json +161 -0
- package/src/config/rule-law-ceilings.json +99 -0
- package/src/install/claudePathsPlan.ts +46 -4
- package/src/install/claudeRuleRewrite.ts +10 -1
- package/src/install/emit_host_rules_cli.ts +43 -34
- package/src/install/globalRuleScope.ts +109 -0
- package/src/install/host_rule_ownership.ts +170 -0
- package/src/install/installThinLayer.ts +312 -0
- package/src/install/installedRuleLinks.ts +220 -0
- package/src/install/wizard-plan.ts +24 -0
- package/src/scripts/_cli/cmd_doctor.ts +28 -90
- package/src/scripts/_cli/cmd_doctor_neighbours.ts +293 -0
- package/src/scripts/_cli/doctor_execution.ts +100 -17
- package/src/scripts/_cli/doctor_network_posture.ts +226 -0
- package/src/scripts/_dispatch.bash +16 -2
- package/src/scripts/_lib/agent_settings.ts +11 -0
- package/src/scripts/_lib/body_portable.ts +102 -0
- package/src/scripts/_lib/cc_transcript.ts +132 -1
- package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
- package/src/scripts/_lib/concern_sla_window.ts +200 -0
- package/src/scripts/_lib/estate_offsets.ts +241 -0
- package/src/scripts/_lib/exemption_shape.ts +143 -0
- package/src/scripts/_lib/fnv.ts +23 -0
- package/src/scripts/_lib/foreign_scan.ts +106 -0
- package/src/scripts/_lib/forge_protection.ts +114 -0
- package/src/scripts/_lib/forge_reader.ts +558 -0
- package/src/scripts/_lib/gitignore_block.ts +314 -0
- package/src/scripts/_lib/global_deploy_inventory.ts +32 -0
- package/src/scripts/_lib/graph_feeder_record.ts +214 -0
- package/src/scripts/_lib/hook_settings.ts +73 -0
- package/src/scripts/_lib/host_capability.ts +40 -19
- package/src/scripts/_lib/host_env_write.ts +111 -0
- package/src/scripts/_lib/host_hook_merge.ts +165 -0
- package/src/scripts/_lib/installed_layer.ts +538 -0
- package/src/scripts/_lib/json_merge.ts +82 -0
- package/src/scripts/_lib/json_pointers.ts +93 -11
- package/src/scripts/_lib/lean_projection_mode.ts +275 -15
- package/src/scripts/_lib/llm_proposer_transport.ts +14 -4
- package/src/scripts/_lib/machine_wake.ts +16 -3
- package/src/scripts/_lib/neighbour_census.ts +760 -0
- package/src/scripts/_lib/neighbour_scan.ts +122 -0
- package/src/scripts/_lib/neighbour_tool_use.ts +189 -0
- package/src/scripts/_lib/obligations.ts +119 -8
- package/src/scripts/_lib/probe_inputs.ts +271 -0
- package/src/scripts/_lib/prompt_shape.ts +46 -0
- package/src/scripts/_lib/read_surface_scan.ts +322 -0
- package/src/scripts/_lib/release_highlights.ts +2 -1
- package/src/scripts/_lib/release_migration_gate.ts +19 -3
- package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
- package/src/scripts/_lib/retrieval_sanitize.ts +77 -16
- package/src/scripts/_lib/review_coverage.ts +134 -0
- package/src/scripts/_lib/rule_consequence_class.ts +71 -0
- package/src/scripts/_lib/rule_injection.ts +130 -10
- package/src/scripts/_lib/rule_law_section.ts +147 -0
- package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
- package/src/scripts/_lib/shell_write_shapes.ts +108 -0
- package/src/scripts/_lib/skill_origin.ts +254 -0
- package/src/scripts/_lib/structural_hiding.ts +622 -0
- package/src/scripts/_lib/structured_ask.ts +64 -21
- package/src/scripts/_lib/thin_rules.ts +540 -0
- package/src/scripts/_lib/touched_file_quality.ts +434 -0
- package/src/scripts/_lib/turn_end_refusals.ts +600 -4
- package/src/scripts/_lib/turn_end_transcript.ts +216 -0
- package/src/scripts/_lib/verification_command.ts +324 -0
- package/src/scripts/_lib/verification_evidence.ts +647 -0
- package/src/scripts/_lib/verify_clause.ts +280 -0
- package/src/scripts/_lib/windsurf_render.ts +63 -0
- package/src/scripts/ai_council/cli_call_budget.ts +13 -5
- package/src/scripts/ai_council/clients.ts +26 -57
- package/src/scripts/ai_council/config.ts +1 -1
- package/src/scripts/ai_council/vendor_defaults.ts +45 -0
- package/src/scripts/ai_team/team_dispatch.ts +4 -0
- package/src/scripts/audit_skill_overlap.ts +261 -0
- package/src/scripts/before_complete_hook.ts +573 -25
- package/src/scripts/bench_hook_latency.ts +412 -5
- package/src/scripts/bench_touched_file_quality.ts +238 -0
- package/src/scripts/cache_realization_report.ts +61 -1
- package/src/scripts/check_argument_hint.ts +287 -0
- package/src/scripts/check_claims.ts +125 -1
- package/src/scripts/check_enforcement_coverage.ts +38 -9
- package/src/scripts/check_enforcement_matrix.ts +621 -22
- package/src/scripts/check_estate_count.ts +130 -153
- package/src/scripts/check_finding_dispositions.ts +138 -7
- package/src/scripts/check_generator_sync.ts +71 -0
- package/src/scripts/check_hook_bundle_composition.ts +370 -0
- package/src/scripts/check_host_docs_digest.ts +786 -0
- package/src/scripts/check_host_format_column.ts +559 -0
- package/src/scripts/check_input_references.ts +228 -0
- package/src/scripts/check_inputs_parity.ts +235 -0
- package/src/scripts/check_kernel_edit_ratified.ts +89 -9
- package/src/scripts/check_kill_switch_table.ts +294 -0
- package/src/scripts/check_memory.ts +7 -1
- package/src/scripts/check_placeholder_drift.ts +221 -0
- package/src/scripts/check_read_surface_coverage.ts +515 -0
- package/src/scripts/check_release_highlights.ts +10 -0
- package/src/scripts/check_release_holds.ts +2 -1
- package/src/scripts/check_release_pr_shape.ts +38 -15
- package/src/scripts/check_routing_coverage.ts +378 -11
- package/src/scripts/check_standing_rule_delivery.ts +33 -13
- package/src/scripts/check_static_parity.ts +17 -0
- package/src/scripts/check_verify_expectation_delta.ts +521 -0
- package/src/scripts/ci_settle.ts +145 -19
- package/src/scripts/closure_scan.ts +115 -1
- package/src/scripts/code_graph/detect.ts +127 -7
- package/src/scripts/code_graph/foreign.ts +194 -0
- package/src/scripts/code_graph/query.ts +217 -4
- package/src/scripts/code_graph/types.ts +26 -2
- package/src/scripts/code_graph/validate.ts +3 -1
- package/src/scripts/code_graph/verbs.ts +103 -0
- package/src/scripts/compile_hook_manifest.ts +90 -14
- package/src/scripts/condense.ts +14 -27
- package/src/scripts/estate_exemption_shape.ts +202 -0
- package/src/scripts/external_sources_denylist.json +29 -4
- package/src/scripts/generate_host_cost_table.ts +1 -1
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +192 -14
- package/src/scripts/hooks/block_config_weakening.ts +294 -4
- package/src/scripts/hooks/block_kernel_rule_writes.ts +9 -78
- package/src/scripts/hooks/block_plumbing_writes.ts +342 -0
- package/src/scripts/hooks/bundle_integrity.ts +291 -0
- package/src/scripts/hooks/chain_nudge_hook.ts +1 -2
- package/src/scripts/hooks/code_graph_context_hook.ts +253 -25
- package/src/scripts/hooks/comment_discipline_hook.ts +1 -3
- package/src/scripts/hooks/concern_failure_policy.ts +280 -0
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/concern_timings.ts +94 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +1 -2
- package/src/scripts/hooks/design_pass_hook.ts +100 -9
- package/src/scripts/hooks/design_slop_hook.ts +1 -2
- package/src/scripts/hooks/dispatch_hook.ts +77 -71
- package/src/scripts/hooks/edit_shape_hook.ts +1 -2
- package/src/scripts/hooks/end_review_nudge_hook.ts +1 -1
- package/src/scripts/hooks/evidence_independence.ts +1 -2
- package/src/scripts/hooks/exit_codes.ts +129 -0
- package/src/scripts/hooks/host_lowering.json +1 -0
- package/src/scripts/hooks/host_lowering.ts +146 -3
- package/src/scripts/hooks/host_lowering.yaml +262 -46
- package/src/scripts/hooks/host_semantics.ts +30 -2
- package/src/scripts/hooks/injection_budget.ts +9 -2
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -2
- package/src/scripts/hooks/journal_record_hook.ts +1 -2
- package/src/scripts/hooks/memory_recall_hook.ts +1 -2
- package/src/scripts/hooks/obligation_settle_hook.ts +151 -5
- package/src/scripts/hooks/one_question_per_ask_hook.ts +43 -6
- package/src/scripts/hooks/orchestration_record_hook.ts +1 -2
- package/src/scripts/hooks/payload_stub.ts +10 -1
- package/src/scripts/hooks/permission_gate.ts +1 -2
- package/src/scripts/hooks/push_settle_hook.ts +1 -3
- package/src/scripts/hooks/replay_hook.ts +2 -1
- package/src/scripts/hooks/reread_guard_hook.ts +1 -2
- package/src/scripts/hooks/review_baseline_hook.ts +1 -2
- package/src/scripts/hooks/rtk_wrap_hook.ts +1 -2
- package/src/scripts/hooks/rule_inject_hook.ts +765 -68
- package/src/scripts/hooks/run_continuation_hook.ts +13 -15
- package/src/scripts/hooks/skill_route_hook.ts +1 -2
- package/src/scripts/hooks/source_first_gate_hook.ts +1 -2
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +1 -2
- package/src/scripts/hooks/subagent_ledger_hook.ts +1 -2
- package/src/scripts/hooks/suggestion_capture_hook.ts +1 -1
- package/src/scripts/hooks/table_fingerprint.ts +70 -0
- package/src/scripts/hooks/telemetry_flush_hook.ts +1 -2
- package/src/scripts/hooks/telemetry_usage_hook.ts +65 -10
- package/src/scripts/hooks/tool_result_bytes_hook.ts +93 -9
- package/src/scripts/hooks/turn_end_gate_hook.ts +421 -324
- package/src/scripts/hooks/ui_route_nudge_hook.ts +1 -2
- package/src/scripts/hooks_status.ts +112 -0
- package/src/scripts/injection_scan_hook.ts +7 -0
- package/src/scripts/install.ts +75 -189
- package/src/scripts/installed_layer_report.ts +103 -0
- package/src/scripts/language_mirror_hook.ts +15 -6
- package/src/scripts/learning_sidecar.ts +119 -8
- package/src/scripts/lint_deny_text.ts +419 -0
- package/src/scripts/lint_exit_codes.ts +262 -0
- package/src/scripts/lint_hook_manifest.ts +108 -0
- package/src/scripts/lint_major_migration_sections.ts +156 -26
- package/src/scripts/lint_pack_boundaries.ts +63 -5
- package/src/scripts/lint_roadmap_blockers.ts +78 -12
- package/src/scripts/lint_rule_law_section.ts +517 -0
- package/src/scripts/lint_skill_descriptions.ts +1 -1
- package/src/scripts/lint_skill_scripts_readonly.ts +1 -1
- package/src/scripts/lint_workflow_security.ts +161 -5
- package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
- package/src/scripts/mcp_server/graph_tools.ts +72 -3
- package/src/scripts/mcp_server/prompts.ts +142 -1
- package/src/scripts/measure_routing_signal.ts +54 -16
- package/src/scripts/measure_skill_ranker_baseline.ts +515 -53
- package/src/scripts/measure_turn_end_gate.ts +193 -0
- package/src/scripts/memory_learn_hook.ts +91 -6
- package/src/scripts/memory_lookup.ts +1 -1
- package/src/scripts/model_rule_injection.ts +52 -5
- package/src/scripts/prepack-check.mjs +53 -0
- package/src/scripts/project_thin_rules.ts +34 -327
- package/src/scripts/release_publication.ts +13 -1
- package/src/scripts/report_evidence_temperature.ts +657 -0
- package/src/scripts/report_installed_rule_links.ts +157 -0
- package/src/scripts/report_invocation_surface.ts +383 -0
- package/src/scripts/report_label_agreement.ts +233 -0
- package/src/scripts/report_obligation_carriers.ts +699 -0
- package/src/scripts/report_obligation_mechanism.ts +230 -0
- package/src/scripts/report_obligation_writer_split.ts +236 -0
- package/src/scripts/report_single_token_triggers.ts +277 -0
- package/src/scripts/report_skill_menu_census.ts +208 -0
- package/src/scripts/report_skill_ranker_confusion.ts +442 -0
- package/src/scripts/report_standing_payload_by_host.ts +188 -15
- package/src/scripts/report_verification_record_coverage.ts +306 -0
- package/src/scripts/roadmap_verify_share.ts +213 -0
- package/src/scripts/rule_activation_census.ts +5 -2
- package/src/scripts/rule_trigger_eval.ts +9 -9
- package/src/scripts/schemas/command.schema.json +44 -0
- package/src/scripts/schemas/review-findings.schema.json +7 -2
- package/src/scripts/schemas/rule.schema.json +5 -0
- package/src/scripts/schemas/skill.schema.json +44 -0
- package/src/scripts/self_review_gate.ts +421 -17
- package/src/scripts/semantic_parity_census.ts +314 -0
- package/src/scripts/session_eol_report.ts +54 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +290 -25
- package/src/scripts/sweep_dead_scan_roots.ts +1 -1
- package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
- package/src/scripts/sync_gitignore.ts +29 -235
- package/src/scripts/trigger_eval_grandfather.json +0 -7
- package/src/scripts/trigger_eval_rotation.ts +122 -27
- package/src/scripts/ui_conformance_probe.ts +156 -4
- package/src/scripts/update_prices.ts +85 -3
- package/src/scripts/write_bundle_digest.mjs +74 -0
- package/src/server/schemas/settings.ts +41 -0
- package/src/shared/skillRanking.ts +117 -11
- package/src/templates/consumer-settings/ONBOARDING.md +1 -0
- package/dist/cli-delegate/chunk-FXYUYU4N.js +0 -4416
- package/dist/cli-delegate/chunk-QJWAUMJW.js +0 -1072
- package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
- package/dist/ui/assets/index-DH1xc62v.js +0 -29
- package/dist/ui/assets/index-jSfMW8_t.css +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# existing-ui-audit — component-taxonomy detection
|
|
2
|
+
|
|
3
|
+
> Section-level entry point of the `existing-ui-audit` skill (progressive
|
|
4
|
+
> disclosure). Load this file when § 1b of SKILL.md routes here — it carries
|
|
5
|
+
> the detection rules and the boundary the step must not cross.
|
|
6
|
+
|
|
7
|
+
## What the detector answers
|
|
8
|
+
|
|
9
|
+
The question is *"has this project already chosen a way to organize its
|
|
10
|
+
components by granularity, and if so what does it call the tiers?"* — never
|
|
11
|
+
*"which taxonomy should this project use?"*. The recorded value is the
|
|
12
|
+
project's **own** tier directory names, in the project's own order, joined
|
|
13
|
+
with `/`, or `none`. Nothing canonical is ever written: a project with three
|
|
14
|
+
tiers records three, and a project whose tiers are called
|
|
15
|
+
`primitives / patterns / features` records exactly that.
|
|
16
|
+
|
|
17
|
+
## Three properties, each pinned by a test
|
|
18
|
+
|
|
19
|
+
- **Declared outranks inferred.** A `## Component taxonomy` section in the
|
|
20
|
+
consumer project's own `DESIGN.md`, at its root or under `docs/`, listing
|
|
21
|
+
backticked directory names as list items wins, provided at least two of
|
|
22
|
+
those directories exist
|
|
23
|
+
under the component root. The name may be bolded — `- **\`atoms\`** — ...`
|
|
24
|
+
is read exactly like `` - `atoms` — ... ``. Grounding the declaration against
|
|
25
|
+
the tree keeps a stale doc from declaring a taxonomy the tree does not have,
|
|
26
|
+
and a backticked name in prose rather than in a list item is a mention, not a
|
|
27
|
+
declaration. This is how a project whose tiers appear in no vocabulary the
|
|
28
|
+
detector knows still gets conformance. The first doc that *qualifies* wins:
|
|
29
|
+
one with no section, or one naming fewer than two tiers that exist on disk,
|
|
30
|
+
falls through to the next.
|
|
31
|
+
|
|
32
|
+
- **A folder that merely sounds like a tier is a collision, not a convention.**
|
|
33
|
+
`components/{checkout,billing,molecules}` records `none`, and so does the
|
|
34
|
+
ordinary kind split `components/{layout,pages,forms}` — `layout`, `page`,
|
|
35
|
+
`block`, `element`, `part` and `cell` are all everyday folder names as well
|
|
36
|
+
as granularity words. Inference needs at least two tier-shaped buckets **and**
|
|
37
|
+
more than two thirds of the weighed ones; support folders (`hooks`, `utils`,
|
|
38
|
+
`types`, `lib`, `styles`, …) are left out of the denominator, so three
|
|
39
|
+
ordinary siblings cannot hide a taxonomy that is really there. Each floor has
|
|
40
|
+
its own fixture, because at one hit in three buckets either floor alone would
|
|
41
|
+
still refuse and neither would be tested.
|
|
42
|
+
|
|
43
|
+
- **`none` is a real answer, not a failure.** A flat tree, an unreadable tree,
|
|
44
|
+
a missing component folder, a permission error: all record `none`, and every
|
|
45
|
+
downstream step then behaves exactly as it did before this detection
|
|
46
|
+
existed. Detection never throws — degrading to `none` is the safe direction,
|
|
47
|
+
because `none` is precisely the value that leaves the project's own
|
|
48
|
+
structures untouched.
|
|
49
|
+
|
|
50
|
+
## The boundary
|
|
51
|
+
|
|
52
|
+
Never write a taxonomy the project does not evidence, and never "tidy" an
|
|
53
|
+
existing layout into one. Holding to the project's own structures is the
|
|
54
|
+
standing rule; this step exists to *find* that structure, not to supply one.
|
|
55
|
+
The single place a taxonomy is ever *offered* is the greenfield halt in § 7,
|
|
56
|
+
and a decline there is terminal.
|
|
@@ -29,7 +29,7 @@ machinery that already exists: `search_stack` in
|
|
|
29
29
|
[`corpus-grounding`](../corpus-grounding/SKILL.md)
|
|
30
30
|
(`scripts/decision_engine.ts`), whose stack corpus carries `threejs.csv` among
|
|
31
31
|
its stacks, read beside the register in
|
|
32
|
-
|
|
32
|
+
`design-intelligence`
|
|
33
33
|
§ Register. No second frontend executor is declared, and none is needed: a
|
|
34
34
|
renderer changes what you ground against, never who writes the UI.
|
|
35
35
|
|
|
@@ -42,7 +42,7 @@ execution:
|
|
|
42
42
|
is the anti-pattern [`icon-consistency`](../../rules/icon-consistency.md)
|
|
43
43
|
§ What this gates names by name. Stop at the first rung that answers.
|
|
44
44
|
1. **A brand token or brand guide that names an icon set** — authoritative,
|
|
45
|
-
stop here (
|
|
45
|
+
stop here (`brand-source-of-truth`).
|
|
46
46
|
2. **The set already in use in this project** — detected at the Inspect step
|
|
47
47
|
of the Iconography floor below. One icon system per project; a second
|
|
48
48
|
visual language is the defect, not a preference.
|
|
@@ -17,7 +17,7 @@ packs:
|
|
|
17
17
|
> A React or TypeScript consumer receives this skill through `engineering-base`, which both
|
|
18
18
|
> of those packs require.
|
|
19
19
|
|
|
20
|
-
The JavaScript twin of
|
|
20
|
+
The JavaScript twin of `composer-packages`. A component is
|
|
21
21
|
a file; a **library** is a package with a public surface, and that surface is declared in
|
|
22
22
|
`package.json` rather than inferred. Most of the failures below are silent at author time
|
|
23
23
|
and loud at the consumer's — which is why the surface is read, not assumed.
|
|
@@ -167,7 +167,7 @@ declared cost — never here.
|
|
|
167
167
|
|
|
168
168
|
## See also
|
|
169
169
|
|
|
170
|
-
-
|
|
170
|
+
- `composer-packages` — the PHP twin; same surface discipline, different manifest.
|
|
171
171
|
- [`standards-from-config`](../standards-from-config/SKILL.md) — the Class-A rule the § Release branch follows.
|
|
172
172
|
- [`conventional-commits-writing`](../conventional-commits-writing/SKILL.md) — the `!` marker a release tool reads.
|
|
173
173
|
- [`ui-component-architect`](../ui-component-architect/SKILL.md) — the component inside the library; this skill is the package around it.
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: medium
|
|
3
3
|
name: markitdown
|
|
4
|
+
inputs:
|
|
5
|
+
- name: source
|
|
6
|
+
type: string
|
|
7
|
+
description: "URI of the document to convert — file:, https: or data: (http: is refused). Absent means the skill is being read for its scheme discipline rather than invoked."
|
|
4
8
|
description: "Convert PDF, DOCX, XLSX, PPTX, EPUB, images, or audio to Markdown via the markitdown-mcp server — 'extract this PDF', 'OCR this image', 'transcribe this audio'."
|
|
5
9
|
status: active
|
|
6
10
|
tier: senior
|
|
@@ -104,7 +104,7 @@ for `workspace:`-linked packages.
|
|
|
104
104
|
|
|
105
105
|
State plainly that the listing came from manifests rather than the runner — an
|
|
106
106
|
inferred target list can miss runner-inferred targets. This is the posture
|
|
107
|
-
|
|
107
|
+
`react-shadcn-ui` already takes for the shadcn
|
|
108
108
|
CLI; the stop condition is `missing-tool-handling` (never install it silently,
|
|
109
109
|
never fake the output).
|
|
110
110
|
|
|
@@ -144,22 +144,46 @@ test('homepage visual regression', async ({ page }) => {
|
|
|
144
144
|
|
|
145
145
|
## Viewport testing
|
|
146
146
|
|
|
147
|
+
A viewport loop whose only assertion is an image proves that the page rendered,
|
|
148
|
+
not that the breakpoint did anything: the same picture comes back whether the
|
|
149
|
+
media query fired or silently did not. Assert the layout property the breakpoint
|
|
150
|
+
is supposed to change, then keep the capture and name it for the one thing it
|
|
151
|
+
proves.
|
|
152
|
+
|
|
147
153
|
```ts
|
|
148
154
|
test.describe('Responsive design', () => {
|
|
149
155
|
for (const viewport of [
|
|
150
|
-
{ width: 1440, height: 900, name: 'desktop' },
|
|
151
|
-
{ width: 768, height: 1024, name: 'tablet' },
|
|
152
|
-
{ width: 375, height: 812, name: 'mobile' },
|
|
156
|
+
{ width: 1440, height: 900, name: 'desktop', columns: '1fr 1fr 1fr' },
|
|
157
|
+
{ width: 768, height: 1024, name: 'tablet', columns: '1fr 1fr' },
|
|
158
|
+
{ width: 375, height: 812, name: 'mobile', columns: '1fr' },
|
|
153
159
|
]) {
|
|
154
|
-
test(`
|
|
155
|
-
await page.setViewportSize(viewport)
|
|
160
|
+
test(`lays out correctly on ${viewport.name}`, async ({ page }) => {
|
|
161
|
+
await page.setViewportSize({ width: viewport.width, height: viewport.height })
|
|
156
162
|
await page.goto('/')
|
|
157
|
-
|
|
163
|
+
// Behaviour: the declared breakpoint actually changed the layout.
|
|
164
|
+
await expect(page.locator('#grid')).toHaveCSS('grid-template-columns', viewport.columns)
|
|
165
|
+
// Appearance only: presence + sanity that nothing renders broken.
|
|
166
|
+
await expect(page).toHaveScreenshot(`appearance-${viewport.name}.png`)
|
|
158
167
|
})
|
|
159
168
|
}
|
|
160
169
|
})
|
|
161
170
|
```
|
|
162
171
|
|
|
172
|
+
**Read the probe artifact rather than re-deriving the matrix by hand.**
|
|
173
|
+
`agents/runtime/state/ui-conformance.json` — produced by
|
|
174
|
+
`ui_conformance_probe --target <file> --reference <file>` — carries a
|
|
175
|
+
`viewport_matrix` row per declared width, plus a not-applicable row with its
|
|
176
|
+
reason wherever the host could not cross the breakpoint. A width with no row is
|
|
177
|
+
missing evidence, not a pass, and no dimension reads zero findings because it did
|
|
178
|
+
not run.
|
|
179
|
+
|
|
180
|
+
**The capture above is appearance-only, and it stays mandatory.** It proves
|
|
181
|
+
presence and sanity — the surface rendered and nothing renders obviously broken —
|
|
182
|
+
and proves nothing about hover, focus, keyboard or a media-preference branch.
|
|
183
|
+
Demoting it from behavioral evidence does not narrow when it runs: it still runs
|
|
184
|
+
at every width in the matrix. Floor and division of labour:
|
|
185
|
+
[`design-review`](../design-review/SKILL.md) § Appearance verification.
|
|
186
|
+
|
|
163
187
|
## Debugging
|
|
164
188
|
|
|
165
189
|
```bash
|
|
@@ -27,6 +27,8 @@ Use this skill whenever running or configuring code quality tools:
|
|
|
27
27
|
|
|
28
28
|
- **PHP**: PHPStan (static analysis), Rector (automated refactoring), ECS (coding standards)
|
|
29
29
|
- **JS/TS**: Biome (linting + formatting), TypeScript compiler (type checking), Jest/Vitest (tests)
|
|
30
|
+
- **Python**: Ruff (linting + formatting), mypy (type checking), pytest (tests)
|
|
31
|
+
- **Go**: `gofmt`, `go vet`, optionally golangci-lint, `go test`
|
|
30
32
|
|
|
31
33
|
## Modes
|
|
32
34
|
|
|
@@ -39,8 +41,16 @@ stack calls for.
|
|
|
39
41
|
|---|---|---|
|
|
40
42
|
| PHP (`.php` changed) | [`references/php-tools.md`](references/php-tools.md) | Tool detection, PHPStan / ECS / Rector commands and flags, combined pipeline, config files, baseline policy, PHPStan error handling, testing framework, git-aware execution |
|
|
41
43
|
| JS/TS (`.js` / `.ts` / `.tsx` changed) | [`references/js-ts-tools.md`](references/js-ts-tools.md) | Detection, Biome, TypeScript type checking, Jest / Vitest, the JS/TS workflow sequence |
|
|
44
|
+
| Python (`.py` changed, or `pyproject.toml`) | [`references/python-tools.md`](references/python-tools.md) | Detection from `pyproject.toml`, Ruff, mypy, pytest, the workflow sequence, virtualenv and `setup.cfg` gotchas |
|
|
45
|
+
| Go (`.go` changed, or `go.mod`) | [`references/go-tools.md`](references/go-tools.md) | `gofmt`, `go vet`, golangci-lint where present, `go test`, the workflow sequence, vendor and build-tag gotchas |
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
More than one stack changed → load each mode body and run each pipeline.
|
|
48
|
+
|
|
49
|
+
**The resolver decides which row applies, not the file extension alone.**
|
|
50
|
+
`resolve_toolchain` returns the ecosystems it found and the quality commands
|
|
51
|
+
per ecosystem; the rows above name what those commands are. A TypeScript
|
|
52
|
+
repository resolves the ecosystem `js`, never `typescript` — the pack name and
|
|
53
|
+
the ecosystem label are different vocabularies.
|
|
44
54
|
|
|
45
55
|
## Execution policy — on demand only, never proactive
|
|
46
56
|
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# quality-tools — Go quality tools
|
|
2
|
+
|
|
3
|
+
> Mode body of the [`quality-tools`](../SKILL.md) skill. Load this file when
|
|
4
|
+
> the mode table in SKILL.md routes here. The cross-mode material — execution
|
|
5
|
+
> policy, environment, output discipline — stays in SKILL.md and is NOT
|
|
6
|
+
> repeated here.
|
|
7
|
+
|
|
8
|
+
# Go Quality Tools
|
|
9
|
+
|
|
10
|
+
## Detection
|
|
11
|
+
|
|
12
|
+
`resolve_toolchain` (`work_engine/stack/runner.ts`) keys the Go ecosystem on
|
|
13
|
+
`go.mod` and resolves exactly one quality command, `go vet ./...`, plus the
|
|
14
|
+
test command `go test ./...`. It does **not** detect `golangci-lint`, so a
|
|
15
|
+
repository that uses one will show a `quality` list shorter than what its CI
|
|
16
|
+
runs. Read the repository's CI workflow before concluding the resolver's list
|
|
17
|
+
is the whole gate.
|
|
18
|
+
|
|
19
|
+
| Signal | Tool | What it does |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| `go.mod` present | **`go vet`** | The toolchain's own correctness checks — printf verbs, struct tags, unreachable code, lost cancel |
|
|
22
|
+
| `go.mod` present | **`gofmt`** | Canonical formatting; not resolved as a command because it is not optional in Go |
|
|
23
|
+
| `.golangci.yml` / `.golangci.yaml` | **golangci-lint** | Meta-linter; the resolver does not detect it |
|
|
24
|
+
|
|
25
|
+
## The toolchain's own commands
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
gofmt -l . # list files whose formatting differs — empty is the pass
|
|
29
|
+
gofmt -w . # rewrite them
|
|
30
|
+
go vet ./... # the resolver's quality command
|
|
31
|
+
go build ./... # compiles; the cheapest proof the tree is coherent
|
|
32
|
+
go test ./... # the resolver's test command
|
|
33
|
+
go test -run '<regexp>' ./pkg/... # the targeted probe
|
|
34
|
+
go test -race ./... # the race detector — slow, and the only thing that finds a data race
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**`gofmt -l .` with empty output is the pass.** It exits 0 whether or not it
|
|
38
|
+
listed files, so a pipeline that checks only the exit code never fails on
|
|
39
|
+
formatting. Check the output, not the status.
|
|
40
|
+
|
|
41
|
+
## golangci-lint, where a project has it
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
golangci-lint run # the whole configured set
|
|
45
|
+
golangci-lint run ./pkg/... # scoped to a package
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
It wraps `go vet` among others, so a project with `.golangci.yml` does not
|
|
49
|
+
need `go vet` run separately — and running both doubles the report rather than
|
|
50
|
+
widening it.
|
|
51
|
+
|
|
52
|
+
## Workflow sequence
|
|
53
|
+
|
|
54
|
+
1. `gofmt -l .` — read the output, not the exit code.
|
|
55
|
+
2. `go build ./...` — a compile error makes every later step meaningless.
|
|
56
|
+
3. `go vet ./...`, or `golangci-lint run` where the project has it.
|
|
57
|
+
4. `go test -run '<the thing you changed>' ./pkg/...` — targeted.
|
|
58
|
+
5. `go test ./...`, once, at the end; `-race` where concurrency changed.
|
|
59
|
+
|
|
60
|
+
## Gotchas
|
|
61
|
+
|
|
62
|
+
- **`./...` from the wrong directory.** The pattern is relative to the working
|
|
63
|
+
directory, not to the module root. Run it from the directory holding
|
|
64
|
+
`go.mod`, or name the module path.
|
|
65
|
+
- **A vendored tree.** With `vendor/` present the toolchain defaults to
|
|
66
|
+
`-mod=vendor`; a dependency added to `go.mod` but not vendored fails to build
|
|
67
|
+
with an error that names the package, not the mode. `go mod vendor` after any
|
|
68
|
+
dependency change.
|
|
69
|
+
- **Build tags hide packages.** `go vet ./...` and `go test ./...` skip files
|
|
70
|
+
excluded by build constraints, so a green run says nothing about a
|
|
71
|
+
`//go:build integration` file. Name the tag (`-tags integration`) to reach it.
|
|
72
|
+
- **No `go` pack exists in this suite yet.** Go artifacts route through
|
|
73
|
+
`engineering-base` and this reference; `src/packs/go/pack.yaml` <!-- ref-ignore --> is created by
|
|
74
|
+
`road-to-stacks-beyond-php` step 2.3, which is blocked on the programme's
|
|
75
|
+
skill-growth question. Until then this file is the whole of the Go quality
|
|
76
|
+
surface, by design rather than by omission.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# quality-tools — Python quality tools
|
|
2
|
+
|
|
3
|
+
> Mode body of the [`quality-tools`](../SKILL.md) skill. Load this file when
|
|
4
|
+
> the mode table in SKILL.md routes here. The cross-mode material — execution
|
|
5
|
+
> policy, environment, output discipline — stays in SKILL.md and is NOT
|
|
6
|
+
> repeated here.
|
|
7
|
+
|
|
8
|
+
# Python Quality Tools
|
|
9
|
+
|
|
10
|
+
## Detection
|
|
11
|
+
|
|
12
|
+
The resolver is the authority, not this table. `resolve_toolchain`
|
|
13
|
+
(`work_engine/stack/runner.ts`) reads `pyproject.toml` and returns the quality
|
|
14
|
+
commands it found; run those. The table says what each one is, so a reader can
|
|
15
|
+
tell a missing tool from an unknown one.
|
|
16
|
+
|
|
17
|
+
| Indicator in `pyproject.toml` | Tool | What it does |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `[tool.ruff]` | **Ruff** | Linting and formatting in one binary; replaces flake8, isort, pyupgrade and (with `ruff format`) black |
|
|
20
|
+
| `[tool.mypy]` | **mypy** | Static type checking |
|
|
21
|
+
| `[tool.pytest.ini_options]` | **pytest** | Test runner — the resolver binds it as the test command, not as a quality command |
|
|
22
|
+
|
|
23
|
+
A repository with none of the three resolves an empty `quality` list. That
|
|
24
|
+
means **none was resolved**, never that none is needed — the same distinction
|
|
25
|
+
SKILL.md draws for ruby, jvm and dotnet.
|
|
26
|
+
|
|
27
|
+
## Ruff — linting and formatting
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
ruff check . # lint, read-only
|
|
31
|
+
ruff check --fix . # lint and apply the safe fixes
|
|
32
|
+
ruff format . # format
|
|
33
|
+
ruff format --check . # format check, read-only — what CI runs
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Config lives in `[tool.ruff]` in `pyproject.toml` (or `ruff.toml`). The two
|
|
37
|
+
settings that change what the other commands mean:
|
|
38
|
+
|
|
39
|
+
- `line-length` — the formatter's wrap column; `ruff check` reports `E501`
|
|
40
|
+
against the same number.
|
|
41
|
+
- `[tool.ruff.lint] select` / `ignore` — the rule set. An empty `select` is
|
|
42
|
+
Ruff's default set, not "no rules".
|
|
43
|
+
|
|
44
|
+
**`--fix` is not a formatter.** `ruff check --fix` rewrites code to satisfy
|
|
45
|
+
lint rules; `ruff format` rewrites layout. A pipeline that runs only the first
|
|
46
|
+
leaves formatting drift that CI's `ruff format --check` then fails on.
|
|
47
|
+
|
|
48
|
+
## mypy — type checking
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
mypy . # check the package
|
|
52
|
+
mypy --strict . # every optional strictness flag on
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Config lives in `[tool.mypy]`. `strict = true` there is the same as `--strict`
|
|
56
|
+
on the command line, so passing the flag to a project that already sets it
|
|
57
|
+
changes nothing — and passing it to one that does not is a different check
|
|
58
|
+
from the one CI runs. Read the config before adding flags.
|
|
59
|
+
|
|
60
|
+
An error mypy reports on a file the current change did not touch is
|
|
61
|
+
pre-existing debt. Treat it the way SKILL.md's baseline policy treats a
|
|
62
|
+
PHPStan baseline entry: it is not this change's to clear silently.
|
|
63
|
+
|
|
64
|
+
## pytest — the test runner
|
|
65
|
+
|
|
66
|
+
Not a quality tool, listed here because the resolver finds it in the same
|
|
67
|
+
file and a reader looking for "the Python commands" expects it.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pytest # the resolver's bound command
|
|
71
|
+
pytest -q # quiet, what `addopts = "-q"` already sets
|
|
72
|
+
pytest -k '<expr>' # filter by name — the targeted probe
|
|
73
|
+
pytest path/to/test.py # filter by file
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Run the filtered form when verifying one fix. The whole suite is the final
|
|
77
|
+
gate, never the per-iteration probe.
|
|
78
|
+
|
|
79
|
+
## Workflow sequence
|
|
80
|
+
|
|
81
|
+
1. `ruff format --check .` — fails fast and costs nothing.
|
|
82
|
+
2. `ruff check .` — lint.
|
|
83
|
+
3. `mypy .` — types.
|
|
84
|
+
4. `pytest -k '<the thing you changed>'` — targeted.
|
|
85
|
+
5. The full suite, once, at the end.
|
|
86
|
+
|
|
87
|
+
Each step is cheaper and narrower than the next, so running them out of order
|
|
88
|
+
spends the expensive verdict on a failure the cheap one would have named.
|
|
89
|
+
|
|
90
|
+
## Gotchas
|
|
91
|
+
|
|
92
|
+
- **A virtualenv the agent did not activate.** `ruff` and `mypy` installed in
|
|
93
|
+
a project venv are not on `PATH` outside it. `python -m ruff` / `python -m
|
|
94
|
+
mypy` run the installed copy; a bare `ruff` may run a different version or
|
|
95
|
+
none.
|
|
96
|
+
- **`requirements.txt` only.** The resolver still binds pytest (at MEDIUM
|
|
97
|
+
confidence) but finds no quality commands, because it reads them from
|
|
98
|
+
`pyproject.toml`. An empty `quality` list on such a repository is correct
|
|
99
|
+
output, not a detection bug.
|
|
100
|
+
- **`setup.cfg` and `tox.ini` carry config too.** Older projects keep flake8
|
|
101
|
+
and mypy settings there. The resolver does not read them; if a project has
|
|
102
|
+
no `[tool.*]` block and a populated `setup.cfg`, the tools are configured and
|
|
103
|
+
the resolver's empty list is a gap in the resolver, worth reporting rather
|
|
104
|
+
than working around.
|
|
@@ -31,7 +31,7 @@ Do NOT use when:
|
|
|
31
31
|
- The diff is low-risk and no ownership map exists — fall back to the
|
|
32
32
|
common role vocabulary below.
|
|
33
33
|
- A full PR description is requested — route to
|
|
34
|
-
|
|
34
|
+
`/pr:create:description-only` and let
|
|
35
35
|
it call this skill for the routing block.
|
|
36
36
|
- A threat model is wanted — route to
|
|
37
37
|
[`threat-modeling`](../threat-modeling/SKILL.md).
|
|
@@ -210,6 +210,6 @@ Data source: <"ownership-map.yml + historical-bug-patterns.yml"
|
|
|
210
210
|
|
|
211
211
|
- [`reviewer-awareness`](../../rules/reviewer-awareness.md) — the rule that routes here: anchor reviewer choice in paths and risk, never seniority
|
|
212
212
|
- [`review-routing-data-format`](../../guidelines/agent-infra/review-routing-data-format.md)
|
|
213
|
-
-
|
|
213
|
+
- `/pr:create:description-only`
|
|
214
214
|
- [`judge-test-coverage`](../judge-test-coverage/SKILL.md) — consumes
|
|
215
215
|
the `required_test` entries from matched patterns.
|
|
@@ -213,7 +213,7 @@ is the wrong question asked well.
|
|
|
213
213
|
**The escalation threshold applies here too.** A third recurrence of the same
|
|
214
214
|
violation class converts an observation into a deterministic gate — and a review
|
|
215
215
|
finding never silently becomes a hard gate. Both halves, specified in
|
|
216
|
-
|
|
216
|
+
`decision-review` § Removal is a disposition.
|
|
217
217
|
|
|
218
218
|
## Output format
|
|
219
219
|
|
|
@@ -16,7 +16,7 @@ agent reads to learn what the component accepts, and the harness that catches a
|
|
|
16
16
|
focus defect while the component is still in isolation. Stack-agnostic — the tool is
|
|
17
17
|
Storybook, the discipline is not.
|
|
18
18
|
|
|
19
|
-
Lifted out of
|
|
19
|
+
Lifted out of `react-shadcn-ui` § Component workshop, which
|
|
20
20
|
keeps a pointer here rather than a copy.
|
|
21
21
|
|
|
22
22
|
## The Iron Law
|
|
@@ -135,7 +135,7 @@ Run the project's story test command (the Vitest addon's `storybook test`, or wh
|
|
|
135
135
|
`package.json` declares — read it, do not assume a name), then read the a11y result.
|
|
136
136
|
|
|
137
137
|
Write findings into `state.ui_review.a11y` in the shape
|
|
138
|
-
|
|
138
|
+
`react-shadcn-ui` § Review pass already defines:
|
|
139
139
|
|
|
140
140
|
```
|
|
141
141
|
{violations: [{rule, selector, severity}, …], severity_floor?, accepted_violations?}
|
|
@@ -235,7 +235,7 @@ copied verbatim:
|
|
|
235
235
|
|
|
236
236
|
## See also
|
|
237
237
|
|
|
238
|
-
-
|
|
238
|
+
- `react-shadcn-ui` — the React stack lane, and the `(rule, selector, severity)` shape § Validate writes into.
|
|
239
239
|
- [`existing-ui-audit`](../existing-ui-audit/SKILL.md) — the inventory the MCP path accelerates.
|
|
240
240
|
- [`js-library-packaging`](../js-library-packaging/SKILL.md) — the package around the workshop.
|
|
241
241
|
- [`accessibility-auditor`](../accessibility-auditor/SKILL.md) — the WCAG depth behind the a11y half.
|
|
@@ -87,7 +87,7 @@ Structure, controls, grid and breakpoints are never this skill's to adjust;
|
|
|
87
87
|
those stay 1:1 with the artifact and belong to the rule, not to a
|
|
88
88
|
utility-class decision. **Icons are out of scope here as well, and this skill
|
|
89
89
|
asserts no obligation about them** — the icon system belongs to
|
|
90
|
-
|
|
90
|
+
`icon-consistency`. An earlier revision of
|
|
91
91
|
this paragraph claimed icons "stay 1:1 with the artifact" with no citation of
|
|
92
92
|
any kind, while putting them outside its own scope in the same sentence; the
|
|
93
93
|
claim is withdrawn rather than defended, because a clause that reached the tree
|
|
@@ -39,6 +39,13 @@ CAP PER BEHAVIOR: 5–8 CASES — EACH MUST FAIL FOR A DISTINCT REASON.
|
|
|
39
39
|
|
|
40
40
|
## Does this change owe an executable behavior contract?
|
|
41
41
|
|
|
42
|
+
This section is the decision *Gherkin*, *BDD*, *Cucumber*, *Behat* and
|
|
43
|
+
*given-when-then* are meant to reach — each pinned as a should-trigger case in
|
|
44
|
+
`evals/triggers.json`, with German exemplars for *Cucumber* and *Behat*. That
|
|
45
|
+
corpus specifies
|
|
46
|
+
the intent; it does not route, and this skill's `description` carries none of
|
|
47
|
+
the terms. A decision, not a guide to writing one.
|
|
48
|
+
|
|
42
49
|
Cases and contracts are not the same artifact. A **case** is something you assert
|
|
43
50
|
in the project's unit runner. An **executable behavior contract** — a
|
|
44
51
|
specification written in the language of whoever asked for the change, and run
|
|
@@ -313,6 +313,23 @@ export async function retry<T>(op: () => Promise<T>): Promise<T> {
|
|
|
313
313
|
Run again → passes. Configurable attempt count, backoff, and jitter all
|
|
314
314
|
wait for their own failing tests.
|
|
315
315
|
|
|
316
|
+
## The filtered probe, per ecosystem
|
|
317
|
+
|
|
318
|
+
The discipline above is stack-independent; the **command** is not, and every
|
|
319
|
+
runner invocation elsewhere in this file is a PHP one. Resolve the runner with
|
|
320
|
+
`resolve_toolchain` (`work_engine/stack/runner.ts`) and read its `ecosystems`,
|
|
321
|
+
then filter with that ecosystem's own form — never the whole suite:
|
|
322
|
+
|
|
323
|
+
| `ecosystems` | Filtered probe |
|
|
324
|
+
|---|---|
|
|
325
|
+
| `php` | `vendor/bin/pest --filter '<name>'` · `php artisan test --filter '<name>'` |
|
|
326
|
+
| `js` | `npx vitest run -t '<name>'` · `npx jest -t '<name>'` |
|
|
327
|
+
| `python` | `pytest -k '<expr>'` · `pytest path/to/test.py::test_name` |
|
|
328
|
+
| `go` | `go test -run '<regexp>' ./pkg/...` |
|
|
329
|
+
|
|
330
|
+
A TypeScript repository resolves the ecosystem `js`, never `typescript`. The
|
|
331
|
+
whole suite is the final gate and never the per-iteration probe, in every row.
|
|
332
|
+
|
|
316
333
|
## Gotchas
|
|
317
334
|
|
|
318
335
|
* Running the full suite instead of a filtered test hides the RED→GREEN
|
|
@@ -174,4 +174,22 @@ Replace dynamic `getPdo()` probing with explicit config:
|
|
|
174
174
|
- Do NOT use RefreshDatabase when DatabaseTransactions works — 10x slower.
|
|
175
175
|
- Do NOT run full test suite on every code change — use `--filter`.
|
|
176
176
|
- Do NOT add test-only indexes — fix test design instead.
|
|
177
|
-
- Do NOT disable parallel testing to "fix" flaky tests — fix the root cause.
|
|
177
|
+
- Do NOT disable parallel testing to "fix" flaky tests — fix the root cause.
|
|
178
|
+
|
|
179
|
+
## Where the time goes, per ecosystem
|
|
180
|
+
|
|
181
|
+
The diagnosis above is PHPUnit-shaped. The method — measure before optimising,
|
|
182
|
+
find the slowest tests first, separate setup cost from assertion cost —
|
|
183
|
+
transfers; the instrument does not. Resolve the runner with
|
|
184
|
+
`resolve_toolchain` and read its `ecosystems`:
|
|
185
|
+
|
|
186
|
+
| `ecosystems` | Slowest-test instrument | The usual first cause |
|
|
187
|
+
|---|---|---|
|
|
188
|
+
| `php` | `--profile` / Pest's duration column | database refresh per test |
|
|
189
|
+
| `js` | `vitest --reporter=verbose`, `jest --detectOpenHandles` | module transform and a leaked handle |
|
|
190
|
+
| `python` | `pytest --durations=20` | session-scoped fixtures rebuilt per test |
|
|
191
|
+
| `go` | `go test -v`, `-cpuprofile`, `-race` for the slow-and-flaky pair | a `TestMain` that starts real I/O |
|
|
192
|
+
|
|
193
|
+
`go test` caches a package's result until its inputs change, so a suite that
|
|
194
|
+
looks fast on the second run may not have run at all — `-count=1` defeats the
|
|
195
|
+
cache when you are measuring.
|
|
@@ -61,7 +61,7 @@ than under-splitting. Meet BOTH conditions before you extract.
|
|
|
61
61
|
**Read `DESIGN.md` § Owned components first** — it is the project's own inventory of what
|
|
62
62
|
it already owns (component, status, story file, registry item), filled from the story files
|
|
63
63
|
rather than from memory by
|
|
64
|
-
|
|
64
|
+
`design-system-capture`. It is the cheapest possible
|
|
65
65
|
prior-art check: one table, and a `deprecated` row tells you not to reach for something that
|
|
66
66
|
still exists in the tree. Absent or empty → fall through to
|
|
67
67
|
[`existing-ui-audit`](../existing-ui-audit/SKILL.md), which reads the codebase itself.
|
|
@@ -69,6 +69,29 @@ still exists in the tree. Absent or empty → fall through to
|
|
|
69
69
|
Then review existing components in the codebase for the same
|
|
70
70
|
responsibility — extend rather than rebuild when a match is found.
|
|
71
71
|
|
|
72
|
+
**Read `state.ui_audit.component_taxonomy` before you decide where the
|
|
73
|
+
component goes.** The audit (§ 1b of
|
|
74
|
+
[`existing-ui-audit`](../existing-ui-audit/SKILL.md)) records the project's
|
|
75
|
+
**own** granularity tiers, joined with `/`, or `none`:
|
|
76
|
+
|
|
77
|
+
- **It names tiers** → record the chosen tier on the component's
|
|
78
|
+
`state.ui_design.components[]` entry as `tier` (the apply step reads that
|
|
79
|
+
field and nothing else writes it), then place the component inside it and say
|
|
80
|
+
which:
|
|
81
|
+
*"conforming to the project's `primitives/patterns/features` taxonomy —
|
|
82
|
+
`Checkout` goes under `src/components/features/`"*. Match the tier by name;
|
|
83
|
+
there is no rule here that computes a tier, and there must not be one.
|
|
84
|
+
- **A component fits no tier** → report it as a named conformance gap with the
|
|
85
|
+
reason, and leave it unplaced. Do not put it somewhere else quietly, and do
|
|
86
|
+
not invent a tier for it — picking one would need exactly the per-tier rule
|
|
87
|
+
the measurement below shows is not derivable.
|
|
88
|
+
- **`none`** → behave exactly as you would without this paragraph. A project
|
|
89
|
+
that organizes its components some other way must not be able to tell that
|
|
90
|
+
this step exists. Never propose a taxonomy to a project that has one you did
|
|
91
|
+
not recognise, and never propose one mid-task to a project that has none —
|
|
92
|
+
the single offer is made once, at the greenfield halt, and a decline there is
|
|
93
|
+
terminal.
|
|
94
|
+
|
|
72
95
|
**A new component's workshop is part of its design where the project has one —
|
|
73
96
|
size-conditional, never a generic mandate.** The boundary is
|
|
74
97
|
[`component-oriented-and-oop-development`](../../guidelines/component-oriented-and-oop-development.md)
|
|
@@ -81,7 +104,7 @@ checkable before it reaches a page. That skill is stack-agnostic and ships in
|
|
|
81
104
|
`engineering-base`, so a plain-`react` project receives it exactly as a
|
|
82
105
|
`react-shadcn` one does. The state-coverage matrix the story set is derived
|
|
83
106
|
from is React-specific and lives in
|
|
84
|
-
|
|
107
|
+
`react-shadcn-ui` § Step 3, deliberately not
|
|
85
108
|
duplicated here; a Blade, Vue or Livewire lane derives its story set from that
|
|
86
109
|
lane's own state list instead.
|
|
87
110
|
|
|
@@ -39,7 +39,7 @@ schema_version: 1
|
|
|
39
39
|
# CI guard: a release bump of `package.json` must update this value
|
|
40
40
|
# in lockstep — see scripts/check_template_pin_drift.ts (road-to-
|
|
41
41
|
# portable-runtime-and-update-check P3.3).
|
|
42
|
-
agent_config_version: "16.
|
|
42
|
+
agent_config_version: "16.3.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -575,6 +575,36 @@ that was never a judgement call.
|
|
|
575
575
|
full CI pipeline — per `roadmap-ci-steps-policy` a `verify:` must not
|
|
576
576
|
be a full-suite gate.
|
|
577
577
|
|
|
578
|
+
**The expectation half — say what the command must produce.** A command
|
|
579
|
+
alone names no oracle. `` verify: `cat notes.md` `` is a conforming step
|
|
580
|
+
field that cannot say no, so the box gets flipped on a command that was
|
|
581
|
+
never able to fail. In practice the great majority of clauses in a
|
|
582
|
+
roadmap tree state no oracle at all — run the share command below on
|
|
583
|
+
your own tree rather than trusting a number written here. A clause
|
|
584
|
+
MAY therefore state what the command must produce, using the arrow
|
|
585
|
+
`exec:` evidence already carries — not a new symbol:
|
|
586
|
+
|
|
587
|
+
- `` verify: `<cmd>` -> 0 `` — the command must exit with that code.
|
|
588
|
+
- `` verify: `<cmd>` -> /regex/ `` — its output must match.
|
|
589
|
+
|
|
590
|
+
Prose after `verify:` stays legal and reads as MANUAL. Forbidding it
|
|
591
|
+
would invalidate most clauses already in the tree at a stroke, and a
|
|
592
|
+
grammar that reds every producer gets weakened until it finds nothing.
|
|
593
|
+
One parser reads the arrow (`src/scripts/_lib/verify_clause.ts`) and
|
|
594
|
+
nothing parses it a second time. `closure_scan`'s `unfalsifiable-verify`
|
|
595
|
+
family reports the clauses whose oracle cannot say no, and exits 0
|
|
596
|
+
unconditionally — it is a listing, never a gate. The share per roadmap
|
|
597
|
+
is `./scripts-run src/scripts/roadmap_verify_share`.
|
|
598
|
+
|
|
599
|
+
**An absence check names its positive control.** A `verify:` asserting
|
|
600
|
+
that something is *absent* — no match, no occurrence, an empty diff —
|
|
601
|
+
passes identically when the property holds, when the check itself is
|
|
602
|
+
broken, when the path moved, and when the corpus is empty. Such a clause
|
|
603
|
+
MUST name the input on which it does fire: the positive control. A
|
|
604
|
+
fixture that plants the thing, a prior commit that carried it, or a
|
|
605
|
+
sabotage the step records. Without one it is a check nobody has seen
|
|
606
|
+
working, and its green means only that nothing ran.
|
|
607
|
+
|
|
578
608
|
24. **Ready roadmaps carry a `## Risk Register` (Gate R1).** Every
|
|
579
609
|
ready (non-draft) roadmap ends with a schema-valid Risk Register —
|
|
580
610
|
marker line (`<!-- risk-review: v1 | reviewed: YYYY-MM-DD |
|
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
*
|
|
12
12
|
* The gate is **scoped to the greenfield-scaffold path only**. It acts only
|
|
13
13
|
* when `state.ui_audit` records `greenfield == True` and
|
|
14
|
-
* `greenfield_decision
|
|
15
|
-
* clean `SUCCESS` no-op, so those flows stay
|
|
14
|
+
* `greenfield_decision` ∈ `{scaffold, granularity_convention}`. Every other
|
|
15
|
+
* UI flow sees this slot as a clean `SUCCESS` no-op, so those flows stay
|
|
16
|
+
* byte-identical.
|
|
16
17
|
*/
|
|
17
18
|
import {
|
|
18
19
|
type Any,
|
|
@@ -21,6 +22,7 @@ import {
|
|
|
21
22
|
StepResult,
|
|
22
23
|
agent_directive,
|
|
23
24
|
} from '../../delivery_state.js';
|
|
25
|
+
import { GRANULARITY_CONVENTION } from '../../state.js';
|
|
24
26
|
|
|
25
27
|
/** Declared ambiguity surfaces for this step. */
|
|
26
28
|
export const AMBIGUITIES: ReadonlyArray<Record<string, string>> = [
|
|
@@ -112,14 +114,18 @@ export function run(state: DeliveryState): StepResult {
|
|
|
112
114
|
* The gate is inert for every other flow: improve-existing, the `bare` /
|
|
113
115
|
* `external_reference` greenfield picks, and the `diff` / `file` envelopes all
|
|
114
116
|
* leave `ui_audit` without the `greenfield == True` +
|
|
115
|
-
* `greenfield_decision
|
|
117
|
+
* `greenfield_decision` ∈ `{scaffold, granularity_convention}` pair.
|
|
116
118
|
*/
|
|
117
119
|
function _is_greenfield_scaffold(state: DeliveryState): boolean {
|
|
118
120
|
const audit = state.ui_audit;
|
|
119
121
|
if (!_isDict(audit)) return false;
|
|
122
|
+
// `granularity_convention` is option 4 — a scaffold that additionally
|
|
123
|
+
// organises what it creates under a named convention, so it takes the same
|
|
124
|
+
// grounding pass. Kept in step with the identical guard in `scaffold`.
|
|
120
125
|
return (
|
|
121
126
|
audit['greenfield'] === true &&
|
|
122
|
-
audit['greenfield_decision'] === 'scaffold'
|
|
127
|
+
(audit['greenfield_decision'] === 'scaffold' ||
|
|
128
|
+
audit['greenfield_decision'] === GRANULARITY_CONVENTION)
|
|
123
129
|
);
|
|
124
130
|
}
|
|
125
131
|
|