@event4u/agent-config 14.12.0 → 14.14.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 +118 -155
- package/CONTRIBUTING.md +38 -0
- package/CREDITS.md +135 -0
- package/NOTICE +13 -0
- package/README.md +8 -6
- package/dist/agent-src/commands/analyze/inbox.md +145 -2
- package/dist/agent-src/commands/feature/dev.md +7 -2
- package/dist/agent-src/commands/ghostwriter/write.md +5 -1
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/orchestrate.md +2 -2
- package/dist/agent-src/commands/post-as/me.md +5 -1
- package/dist/agent-src/commands/pr/merge.md +19 -6
- package/dist/agent-src/commands/roadmap/process-full.md +19 -5
- package/dist/agent-src/commands/tdd/red.md +12 -2
- package/dist/agent-src/commands/work.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +40 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +5 -2
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +21 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -0
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +40 -0
- package/dist/agent-src/contexts/execution/subagent-steering.md +13 -1
- package/dist/agent-src/contexts/execution/terminal-states.md +96 -0
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/broken-access-control.md +4 -0
- package/dist/agent-src/rules/code-comment-discipline.md +6 -0
- package/dist/agent-src/rules/code-provenance.md +4 -0
- package/dist/agent-src/rules/design-fidelity.md +1 -1
- package/dist/agent-src/rules/domain-safety-pii.md +4 -0
- package/dist/agent-src/rules/domain-safety-retention.md +4 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +14 -12
- package/dist/agent-src/rules/improve-before-implement.md +6 -8
- package/dist/agent-src/rules/laravel-routing.md +1 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +4 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
- package/dist/agent-src/rules/source-confidentiality.md +12 -34
- package/dist/agent-src/rules/symfony-routing.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +14 -0
- package/dist/agent-src/rules/tool-safety.md +4 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +4 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +252 -8
- package/dist/agent-src/scripts/guarded_baseline.ts +343 -0
- package/dist/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/dist/agent-src/scripts/stub_queue.ts +82 -0
- package/dist/agent-src/scripts/stubs_due.ts +516 -0
- package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +16 -12
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +17 -4
- package/dist/agent-src/skills/brand-audit/SKILL.md +33 -0
- package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -0
- package/dist/agent-src/skills/database/SKILL.md +8 -0
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +27 -0
- package/dist/agent-src/skills/design-review/SKILL.md +1 -1
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +17 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +9 -2
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +44 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +1 -1
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +38 -4
- package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +2 -2
- package/dist/agent-src/skills/laravel/SKILL.md +35 -0
- package/dist/agent-src/skills/laravel-migration/SKILL.md +57 -3
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +26 -0
- package/dist/agent-src/skills/playbook-authoring/SKILL.md +28 -1
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/references/procedure.md +5 -5
- package/dist/agent-src/skills/sql-writing/SKILL.md +7 -1
- package/dist/agent-src/skills/standards-from-config/SKILL.md +27 -4
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +11 -4
- package/dist/agent-src/skills/symfony-workflow/SKILL.md +35 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +85 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +33 -9
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +37 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +45 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +38 -1
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +9 -4
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +97 -3
- package/dist/agent-src/templates/scripts/check_memory.ts +258 -17
- package/dist/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/dist/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/dist/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/dist/cli/commands/uiAudit.js +124 -5
- package/dist/cli/registry.js +2 -0
- package/dist/cli-delegate/{chunk-HYWSRNUX.js → chunk-2DK2VJWG.js} +3 -3
- package/dist/cli-delegate/{chunk-JCW7ZLHK.js → chunk-4FS4WRXP.js} +5 -0
- package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
- package/dist/cli-delegate/{chunk-JJA2QEWA.js → chunk-AKJGUQNO.js} +466 -285
- package/dist/cli-delegate/{chunk-E46KPN6K.js → chunk-BTWUYDGN.js} +424 -363
- package/dist/cli-delegate/{chunk-K4FFODTS.js → chunk-ILMUPLGW.js} +1227 -316
- package/dist/cli-delegate/{chunk-FF7WAFMR.js → chunk-KPBWFOPZ.js} +5 -1
- package/dist/cli-delegate/cmd_adr_effective.js +102 -0
- package/dist/cli-delegate/cmd_conformance.js +80 -11
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +3 -2
- package/dist/cli-delegate/cmd_fleet.js +2 -2
- 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 +3 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +3 -2
- package/dist/cli-delegate/cmd_settings_set.js +2 -2
- package/dist/cli-delegate/cmd_sync.js +3 -2
- package/dist/cli-delegate/cmd_uninstall.js +3 -2
- package/dist/cli-delegate/cmd_validate.js +3 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +58 -58
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +2900 -1049
- package/dist/install/claudeRuleRewrite.js +254 -0
- package/dist/install/detect.js +29 -16
- package/dist/install/detect_php_shape.js +159 -0
- package/dist/install/install.mjs +634 -428
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +4895 -2627
- package/dist/server/schemas/settings.js +3 -0
- package/dist/ui/assets/index-D0jaCRPM.js +29 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +1 -1
- package/docs/THIRD-PARTY-NOTICES.md +25 -0
- package/docs/contracts/provider-lifecycle.md +1 -1
- package/docs/contracts/settings-classes.md +10 -4
- package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -0
- package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +58 -3
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +2 -2
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
- package/docs/guidelines/agent-infra/break-glass-usage.md +7 -7
- package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
- package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
- package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
- package/docs/guidelines/agent-infra/direct-answers-demos.md +2 -2
- package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +1 -1
- package/docs/guidelines/agent-infra/engineering-memory-data-format.md +3 -3
- package/docs/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/docs/guidelines/agent-infra/first-principles.md +2 -2
- package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +2 -2
- package/docs/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
- package/docs/guidelines/agent-infra/language-and-tone-examples.md +1 -1
- package/docs/guidelines/agent-infra/layered-settings.md +10 -10
- package/docs/guidelines/agent-infra/memory-access.md +1 -1
- package/docs/guidelines/agent-infra/mental-models.md +3 -3
- package/docs/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/docs/guidelines/agent-infra/review-routing-data-format.md +7 -7
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +13 -7
- package/docs/guidelines/agent-infra/role-contracts.md +2 -2
- package/docs/guidelines/agent-infra/role-mode-router.md +3 -3
- package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
- package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +6 -6
- package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +2 -2
- package/docs/guidelines/agent-infra/six-hats.md +3 -3
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +6 -6
- package/docs/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
- package/docs/guidelines/augment-portability-patterns.md +6 -4
- package/docs/guidelines/code-clarity.md +18 -0
- package/docs/guidelines/component-oriented-and-oop-development.md +3 -2
- package/docs/guidelines/cross-role-handoff.md +2 -2
- package/docs/guidelines/design-fidelity-mechanics.md +1 -1
- package/docs/guidelines/docs/readme-size-and-splitting.md +3 -3
- package/docs/guidelines/php/database.md +90 -7
- package/docs/guidelines/prompt-templates.md +7 -7
- package/llms.txt +2 -2
- package/package.json +5 -2
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +252 -8
- package/src/agent-src/scripts/guarded_baseline.ts +343 -0
- package/src/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/src/agent-src/scripts/stub_queue.ts +82 -0
- package/src/agent-src/scripts/stubs_due.ts +516 -0
- package/src/agent-src/scripts/ticket_bundles.ts +84 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +16 -12
- package/src/agent-src/templates/scripts/check_memory.ts +258 -17
- package/src/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/src/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/src/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/src/config/agent-settings.template.yml +32 -3
- package/src/config/assurance-capability-registry.json +21 -9
- package/src/config/canonical-terms.yml +119 -0
- package/src/config/capability-native-outcome-bars.json +81 -0
- package/src/config/ci-local-parity.yml +80 -0
- package/src/config/drafting-channels.yml +43 -0
- package/src/config/estate-count-budget.json +57 -36
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +729 -63
- package/src/config/gate-reachability-exemptions.json +21 -0
- package/src/config/gate-violation-baselines.json +42 -19
- package/src/config/harness-evolution-budget.json +25 -0
- package/src/config/lapsed-beta-baseline.json +96 -0
- package/src/config/memory-twin-verdicts.yml +129 -0
- package/src/config/metric-registry.yml +124 -0
- package/src/config/pack-size-budget.json +16 -15
- package/src/config/preamble-payload-budget.json +12 -4
- package/src/config/profiles/balanced.ini +27 -0
- package/src/config/profiles/full.ini +27 -0
- package/src/config/profiles/minimal.ini +27 -0
- package/src/config/publish-surface.json +9 -2
- package/src/config/routing-coverage-seed.json +16 -2
- package/src/config/rule-stub-ceilings.json +133 -112
- package/src/config/turnaround-budget.json +66 -0
- package/src/install/claudeRuleRewrite.ts +288 -0
- package/src/install/detect.ts +60 -17
- package/src/install/detect_php_shape.ts +191 -0
- package/src/scripts/_cli/cmd_doctor.ts +27 -112
- package/src/scripts/_dispatch.bash +23 -0
- package/src/scripts/_lib/activation_ladder.ts +255 -0
- package/src/scripts/_lib/activation_receipt_producer.ts +341 -0
- package/src/scripts/_lib/activation_states.ts +88 -0
- package/src/scripts/_lib/adherence_detectors.ts +143 -0
- package/src/scripts/_lib/adr_frontmatter.ts +26 -0
- package/src/scripts/_lib/arith_claims.ts +181 -0
- package/src/scripts/_lib/arm_ranking.ts +62 -0
- package/src/scripts/_lib/asset_delivery_ledger.ts +303 -0
- package/src/scripts/_lib/audit_field_provenance.ts +54 -0
- package/src/scripts/_lib/auto_dispatch.ts +32 -3
- package/src/scripts/_lib/bench_ab_size_claim.ts +98 -4
- package/src/scripts/_lib/benchmark_cache_fields.ts +158 -0
- package/src/scripts/_lib/candidate_pair_delta.ts +349 -0
- package/src/scripts/_lib/candidate_proposer.ts +402 -0
- package/src/scripts/_lib/candidate_record.ts +601 -0
- package/src/scripts/_lib/capture_rate.ts +319 -0
- package/src/scripts/_lib/carrier_status.ts +118 -0
- package/src/scripts/_lib/cascade_stage_enumeration.ts +92 -0
- package/src/scripts/_lib/collector_denominator.ts +771 -0
- package/src/scripts/_lib/collector_record.ts +340 -0
- package/src/scripts/_lib/collector_store.ts +664 -0
- package/src/scripts/_lib/collector_supervision.ts +827 -0
- package/src/scripts/_lib/concern_estate.ts +77 -0
- package/src/scripts/_lib/config_chain.ts +477 -0
- package/src/scripts/_lib/config_cost.ts +209 -0
- package/src/scripts/_lib/corpus_manifest.ts +726 -0
- package/src/scripts/_lib/council_settings_block.ts +6 -0
- package/src/scripts/_lib/curator_ops.ts +172 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +282 -0
- package/src/scripts/_lib/delivery_criticality.ts +126 -0
- package/src/scripts/_lib/doctor_runtime_checks.ts +70 -0
- package/src/scripts/_lib/empty_cycles.ts +88 -0
- package/src/scripts/_lib/estate_carrier_cases.ts +72 -0
- package/src/scripts/_lib/eval_publication.ts +354 -0
- package/src/scripts/_lib/evaluation_cascade.ts +452 -0
- package/src/scripts/_lib/evaluation_vector.ts +283 -0
- package/src/scripts/_lib/evaluator_promotion.ts +225 -0
- package/src/scripts/_lib/evidence_basis.ts +118 -0
- package/src/scripts/_lib/evolution_roi.ts +562 -0
- package/src/scripts/_lib/exec_evidence.ts +8 -0
- package/src/scripts/_lib/experience_card.ts +272 -0
- package/src/scripts/_lib/experience_report.ts +151 -0
- package/src/scripts/_lib/experiment_freeze.ts +112 -0
- package/src/scripts/_lib/generated_by.ts +66 -0
- package/src/scripts/_lib/harness_evolution_guards.ts +239 -0
- package/src/scripts/_lib/hook_effect_probe.ts +141 -0
- package/src/scripts/_lib/host_denominator.ts +687 -0
- package/src/scripts/_lib/host_projection_reach.ts +157 -0
- package/src/scripts/_lib/ignored_blocker.ts +148 -0
- package/src/scripts/_lib/install_reach_checks.ts +495 -0
- package/src/scripts/_lib/json_duplicate_keys.ts +150 -0
- package/src/scripts/_lib/judge_hygiene.ts +228 -0
- package/src/scripts/_lib/legacy_boundary_map.ts +228 -0
- package/src/scripts/_lib/lexical_shortlist.ts +215 -0
- package/src/scripts/_lib/llm_candidate_proposer.ts +461 -0
- package/src/scripts/_lib/llm_proposer_transport.ts +153 -0
- package/src/scripts/_lib/loop_guards.ts +299 -0
- package/src/scripts/_lib/loss_class.ts +129 -0
- package/src/scripts/_lib/machine_wake.ts +51 -0
- package/src/scripts/_lib/md_prose_lines.ts +177 -0
- package/src/scripts/_lib/minimality_tiebreak.ts +168 -0
- package/src/scripts/_lib/one_resolver_invariant.ts +449 -0
- package/src/scripts/_lib/orchestration_record.ts +253 -5
- package/src/scripts/_lib/outcome_envelope.ts +227 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +125 -0
- package/src/scripts/_lib/paired_stats.ts +245 -0
- package/src/scripts/_lib/paired_verdict.ts +226 -0
- package/src/scripts/_lib/pathology_archive.ts +393 -0
- package/src/scripts/_lib/prefix_stable_surfaces.ts +123 -0
- package/src/scripts/_lib/privacy_class.ts +47 -0
- package/src/scripts/_lib/promotion_capability.ts +315 -0
- package/src/scripts/_lib/promotion_evidence.ts +414 -0
- package/src/scripts/_lib/promotion_review.ts +294 -0
- package/src/scripts/_lib/prompt_shape.ts +92 -0
- package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
- package/src/scripts/_lib/release_highlights.ts +70 -1
- package/src/scripts/_lib/release_material.ts +125 -2
- package/src/scripts/_lib/repeated_failure.ts +105 -0
- package/src/scripts/_lib/repo_root.ts +111 -0
- package/src/scripts/_lib/review_skipped_record.ts +37 -0
- package/src/scripts/_lib/role_split.ts +338 -0
- package/src/scripts/_lib/routing_corpus.ts +307 -0
- package/src/scripts/_lib/routing_index_input.ts +104 -0
- package/src/scripts/_lib/rule_injection.ts +22 -1
- package/src/scripts/_lib/runtime_journal.ts +1499 -0
- package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
- package/src/scripts/_lib/semantic_noop.ts +167 -0
- package/src/scripts/_lib/skill_catalogue.ts +11 -1
- package/src/scripts/_lib/source_digest.ts +200 -0
- package/src/scripts/_lib/source_redact.ts +260 -0
- package/src/scripts/_lib/source_shape.ts +502 -0
- package/src/scripts/_lib/source_snapshot_dedup.ts +199 -0
- package/src/scripts/_lib/strip_comments.d.mts +8 -0
- package/src/scripts/_lib/strip_comments.mjs +65 -0
- package/src/scripts/_lib/test_red_state.ts +154 -0
- package/src/scripts/_lib/trigger_shift.ts +144 -0
- package/src/scripts/_lib/untrusted_content.ts +82 -7
- package/src/scripts/activation_receipt.ts +258 -0
- package/src/scripts/adoption_report.ts +1 -1
- package/src/scripts/adr/evidence_census.ts +1 -1
- package/src/scripts/adr/regenerate_index.ts +26 -2
- package/src/scripts/adr_cite_check.ts +164 -1
- package/src/scripts/ai_council/blind_review.ts +11 -1
- package/src/scripts/ai_council/clients.ts +4 -0
- package/src/scripts/ai_council/config.ts +3 -0
- package/src/scripts/ai_council/consensus.ts +28 -8
- package/src/scripts/ai_council/consensus_round.ts +226 -0
- package/src/scripts/ai_council/cross_exam.ts +128 -0
- package/src/scripts/ai_council/disagreement_signal.ts +338 -0
- package/src/scripts/ai_council/explain_route.ts +157 -0
- package/src/scripts/ai_council/information_gain.ts +293 -0
- package/src/scripts/ai_council/inline_findings.ts +340 -0
- package/src/scripts/ai_council/judge_position_bias.ts +197 -0
- package/src/scripts/ai_council/leakage_corpus.ts +385 -0
- package/src/scripts/ai_council/leakage_patterns.ts +453 -0
- package/src/scripts/ai_council/minority_retention.ts +171 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -203
- package/src/scripts/ai_council/orchestrator_results.ts +23 -3
- package/src/scripts/ai_council/pricing.ts +106 -0
- package/src/scripts/ai_council/prompts.ts +74 -7
- package/src/scripts/ai_council/provider_leakage_bench.ts +327 -0
- package/src/scripts/ai_council/py_format.ts +14 -3
- package/src/scripts/ai_council/recouncil_guard.ts +293 -0
- package/src/scripts/ai_council/recouncil_savings.ts +299 -0
- package/src/scripts/ai_council/replay_route.ts +223 -0
- package/src/scripts/ai_council/response_record.ts +50 -0
- package/src/scripts/ai_council/reviewer_assignment.ts +279 -0
- package/src/scripts/ai_council/routing_training_row.ts +197 -0
- package/src/scripts/ai_council/synthesis_strategy.ts +159 -0
- package/src/scripts/ai_council/topology_bench_manifest.ts +860 -0
- package/src/scripts/ai_council/topology_vocabulary.ts +175 -0
- package/src/scripts/asset_delivery_ledger.ts +157 -0
- package/src/scripts/attest_artifact.ts +193 -0
- package/src/scripts/audit_auto_rules.ts +2 -1
- package/src/scripts/audit_command_surface.ts +1 -1
- package/src/scripts/audit_mcp_tools.ts +2 -2
- package/src/scripts/audit_skill_overlap_allowlist.json +6 -1
- package/src/scripts/audit_user_type_axis.ts +2 -1
- package/src/scripts/bench_ab_clone.ts +215 -10
- package/src/scripts/bench_ab_integrity.ts +119 -5
- package/src/scripts/bench_ab_v2_stats.ts +40 -213
- package/src/scripts/build_archive_index.ts +1 -1
- package/src/scripts/build_linear_digest.ts +1 -1
- package/src/scripts/build_proof.ts +11 -4
- package/src/scripts/build_rule_trigger_matrix.ts +1 -1
- package/src/scripts/build_source_digests.ts +157 -0
- package/src/scripts/cache_realization_report.ts +103 -0
- package/src/scripts/check_adr_frontmatter.ts +131 -10
- package/src/scripts/check_benchmark_report_fields.ts +207 -0
- package/src/scripts/check_beta_review_markers.ts +235 -6
- package/src/scripts/check_bundle_path_leakage.ts +34 -1
- package/src/scripts/check_claims.ts +576 -6
- package/src/scripts/check_composite_arming.ts +35 -0
- package/src/scripts/check_concern_admissions.ts +365 -0
- package/src/scripts/check_enforcement_coverage.ts +28 -0
- package/src/scripts/check_estate_count.ts +347 -25
- package/src/scripts/check_gate_reachability.ts +383 -0
- package/src/scripts/check_host_loadability.ts +104 -0
- package/src/scripts/check_loss_class_declared.ts +308 -0
- package/src/scripts/check_md_language.ts +15 -98
- package/src/scripts/check_memory_proposal.ts +18 -11
- package/src/scripts/check_no_currency_in_cost_surfaces.ts +225 -0
- package/src/scripts/check_no_external_sources.ts +281 -6
- package/src/scripts/check_pack_conformance_fixture.ts +11 -1
- package/src/scripts/check_pack_size.ts +59 -2
- package/src/scripts/check_preamble_payload_budget.ts +114 -3
- package/src/scripts/check_prefix_stable_mutation.ts +372 -0
- package/src/scripts/check_publish_surface.ts +10 -1
- package/src/scripts/check_references.ts +24 -1
- package/src/scripts/check_release_highlights.ts +96 -13
- package/src/scripts/check_roadmap_trackable.ts +17 -2
- package/src/scripts/check_rule_evidence_declaration.ts +316 -0
- package/src/scripts/check_rule_projection_integrity.ts +14 -4
- package/src/scripts/check_score_contract.ts +26 -3
- package/src/scripts/check_static_parity.ts +285 -0
- package/src/scripts/check_supervision_claim_atomicity.ts +498 -0
- package/src/scripts/check_suppression_hygiene.ts +15 -0
- package/src/scripts/ci_settle.ts +39 -2
- package/src/scripts/code_graph/build.ts +60 -3
- package/src/scripts/code_graph/extract.ts +44 -0
- package/src/scripts/code_graph/types.ts +24 -0
- package/src/scripts/collector_daemon.ts +714 -0
- package/src/scripts/config_cost_report.ts +302 -0
- package/src/scripts/consumer_matrix.ts +74 -1
- package/src/scripts/corpus_manifest.ts +235 -0
- package/src/scripts/cost/budget.mjs +10 -3
- package/src/scripts/cost/track.mjs +10 -3
- package/src/scripts/council_cli.ts +37 -54
- package/src/scripts/dispatch_r2_reviewer.ts +46 -5
- package/src/scripts/evolution_lab.ts +1153 -0
- package/src/scripts/external_sources_denylist.json +5 -18
- package/src/scripts/extract_audit_patterns.ts +21 -0
- package/src/scripts/fold_intake.ts +12 -1
- package/src/scripts/gen_discovery_baseline.ts +1 -1
- package/src/scripts/generate_capabilities_index.ts +12 -5
- package/src/scripts/generate_capability_matrix.ts +3 -3
- package/src/scripts/generate_command_flows.ts +2 -2
- package/src/scripts/generate_cookbook.ts +2 -2
- package/src/scripts/generate_index.ts +8 -1
- package/src/scripts/generate_knowledge_index.ts +2 -1
- package/src/scripts/generate_ownership_matrix.ts +2 -1
- package/src/scripts/generate_pack_manifests.ts +10 -2
- package/src/scripts/generate_role_experiences_catalog.ts +2 -2
- package/src/scripts/generate_settings_reference.ts +1 -1
- package/src/scripts/git_authorization_hook.ts +22 -1
- package/src/scripts/grade_target_readiness.ts +48 -5
- package/src/scripts/hook_effect_doctor.ts +261 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +125 -16
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +271 -0
- package/src/scripts/hooks/block_unauthorized_git.ts +18 -0
- package/src/scripts/hooks/comment_discipline_hook.ts +146 -0
- package/src/scripts/hooks/concern_registry.ts +6 -0
- package/src/scripts/hooks/dispatch_hook.ts +32 -0
- package/src/scripts/hooks/journal_record_hook.ts +345 -0
- package/src/scripts/hooks/prepush_metadata_sources.sh +110 -0
- package/src/scripts/hooks/run_continuation_hook.ts +44 -9
- package/src/scripts/hooks/shims/install.sh +61 -0
- package/src/scripts/hooks/shims/php +101 -0
- package/src/scripts/hooks/suggestion_capture_hook.ts +10 -0
- package/src/scripts/hooks/turn_end_gate_hook.ts +9 -1
- package/src/scripts/hot_context_hook.ts +16 -0
- package/src/scripts/install-hooks.sh +20 -5
- package/src/scripts/install.ts +17 -35
- package/src/scripts/inventory_frontmatter.ts +2 -1
- package/src/scripts/language_mirror_hook.ts +14 -2
- package/src/scripts/lint_adr_sweep_routing.ts +12 -0
- package/src/scripts/lint_canonical_terms.ts +604 -0
- package/src/scripts/lint_carrier_integrity.ts +820 -0
- package/src/scripts/lint_code_comments.ts +643 -0
- package/src/scripts/lint_composition_review.ts +619 -0
- package/src/scripts/lint_consolidation_lineage.ts +666 -0
- package/src/scripts/lint_eval_specs.ts +593 -0
- package/src/scripts/lint_hook_manifest.ts +19 -0
- package/src/scripts/lint_host_portability.ts +373 -0
- package/src/scripts/lint_judge_prompt_expectation.ts +27 -1
- package/src/scripts/lint_memory_twin_parity.ts +335 -0
- package/src/scripts/lint_metric_consumers.ts +355 -0
- package/src/scripts/lint_plan_risk_register.ts +39 -19
- package/src/scripts/lint_promotion_paths.ts +779 -0
- package/src/scripts/lint_skill_descriptions.ts +18 -1
- package/src/scripts/lint_skill_frontmatter_safety.ts +58 -0
- package/src/scripts/lint_skill_link_reach.ts +252 -0
- package/src/scripts/lint_skill_trigger_corpus.ts +426 -23
- package/src/scripts/lint_ticket_buildable.ts +17 -1
- package/src/scripts/llm_propose.ts +256 -0
- package/src/scripts/mcp_server/consumer_tool_catalog.json +1 -1
- package/src/scripts/mcp_server/tool_catalog_source.ts +1 -1
- package/src/scripts/measure_delivery_sets.ts +361 -0
- package/src/scripts/measure_docs_dead_links.ts +348 -0
- package/src/scripts/measure_host_capture.ts +461 -0
- package/src/scripts/measure_routing_signal.ts +307 -0
- package/src/scripts/migration_status.ts +3 -3
- package/src/scripts/model_rule_injection.ts +76 -0
- package/src/scripts/orchestration_record.ts +14 -0
- package/src/scripts/preamble_byte_census.ts +139 -10
- package/src/scripts/prepack-check.mjs +4 -1
- package/src/scripts/probe_council_retention.ts +495 -0
- package/src/scripts/probe_turnaround.ts +384 -0
- package/src/scripts/probe_unblocked_ask.ts +279 -0
- package/src/scripts/release.ts +21 -37
- package/src/scripts/release_drill.ts +143 -0
- package/src/scripts/release_env.ts +35 -0
- package/src/scripts/release_publication.ts +84 -0
- package/src/scripts/render_benchmark_md.ts +1 -1
- package/src/scripts/rule_activation_census.ts +70 -9
- package/src/scripts/rule_backlinks.ts +1 -1
- package/src/scripts/run_lifecycle_suite.ts +208 -0
- package/src/scripts/run_skill_evals.ts +40 -0
- package/src/scripts/schemas/delivery-manifest.schema.json +43 -0
- package/src/scripts/schemas/drafting-channels.schema.json +43 -0
- package/src/scripts/schemas/evals.schema.json +24 -1
- package/src/scripts/schemas/rule.schema.json +52 -1
- package/src/scripts/schemas/skill.schema.json +17 -2
- package/src/scripts/skill_overlap.ts +7 -1
- package/src/scripts/skill_tools/run_block_d_eval.ts +8 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +84 -3
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +8 -1
- package/src/scripts/skill_usage_report.ts +2 -1
- package/src/scripts/stubs_due.ts +211 -0
- package/src/scripts/sweep_source_surfaces.ts +678 -0
- package/src/scripts/sync_pr_branch.ts +3 -3
- package/src/scripts/trigger_eval_grandfather.json +202 -222
- package/src/scripts/utilization_report.ts +22 -2
- package/src/server/schemas/settings.ts +5 -0
- package/src/templates/marketing-copy.yml +1 -1
- package/dist/ui/assets/index-Cxgy63kz.js +0 -26
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* `archive_completed_roadmaps` can consume it the same way Python does. snake_case
|
|
13
13
|
* is kept on the public surface.
|
|
14
14
|
*
|
|
15
|
-
* Scans every roadmap under `agents/roadmaps/` (excluding `archive/`, `skipped/`,
|
|
15
|
+
* Scans every roadmap under `agents/roadmaps/` (excluding `archive/`, `skipped/`, code-comment-allow provenance-comment -- the path is this script's operand, not where the code came from
|
|
16
16
|
* `template.md`, `README.md`, `open-questions*.md`), counts checkbox states per
|
|
17
17
|
* phase, and writes a dashboard at `agents/roadmaps-progress.md` (outside the
|
|
18
18
|
* `roadmaps/` folder to keep it clean) with:
|
|
@@ -71,6 +71,8 @@ import {
|
|
|
71
71
|
type DashboardMode,
|
|
72
72
|
} from './dashboard_mode.js';
|
|
73
73
|
import type * as YamlModule from 'yaml';
|
|
74
|
+
import { headerFragment as stubHeaderFragment } from './stubs_due.js';
|
|
75
|
+
import { reportGuardedBaselines } from './guarded_baseline.js'; // third step state; contract lives there
|
|
74
76
|
|
|
75
77
|
const _HERE = fileURLToPath(import.meta.url);
|
|
76
78
|
const _require = createRequire(import.meta.url);
|
|
@@ -94,7 +96,7 @@ const EXCLUDE_DIRS: ReadonlySet<string> = new Set(['archive', 'skipped', 'stubs'
|
|
|
94
96
|
|
|
95
97
|
// FRONTMATTER_RE = re.compile(r"\A---\n(.*?)\n---\s*\n", re.DOTALL)
|
|
96
98
|
const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---[ \t\n\r\f\v]*\n/;
|
|
97
|
-
const
|
|
99
|
+
const UNSCHEDULED_VALUES: ReadonlySet<string> = new Set(['draft', 'carrier']);
|
|
98
100
|
|
|
99
101
|
const MERGE_GATED_RE = /merge-gated/i;
|
|
100
102
|
// PR_NUM_RE = re.compile(r"pr\s*[=#:]?\s*#?\s*(\d+)", re.IGNORECASE)
|
|
@@ -287,8 +289,8 @@ function _stripQuotes(s: string): string {
|
|
|
287
289
|
return out;
|
|
288
290
|
}
|
|
289
291
|
|
|
290
|
-
function
|
|
291
|
-
return
|
|
292
|
+
function is_unscheduled(fm: Record<string, string>): boolean {
|
|
293
|
+
return UNSCHEDULED_VALUES.has((fm['status'] ?? '').toLowerCase());
|
|
292
294
|
}
|
|
293
295
|
|
|
294
296
|
/**
|
|
@@ -750,7 +752,7 @@ function collect(roadmap_root: string): RoadmapStats[] {
|
|
|
750
752
|
continue;
|
|
751
753
|
}
|
|
752
754
|
const text = fs.readFileSync(p, { encoding: 'utf-8' });
|
|
753
|
-
if (
|
|
755
|
+
if (is_unscheduled(parse_frontmatter(text))) {
|
|
754
756
|
continue;
|
|
755
757
|
}
|
|
756
758
|
const stats = parse_roadmap(p, roadmap_root);
|
|
@@ -818,7 +820,7 @@ function collect_parked(roadmap_root: string): ParkedRoadmap[] {
|
|
|
818
820
|
} catch {
|
|
819
821
|
continue;
|
|
820
822
|
}
|
|
821
|
-
if (
|
|
823
|
+
if (is_unscheduled(parse_frontmatter(text))) {
|
|
822
824
|
continue;
|
|
823
825
|
}
|
|
824
826
|
const cell = resume_cell(text);
|
|
@@ -995,6 +997,8 @@ function render(roadmaps: RoadmapStats[], bundles: Bundle[] | null, roadmap_root
|
|
|
995
997
|
? `, **${user_open_blockers}** need you → \`agent-config gates\``
|
|
996
998
|
: '')
|
|
997
999
|
: '') +
|
|
1000
|
+
// Two integers, never a row — see `stubs_due.headerFragment`.
|
|
1001
|
+
stubHeaderFragment(path.join(roadmap_root, 'stubs')) +
|
|
998
1002
|
'\n';
|
|
999
1003
|
lines.push(
|
|
1000
1004
|
// Honest provenance (road-to-roadmap-archival-robustness, gap C): name a
|
|
@@ -1301,7 +1305,7 @@ function _parseArgs(argv: readonly string[]): Args {
|
|
|
1301
1305
|
}
|
|
1302
1306
|
|
|
1303
1307
|
/**
|
|
1304
|
-
* When the default cwd carries no `agents/roadmaps/`, fall back to the git
|
|
1308
|
+
* When the default cwd carries no `agents/roadmaps/`, fall back to the git code-comment-allow provenance-comment -- the path is this script's operand, not where the code came from
|
|
1305
1309
|
* toplevel — hook and IDE invocations often run from a subdirectory, and a
|
|
1306
1310
|
* cwd-only resolution silently skipped the dashboard there. An explicit
|
|
1307
1311
|
* `--repo-root` always wins; a cwd that has the directory is used as-is
|
|
@@ -1362,8 +1366,8 @@ function main(argv?: readonly string[]): number {
|
|
|
1362
1366
|
return 1;
|
|
1363
1367
|
}
|
|
1364
1368
|
}
|
|
1365
|
-
const roadmaps = collect(roadmap_root);
|
|
1366
|
-
const new_text = render(roadmaps, collect_bundles(repo_root), roadmap_root);
|
|
1369
|
+
const roadmaps = collect(roadmap_root), guarded = reportGuardedBaselines(roadmaps, repo_root);
|
|
1370
|
+
const new_text = render(roadmaps, collect_bundles(repo_root), roadmap_root) + guarded.section;
|
|
1367
1371
|
const complete = unarchived_complete(roadmaps);
|
|
1368
1372
|
const pending = pending_iron_law_3(roadmaps);
|
|
1369
1373
|
const gated = merge_gated_pending(roadmaps);
|
|
@@ -1395,7 +1399,7 @@ function main(argv?: readonly string[]): number {
|
|
|
1395
1399
|
});
|
|
1396
1400
|
if (r.stderr) process.stderr.write(r.stderr);
|
|
1397
1401
|
if (r.stdout) process.stdout.write(r.stdout);
|
|
1398
|
-
return r.rc;
|
|
1402
|
+
return guarded.problems > 0 ? 1 : r.rc;
|
|
1399
1403
|
}
|
|
1400
1404
|
fs.writeFileSync(target, new_text, { encoding: 'utf-8' });
|
|
1401
1405
|
process.stdout.write(
|
|
@@ -1431,7 +1435,7 @@ function main(argv?: readonly string[]): number {
|
|
|
1431
1435
|
if (gated.length) {
|
|
1432
1436
|
_warn_merge_gated();
|
|
1433
1437
|
}
|
|
1434
|
-
return 0;
|
|
1438
|
+
return guarded.problems > 0 ? 1 : 0;
|
|
1435
1439
|
}
|
|
1436
1440
|
|
|
1437
1441
|
function _isCliEntry(): boolean {
|
|
@@ -1475,7 +1479,7 @@ export {
|
|
|
1475
1479
|
TITLE_RE,
|
|
1476
1480
|
FRONTMATTER_RE,
|
|
1477
1481
|
parse_frontmatter,
|
|
1478
|
-
|
|
1482
|
+
is_unscheduled,
|
|
1479
1483
|
is_roadmap_candidate,
|
|
1480
1484
|
count_checkboxes,
|
|
1481
1485
|
parse_blockers,
|
|
@@ -28,16 +28,29 @@ adapters — not a second image-gen stack.
|
|
|
28
28
|
|
|
29
29
|
## When to use
|
|
30
30
|
|
|
31
|
-
- User asks to generate a banner, social card, header image,
|
|
31
|
+
- User asks to generate a banner, social card, header image, **platform profile
|
|
32
|
+
or cover image** (a LinkedIn cover, an X header, a YouTube channel art), or a
|
|
33
|
+
CIP (corporate identity) element.
|
|
32
34
|
- Branded asset production where palette, typography, or voice must stay consistent.
|
|
33
35
|
- When brand tokens are available and should drive the visual output.
|
|
34
36
|
- When a brief alone (no tokens) still needs a governance-aware image output.
|
|
35
37
|
|
|
36
38
|
## Procedure
|
|
37
39
|
|
|
38
|
-
1. **Identify asset type and spec** — determine format (banner, social card,
|
|
39
|
-
output dimensions (e.g. 1200×630
|
|
40
|
-
and target channel (web, print,
|
|
40
|
+
1. **Identify asset type and spec** — determine format (banner, social card,
|
|
41
|
+
platform profile/cover image, CIP element), output dimensions (e.g. 1200×630
|
|
42
|
+
for Open Graph, 1080×1080 for square social), and target channel (web, print,
|
|
43
|
+
social platform).
|
|
44
|
+
|
|
45
|
+
**A platform cover is a dimension constraint, not a new asset class**, and it
|
|
46
|
+
is the one case where guessing the number is the whole failure: a cover
|
|
47
|
+
rendered at the wrong aspect ratio is cropped by the platform, so the brand
|
|
48
|
+
marks land outside the visible area and the asset is unusable rather than
|
|
49
|
+
merely off-brand. Take the required dimensions from the platform's own
|
|
50
|
+
current spec at generation time — never from memory, and never from a number
|
|
51
|
+
written here, because these change without notice. If the spec cannot be
|
|
52
|
+
established, say so and ask rather than emitting an asset that will be
|
|
53
|
+
cropped.
|
|
41
54
|
2. **Inject brand tokens when present** — if `pack-brand` is installed, load `.tokens.json`
|
|
42
55
|
(colors, typography, voice). Feed hex values, font names, and tone keywords directly
|
|
43
56
|
into the prompt. Without tokens, derive palette and type from the brief itself;
|
|
@@ -35,6 +35,23 @@ Method skill. Inventories current brand expression across touchpoints and flags
|
|
|
35
35
|
|
|
36
36
|
1. **Gather the source of truth.** Collect the consumer brand's defined tokens (palette, type scale, logo rules), voice profile, and strategy doc if they exist. Consumer brand definition is authoritative; corpus defaults are gap-fill only.
|
|
37
37
|
2. **Inventory current expression per touchpoint.** Cover logo usage, colour palette, typography, voice/copy tone, imagery style, and iconography across the relevant surfaces (site, app, decks, marketing, docs).
|
|
38
|
+
|
|
39
|
+
**Personal and company profile surfaces, including LinkedIn, X, and GitHub
|
|
40
|
+
organization profiles, are deliberately excluded regardless of whether their
|
|
41
|
+
content is fetched, pasted, or supplied as a file, pending a written
|
|
42
|
+
public-profile-field privacy floor defining what may be processed.**
|
|
43
|
+
|
|
44
|
+
Recorded so the next reader does not re-derive the gap, which has already
|
|
45
|
+
happened once. The exclusion is about **handling**, not retrieval: a pasted
|
|
46
|
+
profile is mechanically a different thing from a network fetch, but the
|
|
47
|
+
missing artefact is a field-level classification saying which profile fields
|
|
48
|
+
are brand surface (logo, palette, bio messaging) and which are PII-adjacent
|
|
49
|
+
(employment history, contributor names, location). A profile's About text
|
|
50
|
+
carries both in one field. Without that classification the skill cannot
|
|
51
|
+
distinguish them, and no test can assert that it did. AI council 2/2,
|
|
52
|
+
2026-08-25. Include user-supplied profile inputs once a written, testable
|
|
53
|
+
field-level privacy floor exists; include fetched inputs only after both that
|
|
54
|
+
floor and a host-agent fetch contract exist.
|
|
38
55
|
3. **UI surface.** Invoke `existing-ui-audit` for UI component inventory. Do not re-implement it here — take its output as an input to this audit.
|
|
39
56
|
4. **Compare observed vs. defined.** For each touchpoint value, check it against the matching token or voice rule.
|
|
40
57
|
5. **Classify each finding.** Three buckets: `on-brand` (matches the defined token), `drift` (observed value diverges from the token), `undefined` (no token exists to audit against — this is a governance gap, not automatically wrong).
|
|
@@ -42,6 +59,22 @@ Method skill. Inventories current brand expression across touchpoints and flags
|
|
|
42
59
|
7. **Verify completeness.** Confirm every inventoried touchpoint is classified (`on-brand` / `drift` / `undefined`) — the audit is complete only when the classified count equals the inventoried count, and `existing-ui-audit` has run for every in-scope UI surface. Ensure each drift finding cites BOTH the defined value and the observed value; a finding missing either side is not yet verified.
|
|
43
60
|
8. **Output the findings list** (see Output format). Do not redesign or author replacements — hand drift findings to `brand-identity` or `brand-strategy`.
|
|
44
61
|
|
|
62
|
+
## Two constraints on platform-specific guidance
|
|
63
|
+
|
|
64
|
+
Both are constraints on what this skill may assert, not machinery, and neither
|
|
65
|
+
is a registry.
|
|
66
|
+
|
|
67
|
+
- **Any platform-specific guidance carries a source tier and a review date.**
|
|
68
|
+
Platform conventions — an image aspect ratio, a character limit, where a
|
|
69
|
+
profile crops a banner — change without notice, so a number stated here
|
|
70
|
+
without a date and a source is a claim that quietly stops being true. Tier it
|
|
71
|
+
(`platform-doc` / `observed` / `inferred`) and date it, or take it from the
|
|
72
|
+
platform's own current spec at audit time instead of stating it.
|
|
73
|
+
- **No engagement metric is stated as fact.** Reach, impression and
|
|
74
|
+
best-time-to-post figures are platform- and account-specific and are not
|
|
75
|
+
auditable from a brand token. Where such a figure is load-bearing to a
|
|
76
|
+
finding, attribute it; never assert it as a general truth.
|
|
77
|
+
|
|
45
78
|
## Output format
|
|
46
79
|
|
|
47
80
|
1. **Source-of-truth summary** — what brand tokens, voice rules, and strategy exist and where they were found (or "none defined" if absent).
|
|
@@ -77,6 +77,63 @@ Every answer built with this skill MUST:
|
|
|
77
77
|
That is the engine being honest, not broken — do not "resolve" them yourself
|
|
78
78
|
by guessing.
|
|
79
79
|
|
|
80
|
+
## Measured twice, and it has not won (v2, 2026-08-29)
|
|
81
|
+
|
|
82
|
+
Pre-registered, published whichever way it landed:
|
|
83
|
+
`internal/bench/reports/code-graph-vs-grep-inrepo-v2-2026-08-29.md`. The native
|
|
84
|
+
engine scored against disciplined `git grep` over three in-repo TypeScript
|
|
85
|
+
roots, 19 questions, per-class bars fixed before the run and unchanged from v1.
|
|
86
|
+
|
|
87
|
+
| Class | grep R | graph R | Δ pp | grep P | graph P | verdict |
|
|
88
|
+
|---|---|---|---|---|---|---|
|
|
89
|
+
| `callers` | 1.000 | 1.000 | +0.0 | 0.611 | 0.667 | TIE |
|
|
90
|
+
| `transitive-impact` | 0.611 | 0.500 | −11.1 | 1.000 | 0.667 | NULL |
|
|
91
|
+
| `path-between` | 0.917 | **1.000** | +8.3 | 0.778 | **1.000** | TIE |
|
|
92
|
+
| `references` | 1.000 | 0.333 | −66.7 | 0.833 | 0.333 | NULL |
|
|
93
|
+
|
|
94
|
+
**Zero classes met the win bar.** On `path-between` the graph is exact and is the
|
|
95
|
+
only class where it out-precises grep; it still ties, because the delta is +8.3 pp
|
|
96
|
+
against a +10 pp bar that was fixed before the run.
|
|
97
|
+
|
|
98
|
+
**The v1 run of 2026-08-28 published a false root cause, corrected 2026-08-29.**
|
|
99
|
+
It reported `path-between` as `VOID` because *"both arms measured nothing"*. Only
|
|
100
|
+
the grep arm did. The graph answered all three questions and v1's scorer discarded
|
|
101
|
+
the answer — it compared each returned symbol against the whole probe string
|
|
102
|
+
`"cmdBuild -> getParser"`. v1 also never invoked the shipped `path <a> <b>` verb,
|
|
103
|
+
and counted unresolved `symbol:` pseudo-nodes as files, which is the sole reason
|
|
104
|
+
its `callers` verdict was NULL with recall tied. v1's numbers are not retro-edited
|
|
105
|
+
— they were faithful to v1's own registration — and v1's report now carries the
|
|
106
|
+
correction. Do not quote a `path-between` delta near +89 pp: that figure comes
|
|
107
|
+
from repairing the graph arm and leaving grep on the broken probe.
|
|
108
|
+
|
|
109
|
+
**The rule's own wording was corrected by this result.** `external-code-graph-interop`
|
|
110
|
+
used to open by saying a committed index answers "far more precisely than a fresh
|
|
111
|
+
`grep`". That was never measured, and when it was, it was false for the native
|
|
112
|
+
engine on this repository's own code. The rule now gives the reasons that survive
|
|
113
|
+
measurement — an index that exists is already built and structured, so it is the
|
|
114
|
+
cheap first question — and drops the precision claim its own benchmark refuted.
|
|
115
|
+
|
|
116
|
+
**No class is graph-first.** Query the index first because an index that already
|
|
117
|
+
exists is cheap to ask and its answer is structured — not because it answers
|
|
118
|
+
better. When it returns nothing, that is the common case, and grep remains the
|
|
119
|
+
arm to fall back to rather than a grudging afterthought.
|
|
120
|
+
|
|
121
|
+
The sentence that stood here — *"the arm that won every valid class on this
|
|
122
|
+
corpus"* — is withdrawn. It is the framing v1's own report forbids: that report
|
|
123
|
+
says the defensible statement is *"zero classes met the pre-registered win
|
|
124
|
+
criterion"*, **not** that grep proved superior. It was also false on its own
|
|
125
|
+
terms under v2: grep wins two classes, ties two, and is out-precised on both
|
|
126
|
+
ties.
|
|
127
|
+
|
|
128
|
+
Scope, stated so this table is not over-read: it measured the **native** engine
|
|
129
|
+
on **this repository's TypeScript**, with a corpus of 19 questions. It is not
|
|
130
|
+
comparable to the 2026-07-28 external-corpus run, it is not comparable to v1
|
|
131
|
+
either (corpus, arm-B verb set and scorer all moved), and it says nothing about a
|
|
132
|
+
consumer-shipped SCIP index. Literal-string probes are reported as a separate
|
|
133
|
+
`capability-boundary` class with no floor derived from them: a symbol index
|
|
134
|
+
cannot answer them at all, which is where grep stays necessary rather than a
|
|
135
|
+
defect in the engine.
|
|
136
|
+
|
|
80
137
|
## Do NOT
|
|
81
138
|
|
|
82
139
|
- Do NOT rebuild a **fresh** consumer-shipped index — query it (interop
|
|
@@ -113,6 +113,14 @@ SQLite; ORM-agnostic):
|
|
|
113
113
|
|
|
114
114
|
## Gotcha
|
|
115
115
|
|
|
116
|
+
**MySQL and MariaDB share a query-syntax world. They never share a migration
|
|
117
|
+
one.** Treat them as one engine for writing a `SELECT`, and as two engines for
|
|
118
|
+
everything that changes a schema or reports on a plan: online-DDL semantics,
|
|
119
|
+
lock behavior under `ALTER`, feature availability, and `EXPLAIN` output all
|
|
120
|
+
diverge. Read the engine and its version from the project before making any
|
|
121
|
+
claim in that second group; where the project does not declare one, say the
|
|
122
|
+
engine is unknown rather than assuming.
|
|
123
|
+
|
|
116
124
|
- Check existing indexes before adding — duplicates waste write performance.
|
|
117
125
|
- Consider multi-tenant implications — queries may need customer DB scoping.
|
|
118
126
|
- `EXPLAIN` output varies between MariaDB and MySQL.
|
|
@@ -31,6 +31,33 @@ Before upgrading:
|
|
|
31
31
|
- **Review upgrade guides** — many packages provide migration docs.
|
|
32
32
|
- **Check runtime version requirements** — does the new version need a newer PHP / Node / Python / Go / Rust toolchain?
|
|
33
33
|
|
|
34
|
+
### 1b. Find where the version is DECLARED, before naming a file to edit
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
NEVER NAME AN EDIT SITE BEFORE ASKING WHERE THE VERSION IS DECLARED.
|
|
38
|
+
IN A CATALOG WORKSPACE THE MEMBER MANIFEST IS THE WRONG FILE:
|
|
39
|
+
THE VERSION IS ONE ROOT LINE WITH N REFERENTS.
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
A member `package.json` is the declaration site in an ordinary repository and
|
|
43
|
+
**not** in a workspace using a catalog. There, the member reads `catalog:` and
|
|
44
|
+
the range lives once in the workspace definition — editing the member either
|
|
45
|
+
does nothing or silently diverges from the catalog.
|
|
46
|
+
|
|
47
|
+
Ask in this order, and stop at the first that answers:
|
|
48
|
+
|
|
49
|
+
1. **A catalog entry for this dependency** — `pnpm-workspace.yaml` `catalogs:` /
|
|
50
|
+
`catalog:`, or the equivalent in another manager's workspace definition. If
|
|
51
|
+
the member's range starts with `catalog:`, this is the edit site. Name the
|
|
52
|
+
catalog (`default` included) in the guidance, not the member.
|
|
53
|
+
2. **A root-level pin** — `overrides` / `resolutions` / `pnpm.overrides`. A
|
|
54
|
+
member edit under one of these is overridden at install time.
|
|
55
|
+
3. **The member manifest** — the ordinary case, and only after 1 and 2 are
|
|
56
|
+
silent.
|
|
57
|
+
|
|
58
|
+
A repository with no catalog and no root pin behaves exactly as before; this
|
|
59
|
+
step adds a lookup, not a change of default.
|
|
60
|
+
|
|
34
61
|
### 2. Plan
|
|
35
62
|
|
|
36
63
|
Categorize changes needed:
|
|
@@ -221,7 +221,7 @@ fields change what a finding *means*:
|
|
|
221
221
|
all. Under `preserve` a palette or type-family delta is a **defect**; under
|
|
222
222
|
`redesign` it is the point.
|
|
223
223
|
- **`reference_maturity`** decides whether a difference from the reference is a
|
|
224
|
-
defect. A `wireframe` declares structure, so reproducing its
|
|
224
|
+
defect. A `wireframe` declares structure, so reproducing its gray boxes is
|
|
225
225
|
over-fidelity, not fidelity.
|
|
226
226
|
|
|
227
227
|
```
|
|
@@ -132,7 +132,7 @@ Verify the doc works for someone without your context.
|
|
|
132
132
|
* **One question per turn** (Iron Law from `ask-when-uncertain`) — never bundle clarifying + brainstorm + curate prompts in one message.
|
|
133
133
|
* **Never reprint the full doc** during iteration — always use `str-replace-editor`. Reprinting wastes tokens and creates merge drift.
|
|
134
134
|
* **Reader test is not optional** — without it, you ship the version that makes sense to you, not to readers. Skip only on explicit user override.
|
|
135
|
-
* **
|
|
135
|
+
* **Subagent absence** — `ai-council` may not be configured. Have the manual fresh-Claude fallback ready (Stage 3 step 2).
|
|
136
136
|
* **Image alt-text** — if the doc embeds images, add alt-text inline; without it, fresh-reader tools can't see them.
|
|
137
137
|
* **Language discipline** — keep the doc body in English (per `language-and-tone`). For verbatim German user phrases or interview quotes, use `DE: … · EN: …` anchor blocks.
|
|
138
138
|
|
|
@@ -79,7 +79,23 @@ Design starts from project truth, not generic aesthetic memory.
|
|
|
79
79
|
| `vue` | `resources/js/components/`, `src/components/`, `pages/` |
|
|
80
80
|
| `plain` | `resources/views/`, plus any `*.html` under `public/` |
|
|
81
81
|
|
|
82
|
-
Capture each component/template as:
|
|
82
|
+
Capture each component/template as:
|
|
83
|
+
`{path, name, kind: component|view|style|page, exports?: [props]}`.
|
|
84
|
+
|
|
85
|
+
The `kind` set is the one `agent-config ui:audit` actually emits — its single
|
|
86
|
+
definition is `AUDIT_KINDS` in `src/cli/commands/uiAudit.ts`, and a test asserts
|
|
87
|
+
this line against that constant rather than restating it. It read
|
|
88
|
+
`page|partial|component|layout` until 2026-08-26; only two of those four values
|
|
89
|
+
existed in the code, so an artefact written by the command was being read here
|
|
90
|
+
against a contract it did not satisfy.
|
|
91
|
+
|
|
92
|
+
`partial` and `layout` are not in the set. Neither has an operational definition
|
|
93
|
+
that survives contact with a real tree, and adding a branch for a category
|
|
94
|
+
nobody can test is how the previous mismatch happened.
|
|
95
|
+
|
|
96
|
+
`view` is the **Blade** classification — `*.blade.php` and `resources/views/`.
|
|
97
|
+
It reads zero in a JavaScript tree by construction, which is not the same as
|
|
98
|
+
unused.
|
|
83
99
|
|
|
84
100
|
### 2. Identify the design system
|
|
85
101
|
|
|
@@ -121,6 +121,12 @@ Discovery → Exploration → Questions → Architecture → Implementation →
|
|
|
121
121
|
- Follow chosen architecture from Phase 4.
|
|
122
122
|
- Follow codebase conventions strictly.
|
|
123
123
|
- Track progress via task list or roadmap.
|
|
124
|
+
- **One behavior at a time**: the failing test for that behavior, observed
|
|
125
|
+
failing, then the minimum code that makes it pass, then the next behavior.
|
|
126
|
+
Tests are a step of this phase, never a follow-up suggested in Phase 7 —
|
|
127
|
+
a plan that reaches the summary owing its tests planned test-after.
|
|
128
|
+
Exceptions are the Do-NOT list in the `test-driven-development` skill,
|
|
129
|
+
and a skipped cycle is recorded in the decision log rather than passed over.
|
|
124
130
|
|
|
125
131
|
#### Phase 6: Quality Review
|
|
126
132
|
- Review the implementation for:
|
|
@@ -132,7 +138,8 @@ Discovery → Exploration → Questions → Architecture → Implementation →
|
|
|
132
138
|
|
|
133
139
|
#### Phase 7: Summary
|
|
134
140
|
- Summarize what was built, key decisions, files modified.
|
|
135
|
-
- Suggest next steps (
|
|
141
|
+
- Suggest next steps (documentation, follow-up features) — never tests, which
|
|
142
|
+
Phase 5 already closed per behavior.
|
|
136
143
|
- Update roadmap if applicable.
|
|
137
144
|
|
|
138
145
|
## Decision log
|
|
@@ -147,7 +154,7 @@ This ensures future developers (and agents) understand the reasoning, not just t
|
|
|
147
154
|
|
|
148
155
|
## Bite-sized task granularity (structural roadmaps only)
|
|
149
156
|
|
|
150
|
-
When a feature plan's generated roadmap declares `complexity: structural` in its frontmatter, every task bullet must be self-contained and 2–5 minutes of work. Lightweight roadmaps (the default) skip this section — coarse-grained tasks ("
|
|
157
|
+
When a feature plan's generated roadmap declares `complexity: structural` in its frontmatter, every task bullet must be self-contained and 2–5 minutes of work. Lightweight roadmaps (the default) skip this section — coarse-grained tasks are correct when the work is well-scoped and low-risk — but coarse means *one behavior*, not one layer: ("Reject login with an unknown email — test, then handler", "Reject login with a wrong password — test, then handler"), never an implementation step followed by an "Update tests" step.
|
|
151
158
|
|
|
152
159
|
Structural roadmap tasks must include:
|
|
153
160
|
|
|
@@ -52,6 +52,48 @@ NO SECRET, PRIVILEGED KEY, OR SESSION TOKEN LIVES IN CLIENT CODE OR localStorage
|
|
|
52
52
|
| `target="_blank"` without `rel="noopener"` | Reverse tabnabbing (CWE-1022) | add `rel="noopener noreferrer"` |
|
|
53
53
|
| Missing CSP; missing alt/label/contrast | No XSS second line of defense; a11y failures | strict CSP (no `unsafe-inline`); alt text, labels, AA contrast |
|
|
54
54
|
|
|
55
|
+
## The server-composed bootstrap payload
|
|
56
|
+
|
|
57
|
+
A payload assembled **server-side and serialised into the page** for a client
|
|
58
|
+
island is a data-exposure surface: whatever is put in it is readable by anyone
|
|
59
|
+
who can load the page — no API call, no auth check, view-source. Several
|
|
60
|
+
mainstream frameworks ship their own named channel for exactly this, so the
|
|
61
|
+
pattern is a documented mechanism rather than one project's arrangement.
|
|
62
|
+
|
|
63
|
+
**Inspect the existing payload before judging any field.** Read what the channel
|
|
64
|
+
already carries and check current call sites for what the client actually
|
|
65
|
+
consumes — a field is only defensible against what the page needs, and a review
|
|
66
|
+
that never opened the payload is a guess. The grep below finds it.
|
|
67
|
+
|
|
68
|
+
**The per-field question, which is what this section is:**
|
|
69
|
+
|
|
70
|
+
> Would I return this field from a **public, unauthenticated** endpoint?
|
|
71
|
+
> If not, it does not belong in the payload.
|
|
72
|
+
|
|
73
|
+
Field classes that recur and are almost always wrong there: internal ids that
|
|
74
|
+
enumerate other users' rows · permission and role structures the client only
|
|
75
|
+
needs a boolean of · feature-flag payloads carrying unreleased product names ·
|
|
76
|
+
anything from an admin-scoped query that was convenient to reuse · a whole
|
|
77
|
+
serialised model where the page needs three of its fields.
|
|
78
|
+
|
|
79
|
+
**Nothing enforces this, and the split is deliberate.**
|
|
80
|
+
|
|
81
|
+
| Half | What it does | What it cannot do |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| the grep below | **locates** a payload a field was added to | tell a privileged field from a public one |
|
|
84
|
+
| this checklist entry | carries the **judgement** | run |
|
|
85
|
+
|
|
86
|
+
The question is not decidable by any check: a grep over the framework-named
|
|
87
|
+
payload channels cannot read intent. So the deterministic half is discovery,
|
|
88
|
+
advisory and non-blocking, and its whole value is putting the question in front
|
|
89
|
+
of a reader who would otherwise never see it. `enforced_by: none` is the honest
|
|
90
|
+
field here — this section refuses nothing.
|
|
91
|
+
|
|
92
|
+
**What may NOT be encoded.** The particular channel any one repository uses.
|
|
93
|
+
What is encoded is the question and the framework-named channels; a concrete
|
|
94
|
+
in-house payload shape would be one repository's implementation shipped as
|
|
95
|
+
guidance.
|
|
96
|
+
|
|
55
97
|
## Backstop greps
|
|
56
98
|
|
|
57
99
|
Run before committing frontend changes; each should return zero (or every hit is read and justified):
|
|
@@ -66,6 +108,8 @@ rg -n "origin:\s*['\"]\*['\"]|Access-Control-Allow-Origin.*\*"
|
|
|
66
108
|
rg -n "addEventListener\(\s*['\"]message['\"]" # then confirm each checks event.origin
|
|
67
109
|
# Unhardened external links
|
|
68
110
|
rg -n 'target=["'\'']_blank["'\'']' # then confirm rel="noopener" present
|
|
111
|
+
# Server-composed bootstrap payload — LOCATES it; the per-field judgement is yours
|
|
112
|
+
rg -n '__NEXT_DATA__|__NUXT__|window\.__INITIAL_STATE__|@json\(|json_encode\([^)]*\)\s*\)?\s*</script>|dehydratedState'
|
|
69
113
|
```
|
|
70
114
|
|
|
71
115
|
## Output format
|
|
@@ -143,20 +143,54 @@ export const checkPackage = (root: string): SurfaceReport => {
|
|
|
143
143
|
};
|
|
144
144
|
if (exportsField !== undefined) walkConditions(exportsField, 'exports.');
|
|
145
145
|
|
|
146
|
-
// (d) — a
|
|
146
|
+
// (d) — a range that only resolves INSIDE the workspace. Published with no
|
|
147
147
|
// `private: true` and no publishConfig, the consumer's install fails on a protocol
|
|
148
148
|
// their registry has never heard of.
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
//
|
|
150
|
+
// `catalog:` was added 2026-08-26 (road-to-internal-estate-fit 4.1) and it is the
|
|
151
|
+
// same defect, not an adjacent one: pnpm's catalog protocol resolves against the
|
|
152
|
+
// workspace's catalog definition and means nothing to a registry. It had been
|
|
153
|
+
// passing as an ordinary registry range, so the finding did not fire where it
|
|
154
|
+
// should. One predicate, two prefixes — the finding code and its reason carry over
|
|
155
|
+
// unchanged, which is why this is not a second finding type.
|
|
156
|
+
const UNPUBLISHABLE_RANGE_PREFIXES = ['workspace:', 'catalog:'] as const;
|
|
157
|
+
// Each dependency map is scanned SEPARATELY rather than spread into one
|
|
158
|
+
// object. The previous `{ ...deps, ...devDeps, ...peers }` merge let a later
|
|
159
|
+
// map SHADOW an earlier one for the same package name: a `workspace:` range
|
|
160
|
+
// in `dependencies` for a package that also appears in `peerDependencies`
|
|
161
|
+
// with a registry range was invisible, because the peer value won the spread.
|
|
162
|
+
// Found 2026-08-26 by a `catalog:` fixture for a name the test manifest also
|
|
163
|
+
// lists as a peer; fixed with 4.1 rather than noted, because it is the same
|
|
164
|
+
// predicate and the same few lines.
|
|
165
|
+
const workspaceRanges: [string, unknown][] = [
|
|
166
|
+
deps,
|
|
167
|
+
asRecord(manifest['devDependencies']),
|
|
168
|
+
peers,
|
|
169
|
+
].flatMap((m) =>
|
|
170
|
+
Object.entries(m).filter(
|
|
171
|
+
([, v]) =>
|
|
172
|
+
typeof v === 'string' &&
|
|
173
|
+
UNPUBLISHABLE_RANGE_PREFIXES.some((pre) => v.startsWith(pre)),
|
|
174
|
+
),
|
|
175
|
+
);
|
|
151
176
|
if (
|
|
152
177
|
workspaceRanges.length > 0 &&
|
|
153
178
|
manifest['private'] !== true &&
|
|
154
179
|
manifest['publishConfig'] === undefined
|
|
155
180
|
) {
|
|
181
|
+
const prefixes = [
|
|
182
|
+
...new Set(
|
|
183
|
+
workspaceRanges.map(
|
|
184
|
+
([, v]) =>
|
|
185
|
+
UNPUBLISHABLE_RANGE_PREFIXES.find((pre) => (v as string).startsWith(pre)) ??
|
|
186
|
+
'',
|
|
187
|
+
),
|
|
188
|
+
),
|
|
189
|
+
].sort();
|
|
156
190
|
findings.push({
|
|
157
191
|
code: 'workspace-range-publishable',
|
|
158
192
|
severity: 'warn',
|
|
159
|
-
message: `${String(workspaceRanges.length)}
|
|
193
|
+
message: `${String(workspaceRanges.length)} workspace-local range(s) (${prefixes.join(', ')}) in a package that is neither private nor carrying publishConfig — the protocol does not resolve outside the workspace`,
|
|
160
194
|
});
|
|
161
195
|
}
|
|
162
196
|
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"name": "Acceptance criteria",
|
|
19
19
|
"cross_cutting": false,
|
|
20
20
|
"weight": 3,
|
|
21
|
-
"criterion": "Acceptance criteria are
|
|
22
|
-
"gap_signal": "AC section missing; or AC items are task descriptions ('implement the API') rather than verifiable outcomes ('returns 200 with a body matching the schema')."
|
|
21
|
+
"criterion": "Acceptance criteria are independently testable outcomes, not task descriptions — an implementer can write a test before touching code. Whether they are owed in Given-When-Then form is decided by the observable-behavior test in `src/skills/test-case-discovery/SKILL.md` § Does this change owe an executable behavior contract?, not asserted here: most tickets owe verifiable checklist items, and only a change with an audience outside the code owes a behavior contract. Where one is owed, that section's anti-script rule applies — a criterion naming a selector, a timeout or a keystroke scores as a gap, however well-formed its Given-When-Then.",
|
|
22
|
+
"gap_signal": "AC section missing; or AC items are task descriptions ('implement the API') rather than verifiable outcomes ('returns 200 with a body matching the schema'); or a Given-When-Then criterion scripts the interface ('When I click #submit') instead of stating the rule."
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"id": "dor_readiness",
|
|
@@ -33,6 +33,41 @@ Use this skill for all Laravel-specific code generation and editing tasks, espec
|
|
|
33
33
|
|
|
34
34
|
This skill extends the base `php-coder` skill and applies Laravel conventions on top of the project's general PHP rules.
|
|
35
35
|
|
|
36
|
+
## When NOT to use — components without the framework
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
A DEPENDENCY PROVES A LIBRARY IS AVAILABLE. ONLY THE ENTRY POINT AND THE
|
|
40
|
+
ROUTER PROVE WHICH APPLICATION SHAPE IS RUNNING.
|
|
41
|
+
`illuminate/*` PACKAGES WITH NO SKELETON MARKER IS A THIRD STATE, AND THIS SKILL
|
|
42
|
+
DOES NOT APPLY TO IT.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Laravel ships its ORM, container, collections and HTTP layer as
|
|
46
|
+
independently installable packages, usable with no framework present — a
|
|
47
|
+
published distribution model, not one consumer's arrangement. An application
|
|
48
|
+
built that way has a **custom entry point and a custom router**. Routing it here
|
|
49
|
+
offers a CLI that does not exist, a request-validation primitive that is not
|
|
50
|
+
wired, and a routes file that was never there: every suggestion confidently
|
|
51
|
+
wrong, and the reason visible only from the entry point.
|
|
52
|
+
|
|
53
|
+
**The probe set, and its cost.** A fixed set of filesystem existence checks plus
|
|
54
|
+
one manifest read — no directory walk, no content scan, and never re-derived per
|
|
55
|
+
session. Any ONE marker present means the framework is real:
|
|
56
|
+
|
|
57
|
+
| Probe | Meaning |
|
|
58
|
+
|---|---|
|
|
59
|
+
| `artisan` | the console entry point the skeleton writes |
|
|
60
|
+
| `config/app.php` | the skeleton's bootstrap config |
|
|
61
|
+
| `bootstrap/app.php` | the application bootstrap |
|
|
62
|
+
|
|
63
|
+
`illuminate/*` in `composer.json` with **none** of those markers is
|
|
64
|
+
*components-without-the-framework*. Say so and route away from this skill rather
|
|
65
|
+
than answering as though the framework were there.
|
|
66
|
+
|
|
67
|
+
Implemented deterministically in `src/install/detect_php_shape.ts`
|
|
68
|
+
(`detectPhpShape`), whose `PROBE_PATHS` is this table and whose verdict names
|
|
69
|
+
what a wrong route would have offered.
|
|
70
|
+
|
|
36
71
|
## Procedure: Write Laravel code
|
|
37
72
|
|
|
38
73
|
→ **First apply the `php-coder` skill** — it handles project docs, module docs, patterns, and quality tools.
|