@event4u/agent-config 9.11.0 → 9.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +80 -204
- package/README.md +8 -1
- package/dist/agent-src/commands/fix/ci.md +29 -0
- package/dist/agent-src/commands/pr/create.md +60 -0
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +18 -2
- package/dist/agent-src/rules/active-remediation.md +0 -2
- package/dist/agent-src/rules/architecture.md +0 -1
- package/dist/agent-src/rules/artifact-drafting-protocol.md +0 -4
- package/dist/agent-src/rules/autonomous-execution.md +1 -2
- package/dist/agent-src/rules/broken-access-control.md +0 -2
- package/dist/agent-src/rules/code-comment-discipline.md +0 -3
- package/dist/agent-src/rules/code-provenance.md +0 -3
- package/dist/agent-src/rules/communication-through-line.md +2 -3
- package/dist/agent-src/rules/content-quoting-floor.md +0 -2
- package/dist/agent-src/rules/context-hygiene.md +1 -3
- package/dist/agent-src/rules/decision-revisit-gate.md +0 -2
- package/dist/agent-src/rules/design-fidelity.md +30 -1
- package/dist/agent-src/rules/domain-adoption-policy.md +0 -3
- package/dist/agent-src/rules/downstream-changes.md +10 -1
- package/dist/agent-src/rules/external-reference-deep-dive.md +0 -7
- package/dist/agent-src/rules/fast-path-marker-visibility.md +0 -1
- package/dist/agent-src/rules/git-history-discipline.md +0 -7
- package/dist/agent-src/rules/guidelines.md +0 -2
- package/dist/agent-src/rules/improve-before-implement.md +4 -2
- package/dist/agent-src/rules/invite-challenge.md +0 -4
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +0 -2
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +0 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +2 -2
- package/dist/agent-src/rules/missing-tool-handling.md +0 -1
- package/dist/agent-src/rules/no-attribution-footers.md +0 -3
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +8 -5
- package/dist/agent-src/rules/no-pr-progress-comments.md +1 -3
- package/dist/agent-src/rules/no-roadmap-references.md +0 -2
- package/dist/agent-src/rules/output-discipline.md +0 -1
- package/dist/agent-src/rules/prefer-enums-over-literals.md +0 -2
- package/dist/agent-src/rules/preservation-guard.md +0 -3
- package/dist/agent-src/rules/role-mode-adherence.md +0 -1
- package/dist/agent-src/rules/secret-vcs-guard.md +0 -2
- package/dist/agent-src/rules/senior-engineering-discipline.md +0 -2
- package/dist/agent-src/rules/session-canary.md +0 -2
- package/dist/agent-src/rules/size-enforcement.md +0 -5
- package/dist/agent-src/rules/source-confidentiality.md +0 -3
- package/dist/agent-src/rules/source-discovery-gate.md +0 -2
- package/dist/agent-src/rules/think-before-action.md +3 -3
- package/dist/agent-src/rules/token-budget-discipline.md +0 -1
- package/dist/agent-src/rules/token-efficiency.md +1 -2
- package/dist/agent-src/rules/tool-safety.md +0 -1
- package/dist/agent-src/rules/user-interaction.md +0 -3
- package/dist/agent-src/rules/user-interrupt-priority.md +0 -1
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +8 -0
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +1 -0
- package/dist/agent-src/skills/analysis-skill-router/SKILL.md +55 -86
- package/dist/agent-src/skills/character-consistency/SKILL.md +7 -4
- package/dist/agent-src/skills/decision-record/SKILL.md +8 -0
- package/dist/agent-src/skills/design-intelligence/SKILL.md +27 -1
- package/dist/agent-src/skills/design-intelligence/data/font-pairings-reference.csv +74 -74
- package/dist/agent-src/skills/design-intelligence/data/manifest.json +2 -0
- package/dist/agent-src/skills/design-review/SKILL.md +11 -0
- package/dist/agent-src/skills/design-system-capture/reference/design-system-json.md +8 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +0 -7
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +34 -3
- package/dist/agent-src/skills/fe-design/SKILL.md +10 -0
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +7 -4
- package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +201 -0
- package/dist/agent-src/skills/performance/SKILL.md +14 -0
- package/dist/agent-src/skills/pixar-storyteller/SKILL.md +8 -5
- package/dist/agent-src/skills/scene-expander/SKILL.md +9 -6
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +10 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +55 -11
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +180 -0
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +14 -37
- package/dist/agent-src/skills/video-director/SKILL.md +9 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +162 -17
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +118 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +49 -6
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +9 -5
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +182 -29
- package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +311 -24
- package/dist/agent-src/templates/scripts/work_engine/state.ts +55 -0
- package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
- package/dist/cli-delegate/{chunk-IR7P7JWA.js → chunk-A3HJ6NTI.js} +271 -59
- package/dist/cli-delegate/chunk-EJYIGZ3T.js +125 -0
- package/dist/cli-delegate/{chunk-RDGRHAAB.js → chunk-HYWSRNUX.js} +6 -86
- package/dist/cli-delegate/{chunk-YMFO6FDN.js → chunk-QFKQLQ7X.js} +313 -81
- package/dist/cli-delegate/{chunk-4SV3XGFA.js → chunk-TEGJU2JX.js} +7 -9
- package/dist/cli-delegate/chunk-TJIAM5FW.js +133 -0
- package/dist/cli-delegate/cmd_conformance.js +4 -7
- package/dist/cli-delegate/cmd_doctor.js +3 -5
- package/dist/cli-delegate/cmd_explain.js +153 -85
- package/dist/cli-delegate/cmd_export.js +5 -3
- package/dist/cli-delegate/cmd_fleet.js +2 -1
- package/dist/cli-delegate/cmd_preflight.js +6 -123
- package/dist/cli-delegate/cmd_prune.js +5 -3
- package/dist/cli-delegate/cmd_settings_migrate.js +5 -3
- package/dist/cli-delegate/cmd_sync.js +5 -3
- package/dist/cli-delegate/cmd_uninstall.js +6 -5
- package/dist/cli-delegate/cmd_validate.js +5 -3
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +116 -72
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- 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 +174 -13
- package/dist/install/install.mjs +605 -412
- package/dist/install/ruleInScope.js +123 -0
- package/dist/install/ruleInScope.js.map +1 -0
- package/dist/install/rule_scope.js +2 -2
- package/dist/install/rule_scope.js.map +1 -1
- package/dist/install/wizard-plan.js +10 -1
- package/dist/install/wizard-plan.js.map +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +710 -2491
- package/dist/router.json +1 -1
- package/dist/scripts/condense.js +8 -24
- package/dist/scripts/condense.js.map +1 -1
- package/docs/MIGRATION.md +1 -1
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +71 -0
- package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +24 -1
- package/docs/guidelines/code-clarity.md +9 -2
- package/docs/guidelines/design-fidelity-mechanics.md +58 -0
- package/llms.txt +63 -27
- package/package.json +4 -4
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +162 -17
- package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +118 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +49 -6
- package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +9 -5
- package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +182 -29
- package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +311 -24
- package/src/agent-src/templates/scripts/work_engine/state.ts +55 -0
- package/src/config/agent-settings.template.yml +8 -0
- package/src/install/ruleInScope.ts +133 -0
- package/src/install/rule_scope.ts +2 -2
- package/src/install/wizard-plan.ts +11 -1
- package/src/scripts/_lib/counted_probe.ts +142 -0
- package/src/scripts/_lib/global_deploy_inventory.ts +38 -2
- package/src/scripts/_lib/overbuild_lens_contract.ts +196 -0
- package/src/scripts/_lib/release_scope.ts +207 -0
- package/src/scripts/ai_council/stance_tally.ts +37 -2
- package/src/scripts/audit_auto_rules.ts +9 -9
- package/src/scripts/audit_likelihood.ts +3 -3
- package/src/scripts/audit_overlap.ts +2 -2
- package/src/scripts/audit_skill_overlap.ts +233 -95
- package/src/scripts/audit_skill_overlap_allowlist.json +4 -0
- package/src/scripts/build_proof.ts +15 -1
- package/src/scripts/check_dependency_floors.ts +16 -6
- package/src/scripts/check_gate_coverage.ts +6 -6
- package/src/scripts/check_installer_import_purity.ts +295 -0
- package/src/scripts/check_kernel_rule_bundle.ts +5 -4
- package/src/scripts/check_token_quality_golden.ts +0 -18
- package/src/scripts/code_graph/loader.ts +35 -6
- package/src/scripts/compile_router.ts +3 -8
- package/src/scripts/condense.ts +9 -30
- package/src/scripts/explain_run.ts +0 -1
- package/src/scripts/generate_pack_manifests.ts +3 -20
- package/src/scripts/hooks/block_kernel_rule_writes.ts +145 -10
- package/src/scripts/hooks/block_no_verify.ts +101 -0
- package/src/scripts/install-hooks.sh +36 -4
- package/src/scripts/install.ts +210 -5
- package/src/scripts/lint_agent_security.ts +5 -4
- package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
- package/src/scripts/lint_regression.ts +92 -1
- package/src/scripts/lint_skill_descriptions.ts +93 -5
- package/src/scripts/lint_ui_stack_bundles.ts +31 -0
- package/src/scripts/project_thin_rules.ts +2 -2
- package/src/scripts/release.ts +107 -3
- package/src/scripts/resolve_lint_scope.ts +53 -0
- package/src/scripts/router_telemetry.ts +0 -5
- package/src/scripts/runtime_dispatcher.ts +40 -0
- package/src/scripts/schemas/pack.schema.json +1 -5
- package/src/scripts/schemas/rule.schema.json +1 -2
- package/src/scripts/self_review_gate.ts +15 -73
- package/src/scripts/skill_linter.ts +93 -11
- package/src/scripts/sweep_dead_scan_roots.ts +550 -0
- package/src/scripts/trigger_coverage.ts +11 -37
- package/dist/cli-delegate/chunk-7DSAMZFU.js +0 -356
- package/dist/cli-delegate/chunk-BJGXZNPM.js +0 -266
- package/dist/cli-delegate/chunk-TFG57JJM.js +0 -1969
|
@@ -11,6 +11,11 @@ packs:
|
|
|
11
11
|
|
|
12
12
|
# analysis-skill-router
|
|
13
13
|
|
|
14
|
+
A chooser, not a worker. It answers exactly one question — *which skill* — and
|
|
15
|
+
then gets out of the way. How to actually carry out the work belongs to
|
|
16
|
+
whichever skill this picks; a chooser that also explains the work reads like
|
|
17
|
+
its own fallback target, which is the defect this file was cut back from.
|
|
18
|
+
|
|
14
19
|
## When to use
|
|
15
20
|
|
|
16
21
|
Use this skill when:
|
|
@@ -29,111 +34,75 @@ Do NOT use when:
|
|
|
29
34
|
|
|
30
35
|
## Procedure
|
|
31
36
|
|
|
32
|
-
### 1.
|
|
33
|
-
|
|
34
|
-
Classify the request as one of:
|
|
35
|
-
|
|
36
|
-
* full project analysis
|
|
37
|
-
* architecture review
|
|
38
|
-
* broad multi-layer debugging
|
|
39
|
-
* framework-specific deep analysis
|
|
40
|
-
* narrow root-cause analysis
|
|
41
|
-
* performance/security specialist analysis
|
|
42
|
-
* simple local code issue
|
|
43
|
-
|
|
44
|
-
### 2. Check whether deep analysis is justified
|
|
45
|
-
|
|
46
|
-
Use deep analysis only if at least one is true:
|
|
47
|
-
|
|
48
|
-
* the user explicitly asks for broad analysis
|
|
49
|
-
* the system is unclear or unknown
|
|
50
|
-
* the issue spans multiple layers
|
|
51
|
-
* architecture reconstruction is required
|
|
52
|
-
* the cause is not local and not obvious
|
|
53
|
-
|
|
54
|
-
If none apply → do NOT route to a broad analysis skill.
|
|
55
|
-
|
|
56
|
-
### 3. Detect framework or system type
|
|
57
|
-
|
|
58
|
-
Check whether the request clearly targets:
|
|
59
|
-
|
|
60
|
-
* Laravel, Symfony, Zend/Laminas, Node/Express, React, Next.js
|
|
61
|
-
* unknown / mixed stack
|
|
62
|
-
|
|
63
|
-
### 4. Route to the correct skill
|
|
37
|
+
### 1. Classify the scope
|
|
64
38
|
|
|
65
|
-
|
|
39
|
+
Pick one: full project · architecture review · broad multi-layer debugging ·
|
|
40
|
+
framework-specific deep dive · narrow root cause · performance/security
|
|
41
|
+
specialist · simple local issue.
|
|
66
42
|
|
|
67
|
-
|
|
68
|
-
|
|
43
|
+
**Broad scope requires a reason.** At least one must hold, or the answer is a
|
|
44
|
+
narrow specialist: the user asked for breadth · the system is unknown · the
|
|
45
|
+
issue spans layers · architecture must be reconstructed · the cause is
|
|
46
|
+
non-local.
|
|
69
47
|
|
|
70
|
-
|
|
48
|
+
### 2. Detect the framework
|
|
71
49
|
|
|
72
|
-
|
|
73
|
-
|
|
50
|
+
Laravel · Symfony · Zend/Laminas · Node/Express · React · Next.js · unknown or
|
|
51
|
+
mixed.
|
|
74
52
|
|
|
75
|
-
|
|
53
|
+
### 3. Read the decision table
|
|
76
54
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
55
|
+
| Signal | Route to |
|
|
56
|
+
|---|---|
|
|
57
|
+
| Full audit, or unclear stack | `universal-project-analysis` |
|
|
58
|
+
| Unknown system, discovery-focused | `project-analysis-core` |
|
|
59
|
+
| Concrete problem, several plausible causes | `project-analysis-hypothesis-driven` |
|
|
60
|
+
| Bug-focused, not full-project | `bug-analyzer` |
|
|
61
|
+
| Laravel | `project-analysis-laravel` |
|
|
62
|
+
| Symfony | `project-analysis-symfony` |
|
|
63
|
+
| Zend/Laminas | `project-analysis-zend-laminas` |
|
|
64
|
+
| Node/Express | `project-analysis-node-express` |
|
|
65
|
+
| React state / render / hooks | `project-analysis-react` |
|
|
66
|
+
| Next.js SSR / cache / hydration | `project-analysis-nextjs` |
|
|
67
|
+
| Bottleneck | `performance-analysis` |
|
|
68
|
+
| Security concern | `security-audit` |
|
|
81
69
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
* React state/render/hooks issues → `project-analysis-react`
|
|
85
|
-
* Next.js SSR/client/cache/hydration issues → `project-analysis-nextjs`
|
|
86
|
-
|
|
87
|
-
#### Specialist follow-up routing
|
|
88
|
-
|
|
89
|
-
* performance bottleneck → `performance-analysis`
|
|
90
|
-
* security concern → `security-audit`
|
|
91
|
-
|
|
92
|
-
### 5. Validate routing quality
|
|
93
|
-
|
|
94
|
-
Check:
|
|
95
|
-
|
|
96
|
-
* the chosen skill is narrower than the broadest possible option
|
|
97
|
-
* full-project analysis is actually justified if selected
|
|
98
|
-
* framework-specific skill matches the explicit framework
|
|
99
|
-
* no simpler specialist skill was skipped
|
|
70
|
+
Tie-break: **the narrowest row that still covers the request wins.**
|
|
100
71
|
|
|
101
72
|
## Output format
|
|
102
73
|
|
|
103
|
-
1.
|
|
104
|
-
2.
|
|
105
|
-
3. Why broader
|
|
106
|
-
4.
|
|
107
|
-
|
|
108
|
-
## Routing heuristics
|
|
109
|
-
|
|
110
|
-
**Choose `universal-project-analysis` only if:** user explicitly wants full audit, architecture must be reconstructed, stack is unclear, multiple subsystems involved.
|
|
111
|
-
|
|
112
|
-
**Choose `project-analysis-core` if:** broad discovery needed, framework deep-dive not yet justified.
|
|
113
|
-
|
|
114
|
-
**Choose `project-analysis-hypothesis-driven` if:** problem is concrete, multiple causes plausible, main job is explanation not discovery.
|
|
115
|
-
|
|
116
|
-
**Choose framework-specific analysis if:** framework is explicit, failure pattern is framework-shaped.
|
|
74
|
+
1. The selected skill.
|
|
75
|
+
2. The signal from step 1–2 that selected it.
|
|
76
|
+
3. Why the next-broader row lost, when one was plausible.
|
|
77
|
+
4. Any skill to chain afterwards — or "none".
|
|
117
78
|
|
|
118
|
-
|
|
79
|
+
One or two lines total. A routing verdict longer than the request it routes is
|
|
80
|
+
itself a routing failure.
|
|
119
81
|
|
|
120
82
|
## Examples
|
|
121
83
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
84
|
+
| Request | Route |
|
|
85
|
+
|---|---|
|
|
86
|
+
| "Analyze this whole Laravel project" | `universal-project-analysis`, chain `project-analysis-laravel` |
|
|
87
|
+
| "Hydration mismatch in Next.js" | `project-analysis-nextjs` — no full-project step |
|
|
88
|
+
| "Could be cache, queue, or a version mismatch" | `project-analysis-hypothesis-driven` |
|
|
89
|
+
| "Change one React component" | none — implementation skill |
|
|
126
90
|
|
|
127
91
|
## Gotcha
|
|
128
92
|
|
|
129
|
-
*
|
|
130
|
-
|
|
131
|
-
|
|
93
|
+
* **Size adjectives read as scope.** "Our *whole* Laravel app is slow" picks the
|
|
94
|
+
broad row on the word "whole", and the audit then spends its passes
|
|
95
|
+
rediscovering a stack the request already named. The step-2 framework signal
|
|
96
|
+
outranks size words — those are how frustration sounds, not scope.
|
|
97
|
+
* **Breadth feels safe and costs sharpness.** The most expensive choice is
|
|
98
|
+
rarely the best one once the problem is already localised.
|
|
99
|
+
* **Steps 1 and 2 disagreeing is a question, not a tie-break.** Ask which the
|
|
100
|
+
user meant instead of picking the broader row to be safe.
|
|
132
101
|
|
|
133
102
|
## Do NOT
|
|
134
103
|
|
|
135
104
|
* Do NOT default to `universal-project-analysis`
|
|
136
|
-
* Do NOT
|
|
137
|
-
* Do NOT choose a generic skill when a framework-specific one clearly fits
|
|
138
|
-
* Do NOT route to deep analysis when a simple specialist skill is enough
|
|
105
|
+
* Do NOT choose a generic skill when a framework-specific row fits
|
|
139
106
|
* Do NOT confuse discovery with root-cause investigation
|
|
107
|
+
* Do NOT re-import procedure, validation checklists, or output contracts from
|
|
108
|
+
the skills in the table — that is what this file was cut back from
|
|
@@ -181,12 +181,15 @@ Worked example — `creature`:
|
|
|
181
181
|
|
|
182
182
|
## Policies
|
|
183
183
|
|
|
184
|
+
Paths, enforcement model, and the full set: the
|
|
185
|
+
[media policy preamble](../../../agents/settings/policies/media/README.md).
|
|
186
|
+
|
|
184
187
|
When a character lock would identify or render a real person, consult before emitting the JSON:
|
|
185
188
|
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
189
|
+
- **`likeness`** — real-person identity tokens require a cited likeness release.
|
|
190
|
+
- **`public-figures`** — recognised public figures carry the harder gate (publicity rights + transformative-intent).
|
|
191
|
+
- **`voice-cloning`** — when `voice_note` references a real person's voice.
|
|
192
|
+
- **`disclosure`** — outputs carrying a real-person lock require the non-removable AI-generation disclosure downstream.
|
|
190
193
|
|
|
191
194
|
Refuse-and-surface the file path; do not silently sanitise the prompt.
|
|
192
195
|
|
|
@@ -58,6 +58,14 @@ Do NOT use when:
|
|
|
58
58
|
get a one-page record; one-way doors get the full options +
|
|
59
59
|
consequences + supersession chain. The reversibility row of the
|
|
60
60
|
matrix decides which template fires. See `mental-models.md` § 10.
|
|
61
|
+
**Corollary — a shortcut through a one-way door is a decision, not a
|
|
62
|
+
defer.** The cheap-and-simple option is *preferred* where the choice can
|
|
63
|
+
be walked back later. Where it cannot — a public API shape, a DB schema,
|
|
64
|
+
a migration, a wire format, a published identifier — "we can simplify
|
|
65
|
+
this later" is false, so it never ships as a deferred note; it lands
|
|
66
|
+
here as a recorded decision with its consequences named. The one-way
|
|
67
|
+
categories are enumerated so the call is not left to a judgement about
|
|
68
|
+
what feels important.
|
|
61
69
|
- **Team context-spine slot.** Read the **team** slot of the
|
|
62
70
|
[context-spine](../../../docs/contracts/context-spine.md) to
|
|
63
71
|
capture who is bound by the decision (review groups, on-call
|
|
@@ -204,6 +204,23 @@ corpus. Canon is a gap-filler, never an override of a registered brand value.
|
|
|
204
204
|
4. On `design_confirmed: true` the directive engine advances; revisions
|
|
205
205
|
loop back here.
|
|
206
206
|
|
|
207
|
+
### Font delivery columns — which one is the answer
|
|
208
|
+
|
|
209
|
+
`font-pairings-reference.csv` carries three delivery-adjacent columns and they
|
|
210
|
+
are **not** interchangeable. This is the arbitration between them, so the file
|
|
211
|
+
and its sibling `data/stacks/nextjs.csv` (row 22: a font-CDN `<link>` sits in
|
|
212
|
+
that row's **Don't** column) no longer read as opposite instructions:
|
|
213
|
+
|
|
214
|
+
| Column | What it answers | Status |
|
|
215
|
+
|---|---|---|
|
|
216
|
+
| `Google Fonts URL` | *where do I find / verify this font?* | discovery + availability check |
|
|
217
|
+
| `Self-Hosted Route` | *how does it get onto the page?* | **the default answer** — `@fontsource/*` package ids derived from the row's own Google-Fonts families; two rows name a foundry file instead (Fontshare pairs with a Google alternative) |
|
|
218
|
+
| `CSS Import` | the third-party CDN `@import` | **opt-in only** — emitting it transmits the visitor's IP to the third party; policy owner is [`design-fidelity-mechanics`](../../../docs/guidelines/design-fidelity-mechanics.md) § Asset & imagery discipline ([`ADR-205`](../../../docs/decisions/ADR-205-webfont-delivery-ownership.md)) |
|
|
219
|
+
|
|
220
|
+
Per-stack route resolution (Next / bundler / asset-pipeline / plain) lives in
|
|
221
|
+
[`typography-system`](../typography-system/SKILL.md) § Delivery — one table, not
|
|
222
|
+
two.
|
|
223
|
+
|
|
207
224
|
### Font fallback (no google-fonts index — by design)
|
|
208
225
|
|
|
209
226
|
The 745 KB Google-Fonts index was rejected (ADR-061 §8): it duplicates a
|
|
@@ -332,7 +349,16 @@ Before finalizing any design brief, cross-check against
|
|
|
332
349
|
[`docs/guidelines/design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md)
|
|
333
350
|
— especially the Color (C1–C5), Typography (T7–T8), and Layout (L1–L2) sections.
|
|
334
351
|
If the grounded corpus selection lands on a pattern in the catalog, either invoke
|
|
335
|
-
the override condition or adjust the selection.
|
|
352
|
+
the override condition or adjust the selection.
|
|
353
|
+
For typography this is **a field, not a memory test**: a
|
|
354
|
+
`font-pairings-reference.csv` row whose heading or body font is a T7 overused-AI
|
|
355
|
+
default carries it in its `AI-Default Flag` column (`T7:<font>`; 15 of 73 rows) —
|
|
356
|
+
read the field. An empty flag means the row carries no T7 font, so a pairing is
|
|
357
|
+
never "flagged by association" (Poppins + Open Sans, the example most often
|
|
358
|
+
cited as flagged, carries none). T8 (single typeface for everything) needs no
|
|
359
|
+
column: it is `Heading Font == Body Font` on the row. A flag is a visible
|
|
360
|
+
conflict to resolve, never a ban — the catalog's override condition still
|
|
361
|
+
applies. Run the AI-slop originality
|
|
336
362
|
self-test (catalog § "The AI-slop originality self-test") on the chosen aesthetic
|
|
337
363
|
direction before emitting `design_confirmed`.
|
|
338
364
|
|