feed-the-machine 1.5.0 → 1.6.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/LICENSE +21 -21
- package/README.md +170 -170
- package/bin/generate-manifest.mjs +463 -463
- package/bin/install.mjs +491 -491
- package/docs/HOOKS.md +243 -243
- package/docs/INBOX.md +233 -233
- package/ftm/SKILL.md +122 -122
- package/ftm-audit/SKILL.md +623 -541
- package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
- package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
- package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
- package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
- package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
- package/ftm-audit/scripts/run-knip.sh +23 -23
- package/ftm-audit.yml +2 -2
- package/ftm-brainstorm/SKILL.md +498 -498
- package/ftm-brainstorm/evals/evals.json +100 -100
- package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
- package/ftm-brainstorm/references/agent-prompts.md +224 -224
- package/ftm-brainstorm/references/plan-template.md +121 -121
- package/ftm-brainstorm.yml +2 -2
- package/ftm-browse/SKILL.md +454 -454
- package/ftm-browse/daemon/browser-manager.ts +206 -206
- package/ftm-browse/daemon/bun.lock +30 -30
- package/ftm-browse/daemon/cli.ts +347 -347
- package/ftm-browse/daemon/commands.ts +410 -410
- package/ftm-browse/daemon/main.ts +357 -357
- package/ftm-browse/daemon/package.json +17 -17
- package/ftm-browse/daemon/server.ts +189 -189
- package/ftm-browse/daemon/snapshot.ts +519 -519
- package/ftm-browse/daemon/tsconfig.json +22 -22
- package/ftm-browse.yml +4 -4
- package/ftm-capture/SKILL.md +370 -370
- package/ftm-capture.yml +4 -4
- package/ftm-codex-gate/SKILL.md +361 -361
- package/ftm-codex-gate.yml +2 -2
- package/ftm-config/SKILL.md +345 -345
- package/ftm-config.default.yml +82 -80
- package/ftm-config.yml +2 -2
- package/ftm-council/SKILL.md +416 -416
- package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
- package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
- package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
- package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
- package/ftm-council.yml +2 -2
- package/ftm-dashboard/SKILL.md +163 -163
- package/ftm-dashboard.yml +4 -4
- package/ftm-debug/SKILL.md +1037 -1037
- package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
- package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
- package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
- package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
- package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
- package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
- package/ftm-debug.yml +2 -2
- package/ftm-diagram/SKILL.md +277 -277
- package/ftm-diagram.yml +2 -2
- package/ftm-executor/SKILL.md +777 -767
- package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
- package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
- package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
- package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
- package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
- package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
- package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
- package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
- package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -44
- package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
- package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
- package/ftm-executor/runtime/package.json +8 -8
- package/ftm-executor.yml +2 -2
- package/ftm-git/SKILL.md +441 -441
- package/ftm-git/evals/evals.json +26 -26
- package/ftm-git/evals/promptfoo.yaml +75 -75
- package/ftm-git/hooks/post-commit-experience.sh +92 -92
- package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
- package/ftm-git/references/protocols/REMEDIATION.md +139 -139
- package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
- package/ftm-git.yml +2 -2
- package/ftm-inbox/backend/adapters/_retry.py +64 -64
- package/ftm-inbox/backend/adapters/base.py +230 -230
- package/ftm-inbox/backend/adapters/freshservice.py +104 -104
- package/ftm-inbox/backend/adapters/gmail.py +125 -125
- package/ftm-inbox/backend/adapters/jira.py +136 -136
- package/ftm-inbox/backend/adapters/registry.py +192 -192
- package/ftm-inbox/backend/adapters/slack.py +110 -110
- package/ftm-inbox/backend/db/connection.py +54 -54
- package/ftm-inbox/backend/db/schema.py +78 -78
- package/ftm-inbox/backend/executor/__init__.py +7 -7
- package/ftm-inbox/backend/executor/engine.py +149 -149
- package/ftm-inbox/backend/executor/step_runner.py +98 -98
- package/ftm-inbox/backend/main.py +103 -103
- package/ftm-inbox/backend/models/__init__.py +1 -1
- package/ftm-inbox/backend/models/unified_task.py +36 -36
- package/ftm-inbox/backend/planner/__init__.py +6 -6
- package/ftm-inbox/backend/planner/generator.py +127 -127
- package/ftm-inbox/backend/planner/schema.py +34 -34
- package/ftm-inbox/backend/requirements.txt +5 -5
- package/ftm-inbox/backend/routes/execute.py +186 -186
- package/ftm-inbox/backend/routes/health.py +52 -52
- package/ftm-inbox/backend/routes/inbox.py +68 -68
- package/ftm-inbox/backend/routes/plan.py +271 -271
- package/ftm-inbox/bin/launchagent.mjs +91 -91
- package/ftm-inbox/bin/setup.mjs +188 -188
- package/ftm-inbox/bin/start.sh +10 -10
- package/ftm-inbox/bin/status.sh +17 -17
- package/ftm-inbox/bin/stop.sh +8 -8
- package/ftm-inbox/config.example.yml +55 -55
- package/ftm-inbox/package-lock.json +2898 -2898
- package/ftm-inbox/package.json +26 -26
- package/ftm-inbox/postcss.config.js +6 -6
- package/ftm-inbox/src/app.css +199 -199
- package/ftm-inbox/src/app.html +18 -18
- package/ftm-inbox/src/lib/api.ts +166 -166
- package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
- package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
- package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
- package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
- package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
- package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
- package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
- package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
- package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
- package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
- package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
- package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
- package/ftm-inbox/src/lib/theme.ts +47 -47
- package/ftm-inbox/src/routes/+layout.svelte +76 -76
- package/ftm-inbox/src/routes/+page.svelte +401 -401
- package/ftm-inbox/svelte.config.js +12 -12
- package/ftm-inbox/tailwind.config.ts +63 -63
- package/ftm-inbox/tsconfig.json +13 -13
- package/ftm-inbox/vite.config.ts +6 -6
- package/ftm-intent/SKILL.md +241 -241
- package/ftm-intent.yml +2 -2
- package/ftm-manifest.json +3794 -3794
- package/ftm-map/SKILL.md +291 -291
- package/ftm-map/scripts/db.py +712 -712
- package/ftm-map/scripts/index.py +415 -415
- package/ftm-map/scripts/parser.py +224 -224
- package/ftm-map/scripts/queries/go-tags.scm +20 -20
- package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
- package/ftm-map/scripts/queries/python-tags.scm +31 -31
- package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
- package/ftm-map/scripts/queries/rust-tags.scm +37 -37
- package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
- package/ftm-map/scripts/query.py +301 -301
- package/ftm-map/scripts/ranker.py +377 -377
- package/ftm-map/scripts/requirements.txt +5 -5
- package/ftm-map/scripts/setup-hooks.sh +27 -27
- package/ftm-map/scripts/setup.sh +56 -56
- package/ftm-map/scripts/test_db.py +364 -364
- package/ftm-map/scripts/test_parser.py +174 -174
- package/ftm-map/scripts/test_query.py +183 -183
- package/ftm-map/scripts/test_ranker.py +199 -199
- package/ftm-map/scripts/views.py +591 -591
- package/ftm-map.yml +2 -2
- package/ftm-mind/SKILL.md +1943 -1943
- package/ftm-mind/evals/promptfoo.yaml +142 -142
- package/ftm-mind/references/blackboard-schema.md +328 -328
- package/ftm-mind/references/complexity-guide.md +110 -110
- package/ftm-mind/references/event-registry.md +319 -319
- package/ftm-mind/references/mcp-inventory.md +296 -296
- package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
- package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
- package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
- package/ftm-mind/references/reflexion-protocol.md +249 -249
- package/ftm-mind/references/routing/SCENARIOS.md +22 -22
- package/ftm-mind/references/routing-scenarios.md +35 -35
- package/ftm-mind.yml +2 -2
- package/ftm-pause/SKILL.md +395 -395
- package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
- package/ftm-pause/references/protocols/VALIDATION.md +80 -80
- package/ftm-pause.yml +2 -2
- package/ftm-researcher/SKILL.md +275 -275
- package/ftm-researcher/evals/agent-diversity.yaml +17 -17
- package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
- package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
- package/ftm-researcher/references/adaptive-search.md +116 -116
- package/ftm-researcher/references/agent-prompts.md +193 -193
- package/ftm-researcher/references/council-integration.md +193 -193
- package/ftm-researcher/references/output-format.md +203 -203
- package/ftm-researcher/references/synthesis-pipeline.md +165 -165
- package/ftm-researcher/scripts/score_credibility.py +234 -234
- package/ftm-researcher/scripts/validate_research.py +92 -92
- package/ftm-researcher.yml +2 -2
- package/ftm-resume/SKILL.md +518 -518
- package/ftm-resume/references/protocols/VALIDATION.md +172 -172
- package/ftm-resume.yml +2 -2
- package/ftm-retro/SKILL.md +380 -380
- package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
- package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
- package/ftm-retro.yml +2 -2
- package/ftm-routine/SKILL.md +170 -170
- package/ftm-routine.yml +4 -4
- package/ftm-state/blackboard/capabilities.json +5 -5
- package/ftm-state/blackboard/capabilities.schema.json +27 -27
- package/ftm-state/blackboard/context.json +23 -23
- package/ftm-state/blackboard/experiences/index.json +9 -9
- package/ftm-state/blackboard/patterns.json +6 -6
- package/ftm-state/schemas/context.schema.json +130 -130
- package/ftm-state/schemas/experience-index.schema.json +77 -77
- package/ftm-state/schemas/experience.schema.json +78 -78
- package/ftm-state/schemas/patterns.schema.json +44 -44
- package/ftm-upgrade/SKILL.md +194 -194
- package/ftm-upgrade/scripts/check-version.sh +76 -76
- package/ftm-upgrade/scripts/upgrade.sh +143 -143
- package/ftm-upgrade.yml +2 -2
- package/ftm-verify.yml +2 -2
- package/ftm.yml +2 -2
- package/hooks/ftm-blackboard-enforcer.sh +93 -93
- package/hooks/ftm-discovery-reminder.sh +90 -90
- package/hooks/ftm-drafts-gate.sh +61 -61
- package/hooks/ftm-event-logger.mjs +107 -107
- package/hooks/ftm-map-autodetect.sh +79 -79
- package/hooks/ftm-pending-sync-check.sh +22 -22
- package/hooks/ftm-plan-gate.sh +92 -92
- package/hooks/ftm-post-commit-trigger.sh +57 -57
- package/hooks/settings-template.json +81 -81
- package/install.sh +363 -363
- package/package.json +84 -84
- package/uninstall.sh +25 -25
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
# Project Pattern Detection
|
|
2
|
-
|
|
3
|
-
Pre-audit calibration: detect framework, router, state management, and API layer so wiring checks apply the right rules. This prevents false positives from applying React patterns to a Vue project, or App Router patterns to a Pages Router project.
|
|
4
|
-
|
|
5
|
-
**Cross-reference:** ftm-debug uses this same detection to calibrate its error tracing. Run once and share results with both skills.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Detection Protocol
|
|
10
|
-
|
|
11
|
-
Read `package.json` dependencies and scan key config/directory signals.
|
|
12
|
-
|
|
13
|
-
### Framework Detection
|
|
14
|
-
|
|
15
|
-
| Signal | Detection | Impact on Audit |
|
|
16
|
-
|---|---|---|
|
|
17
|
-
| **React** | `react` in deps | Dimensions 1-5 all apply |
|
|
18
|
-
| **Next.js** | `next` in deps | File-based routing, check App vs Pages Router |
|
|
19
|
-
| **Vue** | `vue` in deps | `<template>` instead of JSX, check vue-router |
|
|
20
|
-
| **Svelte** | `svelte` in deps | Svelte components, SvelteKit file-based routes |
|
|
21
|
-
| **Angular** | `@angular/core` in deps | Module-based wiring, check NgModule declarations |
|
|
22
|
-
| **No framework** | None of the above | Skip D2 (JSX) and D3 (Routes) |
|
|
23
|
-
|
|
24
|
-
### Router Detection
|
|
25
|
-
|
|
26
|
-
| Signal | Detection | Dimension 3 Behavior |
|
|
27
|
-
|---|---|---|
|
|
28
|
-
| `react-router-dom` | dep exists | Check explicit router config file |
|
|
29
|
-
| `@tanstack/react-router` | dep exists | Check router config file |
|
|
30
|
-
| `next` + `app/` directory | `app/layout.tsx` or `app/page.tsx` exists | File-based: `app/path/page.tsx` = `/path` |
|
|
31
|
-
| `next` + `pages/` directory | `pages/` exists, no `app/` | File-based: `pages/foo.tsx` = `/foo` |
|
|
32
|
-
| `vue-router` | dep exists | Check router config file |
|
|
33
|
-
| SvelteKit | `@sveltejs/kit` in deps | File-based routes in `src/routes/` |
|
|
34
|
-
|
|
35
|
-
### State Management Detection
|
|
36
|
-
|
|
37
|
-
| Signal | Detection | Dimension 4 Behavior |
|
|
38
|
-
|---|---|---|
|
|
39
|
-
| `zustand` | dep exists | Check `useStore` hooks and `create()` calls |
|
|
40
|
-
| `@reduxjs/toolkit` | dep exists | Check `useSelector`/`useDispatch` and slice reducers |
|
|
41
|
-
| `jotai` | dep exists | Check `useAtom` calls |
|
|
42
|
-
| `recoil` | dep exists | Check `useRecoilState`/`useRecoilValue` calls |
|
|
43
|
-
| `pinia` | dep exists | Check `defineStore` and `useXStore()` calls |
|
|
44
|
-
| None detected | — | Skip D4 or adapt to any custom store pattern found |
|
|
45
|
-
|
|
46
|
-
### API Layer Detection
|
|
47
|
-
|
|
48
|
-
| Signal | Detection | Dimension 5 Behavior |
|
|
49
|
-
|---|---|---|
|
|
50
|
-
| `@tanstack/react-query` | dep exists | Check `useQuery`/`useMutation` calls |
|
|
51
|
-
| `swr` | dep exists | Check `useSWR` calls |
|
|
52
|
-
| `@trpc/client` | dep exists | Check tRPC router procedure calls |
|
|
53
|
-
| `@apollo/client` | dep exists | Check `useQuery`/`useMutation` with gql tags |
|
|
54
|
-
| `axios` / `fetch` | explicit patterns | Check direct call sites |
|
|
55
|
-
|
|
56
|
-
### Build Tool Detection
|
|
57
|
-
|
|
58
|
-
| Signal | Detection | Impact |
|
|
59
|
-
|---|---|---|
|
|
60
|
-
| `vite.config.*` exists | File scan | Entry point: `index.html` → `src/main.tsx` |
|
|
61
|
-
| `next.config.*` exists | File scan | Entry managed by Next.js framework |
|
|
62
|
-
| `webpack.config.*` exists | File scan | Check entry field in config |
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Dimension Activation Matrix
|
|
67
|
-
|
|
68
|
-
Based on detected patterns, set active dimensions before running Layer 2.
|
|
69
|
-
|
|
70
|
-
| Framework | D1 (Import) | D2 (JSX) | D3 (Routes) | D4 (Store) | D5 (API) |
|
|
71
|
-
|---|---|---|---|---|---|
|
|
72
|
-
| React + react-router | Standard | Standard | Router config file | Per state lib | Per API lib |
|
|
73
|
-
| Next.js App Router | Check `app/` tree | Standard | File-based: `page.tsx` in dir = route | Per state lib | Check Server Actions too |
|
|
74
|
-
| Next.js Pages Router | Check `pages/` tree | Standard | File-based: `pages/foo.tsx` = `/foo` | Per state lib | Check `getServerSideProps`/`getStaticProps` |
|
|
75
|
-
| Remix | Check `app/routes/` | Standard | File-based + `remix.config` | Per state lib | Check `loader`/`action` exports |
|
|
76
|
-
| Vue + vue-router | Standard | `<template>` | Router config file | Pinia: `defineStore` | Per API lib |
|
|
77
|
-
| Svelte | Standard | Svelte components | SvelteKit: `src/routes/` | Svelte stores | Per API lib |
|
|
78
|
-
| No framework (Node.js) | Standard | Skip D2 | Skip D3 | Skip D4 | Standard |
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## Output
|
|
83
|
-
|
|
84
|
-
Store detected context for use by all subsequent layers. Do not include it in the report unless something unusual was detected (e.g., conflicting signals, ambiguous router type).
|
|
85
|
-
|
|
86
|
-
```
|
|
87
|
-
Project detected: React 18 + Vite + react-router v6 + Zustand + TanStack Query
|
|
88
|
-
Dimensions active: D1 ✓ D2 ✓ D3 (router config) D4 (Zustand) D5 (TanStack Query)
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
If signals are ambiguous (e.g., both `app/` and `pages/` directories exist), note the ambiguity and default to the more restrictive check — verify both routing patterns.
|
|
1
|
+
# Project Pattern Detection
|
|
2
|
+
|
|
3
|
+
Pre-audit calibration: detect framework, router, state management, and API layer so wiring checks apply the right rules. This prevents false positives from applying React patterns to a Vue project, or App Router patterns to a Pages Router project.
|
|
4
|
+
|
|
5
|
+
**Cross-reference:** ftm-debug uses this same detection to calibrate its error tracing. Run once and share results with both skills.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Detection Protocol
|
|
10
|
+
|
|
11
|
+
Read `package.json` dependencies and scan key config/directory signals.
|
|
12
|
+
|
|
13
|
+
### Framework Detection
|
|
14
|
+
|
|
15
|
+
| Signal | Detection | Impact on Audit |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| **React** | `react` in deps | Dimensions 1-5 all apply |
|
|
18
|
+
| **Next.js** | `next` in deps | File-based routing, check App vs Pages Router |
|
|
19
|
+
| **Vue** | `vue` in deps | `<template>` instead of JSX, check vue-router |
|
|
20
|
+
| **Svelte** | `svelte` in deps | Svelte components, SvelteKit file-based routes |
|
|
21
|
+
| **Angular** | `@angular/core` in deps | Module-based wiring, check NgModule declarations |
|
|
22
|
+
| **No framework** | None of the above | Skip D2 (JSX) and D3 (Routes) |
|
|
23
|
+
|
|
24
|
+
### Router Detection
|
|
25
|
+
|
|
26
|
+
| Signal | Detection | Dimension 3 Behavior |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `react-router-dom` | dep exists | Check explicit router config file |
|
|
29
|
+
| `@tanstack/react-router` | dep exists | Check router config file |
|
|
30
|
+
| `next` + `app/` directory | `app/layout.tsx` or `app/page.tsx` exists | File-based: `app/path/page.tsx` = `/path` |
|
|
31
|
+
| `next` + `pages/` directory | `pages/` exists, no `app/` | File-based: `pages/foo.tsx` = `/foo` |
|
|
32
|
+
| `vue-router` | dep exists | Check router config file |
|
|
33
|
+
| SvelteKit | `@sveltejs/kit` in deps | File-based routes in `src/routes/` |
|
|
34
|
+
|
|
35
|
+
### State Management Detection
|
|
36
|
+
|
|
37
|
+
| Signal | Detection | Dimension 4 Behavior |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| `zustand` | dep exists | Check `useStore` hooks and `create()` calls |
|
|
40
|
+
| `@reduxjs/toolkit` | dep exists | Check `useSelector`/`useDispatch` and slice reducers |
|
|
41
|
+
| `jotai` | dep exists | Check `useAtom` calls |
|
|
42
|
+
| `recoil` | dep exists | Check `useRecoilState`/`useRecoilValue` calls |
|
|
43
|
+
| `pinia` | dep exists | Check `defineStore` and `useXStore()` calls |
|
|
44
|
+
| None detected | — | Skip D4 or adapt to any custom store pattern found |
|
|
45
|
+
|
|
46
|
+
### API Layer Detection
|
|
47
|
+
|
|
48
|
+
| Signal | Detection | Dimension 5 Behavior |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `@tanstack/react-query` | dep exists | Check `useQuery`/`useMutation` calls |
|
|
51
|
+
| `swr` | dep exists | Check `useSWR` calls |
|
|
52
|
+
| `@trpc/client` | dep exists | Check tRPC router procedure calls |
|
|
53
|
+
| `@apollo/client` | dep exists | Check `useQuery`/`useMutation` with gql tags |
|
|
54
|
+
| `axios` / `fetch` | explicit patterns | Check direct call sites |
|
|
55
|
+
|
|
56
|
+
### Build Tool Detection
|
|
57
|
+
|
|
58
|
+
| Signal | Detection | Impact |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| `vite.config.*` exists | File scan | Entry point: `index.html` → `src/main.tsx` |
|
|
61
|
+
| `next.config.*` exists | File scan | Entry managed by Next.js framework |
|
|
62
|
+
| `webpack.config.*` exists | File scan | Check entry field in config |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Dimension Activation Matrix
|
|
67
|
+
|
|
68
|
+
Based on detected patterns, set active dimensions before running Layer 2.
|
|
69
|
+
|
|
70
|
+
| Framework | D1 (Import) | D2 (JSX) | D3 (Routes) | D4 (Store) | D5 (API) |
|
|
71
|
+
|---|---|---|---|---|---|
|
|
72
|
+
| React + react-router | Standard | Standard | Router config file | Per state lib | Per API lib |
|
|
73
|
+
| Next.js App Router | Check `app/` tree | Standard | File-based: `page.tsx` in dir = route | Per state lib | Check Server Actions too |
|
|
74
|
+
| Next.js Pages Router | Check `pages/` tree | Standard | File-based: `pages/foo.tsx` = `/foo` | Per state lib | Check `getServerSideProps`/`getStaticProps` |
|
|
75
|
+
| Remix | Check `app/routes/` | Standard | File-based + `remix.config` | Per state lib | Check `loader`/`action` exports |
|
|
76
|
+
| Vue + vue-router | Standard | `<template>` | Router config file | Pinia: `defineStore` | Per API lib |
|
|
77
|
+
| Svelte | Standard | Svelte components | SvelteKit: `src/routes/` | Svelte stores | Per API lib |
|
|
78
|
+
| No framework (Node.js) | Standard | Skip D2 | Skip D3 | Skip D4 | Standard |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Output
|
|
83
|
+
|
|
84
|
+
Store detected context for use by all subsequent layers. Do not include it in the report unless something unusual was detected (e.g., conflicting signals, ambiguous router type).
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
Project detected: React 18 + Vite + react-router v6 + Zustand + TanStack Query
|
|
88
|
+
Dimensions active: D1 ✓ D2 ✓ D3 (router config) D4 (Zustand) D5 (TanStack Query)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
If signals are ambiguous (e.g., both `app/` and `pages/` directories exist), note the ambiguity and default to the more restrictive check — verify both routing patterns.
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
# Runtime Wiring Verification
|
|
2
|
-
|
|
3
|
-
Phase 3 of the audit: verify that components and routes that passed static analysis actually render in the running application. Catches bugs static analysis cannot detect.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Prerequisites
|
|
8
|
-
|
|
9
|
-
This phase runs only when ALL of the following conditions are met:
|
|
10
|
-
|
|
11
|
-
1. The ftm-browse binary exists at `$HOME/.claude/skills/ftm-browse/bin/ftm-browse`
|
|
12
|
-
2. A dev server is running — detected via:
|
|
13
|
-
- `lsof -i :3000` (Create React App, Next.js default)
|
|
14
|
-
- `lsof -i :5173` (Vite default)
|
|
15
|
-
- `lsof -i :8080` (various)
|
|
16
|
-
3. The wiring contracts for the audited tasks include at least one `route_path` entry
|
|
17
|
-
|
|
18
|
-
If any prerequisite is not met, skip this phase and log: `Phase 3 (Runtime Wiring) skipped — [reason: no browse binary | no dev server | no route_path in contracts]`. Do NOT fail the overall audit.
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Process
|
|
23
|
-
|
|
24
|
-
For each wiring contract that includes a `route_path`:
|
|
25
|
-
|
|
26
|
-
1. **Navigate** — `$PB goto <dev_server_url><route_path>`
|
|
27
|
-
2. **Snapshot** — `$PB snapshot -i` to get the ARIA tree of interactive elements
|
|
28
|
-
3. **Verify components render** — Check that expected components from the wiring contract appear in the ARIA tree:
|
|
29
|
-
- Expected buttons, links, inputs by their labels/roles
|
|
30
|
-
- Expected headings and landmarks
|
|
31
|
-
- Expected form fields
|
|
32
|
-
4. **Screenshot** — `$PB screenshot` as evidence of the render state
|
|
33
|
-
5. **Report findings:**
|
|
34
|
-
- `PASS` — All expected components found in ARIA tree
|
|
35
|
-
- `WARN` — Page renders but some expected components are missing
|
|
36
|
-
- `FAIL` — Page doesn't render (blank, error page, 404)
|
|
37
|
-
|
|
38
|
-
Where `$PB` is `$HOME/.claude/skills/ftm-browse/bin/ftm-browse`.
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## What Runtime Wiring Catches
|
|
43
|
-
|
|
44
|
-
Static analysis (Layers 1-2) cannot detect these failure modes:
|
|
45
|
-
|
|
46
|
-
| Failure Mode | Example | Detection |
|
|
47
|
-
|---|---|---|
|
|
48
|
-
| Conditional render always false | `{isAdmin && <AdminPanel />}` where `isAdmin` is hardcoded `false` | Component missing from ARIA tree |
|
|
49
|
-
| Component crashes on mount | Runtime error in `useEffect` causes blank render | Error page or blank instead of expected content |
|
|
50
|
-
| CSS visibility hidden | `display: none` or `visibility: hidden` | Component in ARIA tree but not visually accessible |
|
|
51
|
-
| Server-side data dependency fails | `getServerSideProps` throws → component in error state | Error boundary rendered instead of component |
|
|
52
|
-
| Route registered but redirects | Route exists in config but always redirects away | Final URL differs from expected `route_path` |
|
|
53
|
-
|
|
54
|
-
These are flagged as **runtime-only findings** in the audit report if found after Layers 1-2 both passed.
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Integration with Layers 1-2
|
|
59
|
-
|
|
60
|
-
Runtime wiring is additive — it extends static analysis, not replaces it. The layer execution order is:
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
Layer 1 (knip) → Layer 2 (adversarial) → Layer 3 (auto-fix) → Phase 3 (runtime, if prerequisites met)
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Runtime findings that survive after Layers 1-2 are clean represent genuine runtime-only bugs. Flag them separately so the developer knows they cannot be caught by future static checks alone.
|
|
1
|
+
# Runtime Wiring Verification
|
|
2
|
+
|
|
3
|
+
Phase 3 of the audit: verify that components and routes that passed static analysis actually render in the running application. Catches bugs static analysis cannot detect.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
This phase runs only when ALL of the following conditions are met:
|
|
10
|
+
|
|
11
|
+
1. The ftm-browse binary exists at `$HOME/.claude/skills/ftm-browse/bin/ftm-browse`
|
|
12
|
+
2. A dev server is running — detected via:
|
|
13
|
+
- `lsof -i :3000` (Create React App, Next.js default)
|
|
14
|
+
- `lsof -i :5173` (Vite default)
|
|
15
|
+
- `lsof -i :8080` (various)
|
|
16
|
+
3. The wiring contracts for the audited tasks include at least one `route_path` entry
|
|
17
|
+
|
|
18
|
+
If any prerequisite is not met, skip this phase and log: `Phase 3 (Runtime Wiring) skipped — [reason: no browse binary | no dev server | no route_path in contracts]`. Do NOT fail the overall audit.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Process
|
|
23
|
+
|
|
24
|
+
For each wiring contract that includes a `route_path`:
|
|
25
|
+
|
|
26
|
+
1. **Navigate** — `$PB goto <dev_server_url><route_path>`
|
|
27
|
+
2. **Snapshot** — `$PB snapshot -i` to get the ARIA tree of interactive elements
|
|
28
|
+
3. **Verify components render** — Check that expected components from the wiring contract appear in the ARIA tree:
|
|
29
|
+
- Expected buttons, links, inputs by their labels/roles
|
|
30
|
+
- Expected headings and landmarks
|
|
31
|
+
- Expected form fields
|
|
32
|
+
4. **Screenshot** — `$PB screenshot` as evidence of the render state
|
|
33
|
+
5. **Report findings:**
|
|
34
|
+
- `PASS` — All expected components found in ARIA tree
|
|
35
|
+
- `WARN` — Page renders but some expected components are missing
|
|
36
|
+
- `FAIL` — Page doesn't render (blank, error page, 404)
|
|
37
|
+
|
|
38
|
+
Where `$PB` is `$HOME/.claude/skills/ftm-browse/bin/ftm-browse`.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## What Runtime Wiring Catches
|
|
43
|
+
|
|
44
|
+
Static analysis (Layers 1-2) cannot detect these failure modes:
|
|
45
|
+
|
|
46
|
+
| Failure Mode | Example | Detection |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| Conditional render always false | `{isAdmin && <AdminPanel />}` where `isAdmin` is hardcoded `false` | Component missing from ARIA tree |
|
|
49
|
+
| Component crashes on mount | Runtime error in `useEffect` causes blank render | Error page or blank instead of expected content |
|
|
50
|
+
| CSS visibility hidden | `display: none` or `visibility: hidden` | Component in ARIA tree but not visually accessible |
|
|
51
|
+
| Server-side data dependency fails | `getServerSideProps` throws → component in error state | Error boundary rendered instead of component |
|
|
52
|
+
| Route registered but redirects | Route exists in config but always redirects away | Final URL differs from expected `route_path` |
|
|
53
|
+
|
|
54
|
+
These are flagged as **runtime-only findings** in the audit report if found after Layers 1-2 both passed.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Integration with Layers 1-2
|
|
59
|
+
|
|
60
|
+
Runtime wiring is additive — it extends static analysis, not replaces it. The layer execution order is:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Layer 1 (knip) → Layer 2 (adversarial) → Layer 3 (auto-fix) → Phase 3 (runtime, if prerequisites met)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Runtime findings that survive after Layers 1-2 are clean represent genuine runtime-only bugs. Flag them separately so the developer knows they cannot be caught by future static checks alone.
|
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
# Wiring Contracts
|
|
2
|
-
|
|
3
|
-
A wiring contract is a YAML block in a plan task that declares the expected wiring for code produced by that task. It tells ftm-audit exactly what to verify — instead of guessing, the audit checks specific expectations.
|
|
4
|
-
|
|
5
|
-
**Graceful degradation:**
|
|
6
|
-
- Full contract → audit checks every declared wire
|
|
7
|
-
- Partial contract → audit checks what's declared, uses heuristics for the rest
|
|
8
|
-
- No contract → audit falls back to pure Layer 1 + Layer 2 analysis
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Schema
|
|
13
|
-
|
|
14
|
-
```yaml
|
|
15
|
-
Wiring:
|
|
16
|
-
exports:
|
|
17
|
-
- symbol: ComponentName # What's being exported
|
|
18
|
-
from: src/components/Thing.tsx # From which file
|
|
19
|
-
|
|
20
|
-
imported_by:
|
|
21
|
-
- file: src/views/Dashboard.tsx # Which file should import it
|
|
22
|
-
line_hint: "import section" # Approximate location (optional)
|
|
23
|
-
|
|
24
|
-
rendered_in: # For React components
|
|
25
|
-
- parent: Dashboard # Parent component name
|
|
26
|
-
placement: "main content area" # Where in the JSX (descriptive)
|
|
27
|
-
|
|
28
|
-
route_path: /dashboard/thing # For routed views (optional)
|
|
29
|
-
|
|
30
|
-
nav_link: # For views that need navigation (optional)
|
|
31
|
-
- location: sidebar # Where the nav link goes
|
|
32
|
-
label: "Thing" # Display text
|
|
33
|
-
|
|
34
|
-
store_reads: # Store fields this code reads (optional)
|
|
35
|
-
- store: useAppStore
|
|
36
|
-
field: user.preferences
|
|
37
|
-
|
|
38
|
-
store_writes: # Store fields this code writes (optional)
|
|
39
|
-
- store: useAppStore
|
|
40
|
-
field: user.preferences
|
|
41
|
-
action: setPreferences
|
|
42
|
-
|
|
43
|
-
api_calls: # API functions this code invokes (optional)
|
|
44
|
-
- function: fetchUserPrefs
|
|
45
|
-
from: src/api/user.ts
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
All fields are optional. Include only the dimensions relevant to the task.
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## Contract Examples
|
|
53
|
-
|
|
54
|
-
### React Component
|
|
55
|
-
|
|
56
|
-
```yaml
|
|
57
|
-
### Task 3: Build UserPreferences component
|
|
58
|
-
**Files:** Create src/components/UserPreferences.tsx
|
|
59
|
-
**Wiring:**
|
|
60
|
-
exports:
|
|
61
|
-
- symbol: UserPreferences
|
|
62
|
-
from: src/components/UserPreferences.tsx
|
|
63
|
-
imported_by:
|
|
64
|
-
- file: src/views/SettingsView.tsx
|
|
65
|
-
rendered_in:
|
|
66
|
-
- parent: SettingsView
|
|
67
|
-
placement: "below profile section"
|
|
68
|
-
store_reads:
|
|
69
|
-
- store: useAppStore
|
|
70
|
-
field: user.preferences
|
|
71
|
-
api_calls:
|
|
72
|
-
- function: updatePreferences
|
|
73
|
-
from: src/api/user.ts
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### API Client Functions
|
|
77
|
-
|
|
78
|
-
```yaml
|
|
79
|
-
### Task 5: Add billing API functions
|
|
80
|
-
**Files:** Create src/api/billing.ts
|
|
81
|
-
**Wiring:**
|
|
82
|
-
exports:
|
|
83
|
-
- symbol: fetchInvoices
|
|
84
|
-
from: src/api/billing.ts
|
|
85
|
-
- symbol: createSubscription
|
|
86
|
-
from: src/api/billing.ts
|
|
87
|
-
imported_by:
|
|
88
|
-
- file: src/hooks/useBilling.ts
|
|
89
|
-
api_calls: [] # These ARE the API functions — nothing to call downstream
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### New Route/View
|
|
93
|
-
|
|
94
|
-
```yaml
|
|
95
|
-
### Task 7: Build AnalyticsDashboard view
|
|
96
|
-
**Files:** Create src/views/AnalyticsDashboard.tsx
|
|
97
|
-
**Wiring:**
|
|
98
|
-
exports:
|
|
99
|
-
- symbol: AnalyticsDashboard
|
|
100
|
-
from: src/views/AnalyticsDashboard.tsx
|
|
101
|
-
imported_by:
|
|
102
|
-
- file: src/router.tsx
|
|
103
|
-
rendered_in:
|
|
104
|
-
- parent: RouterConfig
|
|
105
|
-
placement: "route element"
|
|
106
|
-
route_path: /analytics
|
|
107
|
-
nav_link:
|
|
108
|
-
- location: sidebar
|
|
109
|
-
label: "Analytics"
|
|
110
|
-
icon: BarChart
|
|
111
|
-
store_reads:
|
|
112
|
-
- store: useAppStore
|
|
113
|
-
field: analytics.dateRange
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## Verification Checks
|
|
119
|
-
|
|
120
|
-
For each field in the wiring contract, audit runs the corresponding check:
|
|
121
|
-
|
|
122
|
-
| Field | Check | Method |
|
|
123
|
-
|---|---|---|
|
|
124
|
-
| `exports` | Symbol exists as named export in specified file | `grep "export.*SymbolName"` or AST check |
|
|
125
|
-
| `imported_by` | Importing file contains the import statement | Check for `import { Symbol } from './path'` |
|
|
126
|
-
| `rendered_in` | Parent component's JSX contains `<Symbol` | Search JSX/TSX return statements |
|
|
127
|
-
| `route_path` | Router config contains route pointing to this component | Search router config file |
|
|
128
|
-
| `nav_link` | Navigation component has link with matching label and path | Search sidebar/navbar file |
|
|
129
|
-
| `store_reads` | Selector/hook call reads this field in the component | Search for selector usage |
|
|
130
|
-
| `store_writes` | Dispatch/action call writes this field | Search for action dispatch |
|
|
131
|
-
| `api_calls` | Function is imported and called in component or its hooks | Search for call sites |
|
|
132
|
-
|
|
133
|
-
Each check produces: `✅ VERIFIED file:line` or `❌ NOT FOUND — [what was expected] [where it was expected]`
|
|
134
|
-
|
|
135
|
-
**Rendering special cases:** Lazy imports (`React.lazy(() => import(...))`), conditional rendering (`{condition && <Component/>}`), render props, and HOCs all count as valid rendering for Dimension 2.
|
|
1
|
+
# Wiring Contracts
|
|
2
|
+
|
|
3
|
+
A wiring contract is a YAML block in a plan task that declares the expected wiring for code produced by that task. It tells ftm-audit exactly what to verify — instead of guessing, the audit checks specific expectations.
|
|
4
|
+
|
|
5
|
+
**Graceful degradation:**
|
|
6
|
+
- Full contract → audit checks every declared wire
|
|
7
|
+
- Partial contract → audit checks what's declared, uses heuristics for the rest
|
|
8
|
+
- No contract → audit falls back to pure Layer 1 + Layer 2 analysis
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Schema
|
|
13
|
+
|
|
14
|
+
```yaml
|
|
15
|
+
Wiring:
|
|
16
|
+
exports:
|
|
17
|
+
- symbol: ComponentName # What's being exported
|
|
18
|
+
from: src/components/Thing.tsx # From which file
|
|
19
|
+
|
|
20
|
+
imported_by:
|
|
21
|
+
- file: src/views/Dashboard.tsx # Which file should import it
|
|
22
|
+
line_hint: "import section" # Approximate location (optional)
|
|
23
|
+
|
|
24
|
+
rendered_in: # For React components
|
|
25
|
+
- parent: Dashboard # Parent component name
|
|
26
|
+
placement: "main content area" # Where in the JSX (descriptive)
|
|
27
|
+
|
|
28
|
+
route_path: /dashboard/thing # For routed views (optional)
|
|
29
|
+
|
|
30
|
+
nav_link: # For views that need navigation (optional)
|
|
31
|
+
- location: sidebar # Where the nav link goes
|
|
32
|
+
label: "Thing" # Display text
|
|
33
|
+
|
|
34
|
+
store_reads: # Store fields this code reads (optional)
|
|
35
|
+
- store: useAppStore
|
|
36
|
+
field: user.preferences
|
|
37
|
+
|
|
38
|
+
store_writes: # Store fields this code writes (optional)
|
|
39
|
+
- store: useAppStore
|
|
40
|
+
field: user.preferences
|
|
41
|
+
action: setPreferences
|
|
42
|
+
|
|
43
|
+
api_calls: # API functions this code invokes (optional)
|
|
44
|
+
- function: fetchUserPrefs
|
|
45
|
+
from: src/api/user.ts
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
All fields are optional. Include only the dimensions relevant to the task.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Contract Examples
|
|
53
|
+
|
|
54
|
+
### React Component
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
### Task 3: Build UserPreferences component
|
|
58
|
+
**Files:** Create src/components/UserPreferences.tsx
|
|
59
|
+
**Wiring:**
|
|
60
|
+
exports:
|
|
61
|
+
- symbol: UserPreferences
|
|
62
|
+
from: src/components/UserPreferences.tsx
|
|
63
|
+
imported_by:
|
|
64
|
+
- file: src/views/SettingsView.tsx
|
|
65
|
+
rendered_in:
|
|
66
|
+
- parent: SettingsView
|
|
67
|
+
placement: "below profile section"
|
|
68
|
+
store_reads:
|
|
69
|
+
- store: useAppStore
|
|
70
|
+
field: user.preferences
|
|
71
|
+
api_calls:
|
|
72
|
+
- function: updatePreferences
|
|
73
|
+
from: src/api/user.ts
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### API Client Functions
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
### Task 5: Add billing API functions
|
|
80
|
+
**Files:** Create src/api/billing.ts
|
|
81
|
+
**Wiring:**
|
|
82
|
+
exports:
|
|
83
|
+
- symbol: fetchInvoices
|
|
84
|
+
from: src/api/billing.ts
|
|
85
|
+
- symbol: createSubscription
|
|
86
|
+
from: src/api/billing.ts
|
|
87
|
+
imported_by:
|
|
88
|
+
- file: src/hooks/useBilling.ts
|
|
89
|
+
api_calls: [] # These ARE the API functions — nothing to call downstream
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### New Route/View
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
### Task 7: Build AnalyticsDashboard view
|
|
96
|
+
**Files:** Create src/views/AnalyticsDashboard.tsx
|
|
97
|
+
**Wiring:**
|
|
98
|
+
exports:
|
|
99
|
+
- symbol: AnalyticsDashboard
|
|
100
|
+
from: src/views/AnalyticsDashboard.tsx
|
|
101
|
+
imported_by:
|
|
102
|
+
- file: src/router.tsx
|
|
103
|
+
rendered_in:
|
|
104
|
+
- parent: RouterConfig
|
|
105
|
+
placement: "route element"
|
|
106
|
+
route_path: /analytics
|
|
107
|
+
nav_link:
|
|
108
|
+
- location: sidebar
|
|
109
|
+
label: "Analytics"
|
|
110
|
+
icon: BarChart
|
|
111
|
+
store_reads:
|
|
112
|
+
- store: useAppStore
|
|
113
|
+
field: analytics.dateRange
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Verification Checks
|
|
119
|
+
|
|
120
|
+
For each field in the wiring contract, audit runs the corresponding check:
|
|
121
|
+
|
|
122
|
+
| Field | Check | Method |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| `exports` | Symbol exists as named export in specified file | `grep "export.*SymbolName"` or AST check |
|
|
125
|
+
| `imported_by` | Importing file contains the import statement | Check for `import { Symbol } from './path'` |
|
|
126
|
+
| `rendered_in` | Parent component's JSX contains `<Symbol` | Search JSX/TSX return statements |
|
|
127
|
+
| `route_path` | Router config contains route pointing to this component | Search router config file |
|
|
128
|
+
| `nav_link` | Navigation component has link with matching label and path | Search sidebar/navbar file |
|
|
129
|
+
| `store_reads` | Selector/hook call reads this field in the component | Search for selector usage |
|
|
130
|
+
| `store_writes` | Dispatch/action call writes this field | Search for action dispatch |
|
|
131
|
+
| `api_calls` | Function is imported and called in component or its hooks | Search for call sites |
|
|
132
|
+
|
|
133
|
+
Each check produces: `✅ VERIFIED file:line` or `❌ NOT FOUND — [what was expected] [where it was expected]`
|
|
134
|
+
|
|
135
|
+
**Rendering special cases:** Lazy imports (`React.lazy(() => import(...))`), conditional rendering (`{condition && <Component/>}`), render props, and HOCs all count as valid rendering for Dimension 2.
|