spine-framework 0.4.3 → 0.5.0-rc.4

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.
Files changed (320) hide show
  1. package/.env.example +13 -3
  2. package/.framework/cli/commands/bootstrap.ts +392 -0
  3. package/.framework/cli/commands/dev.ts +91 -218
  4. package/.framework/cli/commands/doctor.ts +132 -26
  5. package/.framework/cli/commands/generate.ts +38 -298
  6. package/.framework/cli/commands/init.ts +20 -1
  7. package/.framework/cli/commands/migrate.ts +36 -30
  8. package/.framework/cli/commands/migrations.ts +16 -56
  9. package/.framework/cli/commands/upgrade.ts +35 -0
  10. package/.framework/cli/commands/validate-schema.ts +147 -0
  11. package/.framework/cli/context.ts +223 -110
  12. package/.framework/cli/index.ts +6 -0
  13. package/.framework/cli/lib/project-files.ts +241 -1
  14. package/.framework/functions/_shared/agent-runner.ts +1000 -81
  15. package/.framework/functions/_shared/cil.ts +2 -1
  16. package/.framework/functions/_shared/db.ts +3 -6
  17. package/.framework/functions/_shared/hash-api-key.ts +183 -79
  18. package/.framework/functions/_shared/kb.ts +61 -7
  19. package/.framework/functions/_shared/logging.ts +562 -224
  20. package/.framework/functions/_shared/message-sequence.ts +53 -0
  21. package/.framework/functions/_shared/middleware.ts +47 -44
  22. package/.framework/functions/_shared/pipeline-runner.ts +150 -37
  23. package/.framework/functions/_shared/principal.ts +9 -6
  24. package/.framework/functions/_shared/trigger-engine.ts +149 -40
  25. package/.framework/functions/admin-data.ts +48 -31
  26. package/.framework/functions/ai-agents.ts +103 -33
  27. package/.framework/functions/api-keys.ts +301 -122
  28. package/.framework/functions/apps.ts +43 -26
  29. package/.framework/functions/cil-ingest.ts +48 -15
  30. package/.framework/functions/debug-auth.ts +14 -8
  31. package/.framework/functions/deliveries.ts +39 -12
  32. package/.framework/functions/embeddings.ts +145 -76
  33. package/.framework/functions/integration-outbound.ts +67 -27
  34. package/.framework/functions/integrations.ts +254 -127
  35. package/.framework/functions/logs.ts +273 -133
  36. package/.framework/functions/observability.ts +277 -147
  37. package/.framework/functions/pipeline-executions.ts +1 -1
  38. package/.framework/functions/pipeline-runner-background.ts +120 -0
  39. package/.framework/functions/pipelines.ts +14 -9
  40. package/.framework/functions/prompt-configs.ts +7 -4
  41. package/.framework/functions/roles.ts +8 -5
  42. package/.framework/functions/security.ts +30 -17
  43. package/.framework/functions/system-cron.ts +250 -128
  44. package/.framework/functions/tests.ts +7 -6
  45. package/.framework/functions/timers.ts +310 -107
  46. package/.framework/functions/trigger-scheduler.ts +65 -5
  47. package/.framework/functions/triggers.ts +28 -13
  48. package/.framework/functions/types.ts +13 -10
  49. package/.framework/migrations/064_episode_leases.sql +196 -0
  50. package/.framework/migrations/065_execution_tables_updated_at.sql +20 -0
  51. package/.framework/migrations/066_episode_steal_thread_merge.sql +148 -0
  52. package/.framework/migrations/067_episode_lease_stale_steal.sql +93 -0
  53. package/.framework/migrations/068_cron_schedule_timer_rpcs.sql +251 -0
  54. package/.framework/migrations/069_log_stats_window.sql +54 -0
  55. package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
  56. package/.framework/migrations/071_timer_interval_keys.sql +96 -0
  57. package/.framework/migrations/072_slug_autofill.sql +77 -0
  58. package/.framework/migrations/073_seed_member_roles.sql +26 -0
  59. package/.framework/schemas/spine.config.schema.json +62 -0
  60. package/.framework/src/App.tsx +3 -1
  61. package/.framework/src/apps/admin/index.tsx +1141 -775
  62. package/.framework/src/components/ErrorBoundary.tsx +136 -0
  63. package/.framework/src/components/admin/AdminListPage.tsx +81 -73
  64. package/.framework/src/components/admin/AdminSidebar.tsx +92 -81
  65. package/.framework/src/components/admin/EntitySelect.tsx +181 -0
  66. package/.framework/src/components/admin/PageInstructions.tsx +86 -127
  67. package/.framework/src/components/app-shell/GenericAppShell.tsx +3 -1
  68. package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
  69. package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
  70. package/.framework/src/components/auth/TurnstileWidget.tsx +9 -6
  71. package/.framework/src/components/kb/KBArticleEditor.tsx +49 -6
  72. package/.framework/src/components/layout/Layout.tsx +4 -2
  73. package/.framework/src/components/layout/Sidebar.tsx +304 -179
  74. package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
  75. package/.framework/src/components/runtime/DataHeader.tsx +96 -48
  76. package/.framework/src/components/runtime/DataListPage.tsx +3 -26
  77. package/.framework/src/components/runtime/DataStats.tsx +10 -10
  78. package/.framework/src/components/runtime/DataTable.tsx +12 -10
  79. package/.framework/src/components/ui/sheet.tsx +24 -26
  80. package/.framework/src/components/ui/textarea.tsx +74 -48
  81. package/.framework/src/hooks/useBranding.ts +47 -0
  82. package/.framework/src/hooks/useEntityList.ts +12 -9
  83. package/.framework/src/hooks/useListSchema.ts +108 -58
  84. package/.framework/src/instructions/README.md +57 -0
  85. package/.framework/src/instructions/ai-agents.md +69 -0
  86. package/.framework/src/instructions/alerts.md +80 -0
  87. package/.framework/src/instructions/api-keys.md +87 -0
  88. package/.framework/src/instructions/apps.md +77 -0
  89. package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
  90. package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
  91. package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
  92. package/.framework/src/instructions/concepts/automation.md +186 -0
  93. package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
  94. package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
  95. package/.framework/src/instructions/concepts/design-schema.md +152 -0
  96. package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
  97. package/.framework/src/instructions/concepts/observability.md +116 -0
  98. package/.framework/src/instructions/concepts/permissions.md +150 -0
  99. package/.framework/src/instructions/concepts/runtime-records.md +111 -0
  100. package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
  101. package/.framework/src/instructions/concepts/spine-way.md +172 -0
  102. package/.framework/src/instructions/deliveries.md +59 -0
  103. package/.framework/src/instructions/guide/00-orientation.md +106 -0
  104. package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
  105. package/.framework/src/instructions/guide/02-project-map.md +147 -0
  106. package/.framework/src/instructions/guide/03-domain-model.md +223 -0
  107. package/.framework/src/instructions/guide/04-first-app.md +227 -0
  108. package/.framework/src/instructions/guide/05-glossary.md +183 -0
  109. package/.framework/src/instructions/integrations.md +96 -0
  110. package/.framework/src/instructions/internal/cil-markers.md +83 -0
  111. package/.framework/src/instructions/invites.md +60 -0
  112. package/.framework/src/instructions/kb.md +80 -0
  113. package/.framework/src/instructions/logs.md +77 -0
  114. package/.framework/src/instructions/observability.md +61 -0
  115. package/.framework/src/instructions/operations/deployment.md +115 -0
  116. package/.framework/src/instructions/operations/migrations.md +125 -0
  117. package/.framework/src/instructions/operations/security-checklist.md +148 -0
  118. package/.framework/src/instructions/operations/troubleshooting.md +170 -0
  119. package/.framework/src/instructions/operations/upgrade.md +116 -0
  120. package/.framework/src/instructions/pipeline-executions.md +62 -0
  121. package/.framework/src/instructions/pipelines.md +78 -0
  122. package/.framework/src/instructions/prompts.md +95 -0
  123. package/.framework/src/instructions/reference/api/admin-data.md +162 -0
  124. package/.framework/src/instructions/reference/api/auth.md +113 -0
  125. package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
  126. package/.framework/src/instructions/reference/app-manifest.md +150 -0
  127. package/.framework/src/instructions/reference/cli.md +124 -0
  128. package/.framework/src/instructions/reference/database.md +132 -0
  129. package/.framework/src/instructions/reference/design-schema.md +280 -0
  130. package/.framework/src/instructions/reference/env-vars.md +133 -0
  131. package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
  132. package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
  133. package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
  134. package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
  135. package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
  136. package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
  137. package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
  138. package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
  139. package/.framework/src/instructions/reference/functions/apps.md +140 -0
  140. package/.framework/src/instructions/reference/functions/auth.md +99 -0
  141. package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
  142. package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
  143. package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
  144. package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
  145. package/.framework/src/instructions/reference/functions/index.md +103 -0
  146. package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
  147. package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
  148. package/.framework/src/instructions/reference/functions/integrations.md +130 -0
  149. package/.framework/src/instructions/reference/functions/invites.md +182 -0
  150. package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
  151. package/.framework/src/instructions/reference/functions/kb.md +166 -0
  152. package/.framework/src/instructions/reference/functions/logs.md +141 -0
  153. package/.framework/src/instructions/reference/functions/observability.md +105 -0
  154. package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
  155. package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
  156. package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
  157. package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
  158. package/.framework/src/instructions/reference/functions/roles.md +121 -0
  159. package/.framework/src/instructions/reference/functions/security.md +140 -0
  160. package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
  161. package/.framework/src/instructions/reference/functions/system.md +106 -0
  162. package/.framework/src/instructions/reference/functions/tests.md +97 -0
  163. package/.framework/src/instructions/reference/functions/timers.md +117 -0
  164. package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
  165. package/.framework/src/instructions/reference/functions/triggers.md +140 -0
  166. package/.framework/src/instructions/reference/functions/types.md +146 -0
  167. package/.framework/src/instructions/reference/seeds.md +126 -0
  168. package/.framework/src/instructions/reference/shared-modules.md +127 -0
  169. package/.framework/src/instructions/reference/spine-config.md +114 -0
  170. package/.framework/src/instructions/roles.md +80 -0
  171. package/.framework/src/instructions/runtime-detail.md +70 -0
  172. package/.framework/src/instructions/runtime-list.md +77 -0
  173. package/.framework/src/instructions/security.md +67 -0
  174. package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
  175. package/.framework/src/instructions/tasks/add-a-role.md +96 -0
  176. package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
  177. package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
  178. package/.framework/src/instructions/tasks/add-a-type.md +151 -0
  179. package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
  180. package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
  181. package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
  182. package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
  183. package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
  184. package/.framework/src/instructions/tasks/test-your-code.md +108 -0
  185. package/.framework/src/instructions/tasks/write-a-function.md +132 -0
  186. package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
  187. package/.framework/src/instructions/testing.md +59 -0
  188. package/.framework/src/instructions/timers.md +82 -0
  189. package/.framework/src/instructions/triggers.md +69 -0
  190. package/.framework/src/instructions/types.md +93 -0
  191. package/.framework/src/lib/branding.ts +128 -0
  192. package/.framework/src/pages/NoAppPage.tsx +3 -1
  193. package/.framework/src/pages/NotFoundPage.tsx +62 -31
  194. package/.framework/src/pages/SetupPage.tsx +5 -2
  195. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
  196. package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
  197. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
  198. package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
  199. package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
  200. package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
  201. package/.framework/src/pages/admin/AppsPage.tsx +104 -66
  202. package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
  203. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
  204. package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
  205. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
  206. package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
  207. package/.framework/src/pages/admin/LogsPage.tsx +144 -76
  208. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
  209. package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
  210. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
  211. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
  212. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
  213. package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
  214. package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
  215. package/.framework/src/pages/admin/RolesPage.tsx +86 -43
  216. package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
  217. package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
  218. package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
  219. package/.framework/src/pages/admin/TimersPage.tsx +90 -62
  220. package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
  221. package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
  222. package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
  223. package/.framework/src/pages/admin/TypesPage.tsx +90 -48
  224. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
  225. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
  226. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
  227. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
  228. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
  229. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
  230. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
  231. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
  232. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
  233. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
  234. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
  235. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
  236. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
  237. package/.framework/src/pages/auth/AuthConfirmPage.tsx +3 -1
  238. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +3 -1
  239. package/.framework/src/pages/auth/LoginPage.tsx +4 -2
  240. package/.framework/src/pages/auth/RegisterPage.tsx +3 -1
  241. package/.framework/templates/agent/AGENTS.md +150 -0
  242. package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
  243. package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
  244. package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
  245. package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
  246. package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
  247. package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
  248. package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
  249. package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
  250. package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
  251. package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
  252. package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
  253. package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
  254. package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
  255. package/.framework/templates/project.json +5 -1
  256. package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
  257. package/.framework/tests/unit/agent-files.test.ts +355 -0
  258. package/.framework/tests/unit/agent-runner.test.ts +496 -47
  259. package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
  260. package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
  261. package/.framework/tests/unit/bootstrap.test.ts +242 -0
  262. package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
  263. package/.framework/tests/unit/debug-auth.test.ts +38 -0
  264. package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
  265. package/.framework/tests/unit/episode-lease.test.ts +695 -0
  266. package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
  267. package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
  268. package/.framework/tests/unit/kb-ingest-lease.test.ts +19 -0
  269. package/.framework/tests/unit/logging-app-id.test.ts +75 -0
  270. package/.framework/tests/unit/pipeline-runner-background.test.ts +120 -0
  271. package/.framework/tests/unit/pipeline-runner.test.ts +153 -1
  272. package/.framework/tests/unit/principal-cache.test.ts +15 -0
  273. package/.framework/tests/unit/system-context-denial.test.ts +145 -0
  274. package/.framework/tests/unit/system-cron.test.ts +240 -0
  275. package/.framework/tests/unit/timers.test.ts +159 -0
  276. package/.framework/tests/unit/trigger-engine.test.ts +278 -91
  277. package/.framework/tests/unit/trigger-scheduler.test.ts +78 -0
  278. package/README.md +125 -166
  279. package/config/tsconfig.cli.json +2 -2
  280. package/netlify.toml +5 -0
  281. package/package.json +15 -4
  282. package/templates/project/package-lock.json +2 -2
  283. package/.framework/docs/admin-routes.md +0 -76
  284. package/.framework/docs/api-docs-progress.md +0 -38
  285. package/.framework/docs/api-governance.md +0 -146
  286. package/.framework/docs/api-testing-results.md +0 -212
  287. package/.framework/docs/assembly-launch-guide.md +0 -138
  288. package/.framework/docs/audit-results.md +0 -590
  289. package/.framework/docs/db-api-inventory.md +0 -95
  290. package/.framework/docs/gap-remediation-backlog.md +0 -103
  291. package/.framework/docs/ui-adoption-verification.md +0 -111
  292. package/.framework/docs/ui-api-coverage.md +0 -84
  293. package/.framework/docs/v2-compatibility-audit.md +0 -228
  294. package/.framework/mcp/index.ts +0 -133
  295. package/.framework/mcp/load-env.ts +0 -60
  296. package/.framework/mcp/shared/app-manifest.ts +0 -275
  297. package/.framework/mcp/shared/db.ts +0 -477
  298. package/.framework/mcp/shared/kb.ts +0 -118
  299. package/.framework/mcp/tools/architect.ts +0 -431
  300. package/.framework/mcp/tools/cil/context.ts +0 -345
  301. package/.framework/mcp/tools/cil/graph.ts +0 -242
  302. package/.framework/mcp/tools/cil/ingest.ts +0 -1217
  303. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
  304. package/.framework/mcp/tools/cil/pipeline.ts +0 -767
  305. package/.framework/mcp/tools/cil/project.ts +0 -791
  306. package/.framework/mcp/tools/cil/retrieval.ts +0 -336
  307. package/.framework/mcp/tools/cil/search-core.ts +0 -454
  308. package/.framework/mcp/tools/cil/search.ts +0 -97
  309. package/.framework/mcp/tools/cil/suggest.ts +0 -186
  310. package/.framework/mcp/tools/cil/validate.ts +0 -1369
  311. package/.framework/mcp/tools/kb/delete.ts +0 -139
  312. package/.framework/mcp/tools/kb/index.ts +0 -52
  313. package/.framework/mcp/tools/kb/ingest.ts +0 -84
  314. package/.framework/mcp/tools/kb/list-types.ts +0 -102
  315. package/.framework/mcp/tools/kb/publish.ts +0 -100
  316. package/.framework/mcp/tools/kb/reindex.ts +0 -86
  317. package/.framework/mcp/tools/kb/revoke.ts +0 -85
  318. package/.framework/mcp/tools/kb/search.ts +0 -101
  319. package/.framework/mcp/tools/kb/upsert.ts +0 -125
  320. package/.framework/mcp/tools/observability.ts +0 -510
@@ -1,4 +1,4 @@
1
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="none"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
2
2
  // CIL[DOC-MACRO purpose="Admin CIL project dashboard page root module: imports dependencies and composes the CILDashboardPage component."]
3
3
  // CIL[DOC-RESPONSIBILITY responsibility="Bootstraps the admin CIL dashboard page and wires UI primitives, icons, and the local PageInstructions component."]
4
4
  // CIL[DOC-CONTEXT module="admin/cil" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts"]
@@ -17,6 +17,7 @@ import { Badge } from '@core/components/ui/badge'
17
17
  import { Skeleton } from '@core/components/ui/skeleton'
18
18
  import { Progress } from '@core/components/ui/progress'
19
19
  import {
20
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:module_header:module_header"]
20
21
  CheckCircle2,
21
22
  XCircle,
22
23
  AlertTriangle,
@@ -36,16 +37,13 @@ import {
36
37
  Settings2,
37
38
  } from 'lucide-react'
38
39
 
39
- import { PageInstructions } from '../../../components/admin/PageInstructions'
40
40
  // CIL[DOC-VECTOR type="context" content="purpose='Admin CIL project dashboard page root module: imports dependencies and composes the CILDashboardPage component.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
41
41
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
42
42
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
43
43
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
44
44
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
45
45
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
46
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:module_header:module_header"]
47
46
 
48
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:projectstats:interface" type="interface" identity="ProjectStats" parent="none"]
49
47
  // CIL[DOC-MACRO purpose="Defines the shape of CIL project ingestion statistics."]
50
48
  // CIL[DOC-RESPONSIBILITY responsibility="Provides a typed contract for project-level stats returned from the ingestion pipeline."]
51
49
  // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -53,6 +51,7 @@ import { PageInstructions } from '../../../components/admin/PageInstructions'
53
51
  // CIL[DOC-MICRO logic_summary="Fields: file_count, chunk_count, proposal_count, approved_count, pending_review_count, total_ingestion_cost_usd, last_ingested_at." notable_decisions="[]"]
54
52
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
55
53
  // CIL[DOC-STABILITY stability="stable"]
54
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:ProjectStats:interface" type="interface" identity="ProjectStats" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
56
55
  interface ProjectStats {
57
56
  file_count: number
58
57
  chunk_count: number
@@ -62,15 +61,14 @@ interface ProjectStats {
62
61
  total_ingestion_cost_usd: number
63
62
  last_ingested_at: string | null
64
63
  }
64
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:ProjectStats:interface"]
65
65
  // CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL project ingestion statistics.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
66
66
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
67
67
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
68
68
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
69
69
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
70
70
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
71
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:projectstats:interface"]
72
71
 
73
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:embedstatus:interface" type="interface" identity="EmbedStatus" parent="none"]
74
72
  // CIL[DOC-MACRO purpose="Defines the shape of CIL embedding coverage status."]
75
73
  // CIL[DOC-RESPONSIBILITY responsibility="Types the embedding completeness counts for a project."]
76
74
  // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -78,21 +76,21 @@ interface ProjectStats {
78
76
  // CIL[DOC-MICRO logic_summary="Fields: total_chunks, embedded_chunks, coverage_pct, unembedded_chunks." notable_decisions="[]"]
79
77
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
80
78
  // CIL[DOC-STABILITY stability="stable"]
79
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:EmbedStatus:interface" type="interface" identity="EmbedStatus" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
81
80
  interface EmbedStatus {
82
81
  total_chunks: number
83
82
  embedded_chunks: number
84
83
  coverage_pct: number
85
84
  unembedded_chunks: number
86
85
  }
86
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:EmbedStatus:interface"]
87
87
  // CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL embedding coverage status.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
88
88
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
89
89
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
90
90
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
91
91
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
92
92
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
93
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:embedstatus:interface"]
94
93
 
95
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:docstatus:interface" type="interface" identity="DocStatus" parent="none"]
96
94
  // CIL[DOC-MACRO purpose="Defines the shape of CIL documentation coverage status."]
97
95
  // CIL[DOC-RESPONSIBILITY responsibility="Types the documentation coverage counts for a project."]
98
96
  // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -100,6 +98,7 @@ interface EmbedStatus {
100
98
  // CIL[DOC-MICRO logic_summary="Fields: total_chunks, documented_count, undocumented_count, ai_generated_count, human_verified_count, coverage_pct." notable_decisions="[]"]
101
99
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
102
100
  // CIL[DOC-STABILITY stability="stable"]
101
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:DocStatus:interface" type="interface" identity="DocStatus" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
103
102
  interface DocStatus {
104
103
  total_chunks: number
105
104
  documented_count: number
@@ -108,15 +107,14 @@ interface DocStatus {
108
107
  human_verified_count: number
109
108
  coverage_pct: number
110
109
  }
110
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:DocStatus:interface"]
111
111
  // CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL documentation coverage status.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
112
112
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
113
113
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
114
114
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
115
115
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
116
116
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
117
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:docstatus:interface"]
118
117
 
119
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:callmapstatus:interface" type="interface" identity="CallmapStatus" parent="none"]
120
118
  // CIL[DOC-MACRO purpose="Defines the shape of CIL call-map link counts."]
121
119
  // CIL[DOC-RESPONSIBILITY responsibility="Types the call-map and import link counts for a project."]
122
120
  // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -124,6 +122,7 @@ interface DocStatus {
124
122
  // CIL[DOC-MICRO logic_summary="Fields: import_links, call_links, export_links, total_links, tested_by_links." notable_decisions="[]"]
125
123
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
126
124
  // CIL[DOC-STABILITY stability="stable"]
125
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CallmapStatus:interface" type="interface" identity="CallmapStatus" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
127
126
  interface CallmapStatus {
128
127
  import_links: number
129
128
  call_links: number
@@ -131,15 +130,14 @@ interface CallmapStatus {
131
130
  total_links: number
132
131
  tested_by_links?: number
133
132
  }
133
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CallmapStatus:interface"]
134
134
  // CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL call-map link counts.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
135
135
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
136
136
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
137
137
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
138
138
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
139
139
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
140
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:callmapstatus:interface"]
141
140
 
142
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:configstatus:interface" type="interface" identity="ConfigStatus" parent="none"]
143
141
  // CIL[DOC-MACRO purpose="Defines the shape of CIL configuration graph status."]
144
142
  // CIL[DOC-RESPONSIBILITY responsibility="Types the configuration graph item counts for a project."]
145
143
  // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -147,19 +145,19 @@ interface CallmapStatus {
147
145
  // CIL[DOC-MICRO logic_summary="Fields: config_items, configures_links." notable_decisions="[]"]
148
146
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
149
147
  // CIL[DOC-STABILITY stability="stable"]
148
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:ConfigStatus:interface" type="interface" identity="ConfigStatus" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
150
149
  interface ConfigStatus {
151
150
  config_items: number
152
151
  configures_links: number
153
152
  }
153
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:ConfigStatus:interface"]
154
154
  // CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL configuration graph status.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
155
155
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
156
156
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
157
157
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
158
158
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
159
159
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
160
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:configstatus:interface"]
161
160
 
162
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:pipelineprogress:interface" type="interface" identity="PipelineProgress" parent="none"]
163
161
  // CIL[DOC-MACRO purpose="Defines the shape of CIL pipeline progress aggregation."]
164
162
  // CIL[DOC-RESPONSIBILITY responsibility="Types the pipeline progress counts and per-file status for a project."]
165
163
  // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -167,21 +165,21 @@ interface ConfigStatus {
167
165
  // CIL[DOC-MICRO logic_summary="Fields: total_selected, total_chunks, by_status, file_statuses." notable_decisions="[]"]
168
166
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
169
167
  // CIL[DOC-STABILITY stability="stable"]
168
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:PipelineProgress:interface" type="interface" identity="PipelineProgress" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
170
169
  interface PipelineProgress {
171
170
  total_selected: number
172
171
  total_chunks: number
173
172
  by_status: Record<string, number>
174
173
  file_statuses: Record<string, string>
175
174
  }
175
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:PipelineProgress:interface"]
176
176
  // CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL pipeline progress aggregation.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
177
177
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
178
178
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
179
179
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
180
180
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
181
181
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
182
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:pipelineprogress:interface"]
183
182
 
184
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:dashboarddata:interface" type="interface" identity="DashboardData" parent="none"]
185
183
  // CIL[DOC-MACRO purpose="Defines the aggregate dashboard data type used by CILDashboardPage."]
186
184
  // CIL[DOC-RESPONSIBILITY responsibility="Types the unified dashboard data object fetched from multiple endpoints."]
187
185
  // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -189,6 +187,7 @@ interface PipelineProgress {
189
187
  // CIL[DOC-MICRO logic_summary="Fields: project, embed, doc, callmap, config." notable_decisions="[]"]
190
188
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
191
189
  // CIL[DOC-STABILITY stability="stable"]
190
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:DashboardData:interface" type="interface" identity="DashboardData" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
192
191
  interface DashboardData {
193
192
  project: { id: string; title: string; data: ProjectStats } | null
194
193
  embed: EmbedStatus | null
@@ -196,15 +195,14 @@ interface DashboardData {
196
195
  callmap: CallmapStatus | null
197
196
  config: ConfigStatus | null
198
197
  }
198
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:DashboardData:interface"]
199
199
  // CIL[DOC-VECTOR type="context" content="purpose='Defines the aggregate dashboard data type used by CILDashboardPage.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
200
200
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
201
201
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
202
202
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
203
203
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
204
204
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
205
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:dashboarddata:interface"]
206
205
 
207
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:passcard:function" type="function" identity="PassCard" parent="none"]
208
206
  // CIL[DOC-MACRO purpose="Renders a single pipeline pass card with status, icon, metric, and optional link."]
209
207
  // CIL[DOC-RESPONSIBILITY responsibility="Visualizes the state of one CIL pipeline stage."]
210
208
  // CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -212,6 +210,7 @@ interface DashboardData {
212
210
  // CIL[DOC-MICRO logic_summary="Selects status color, background, and icon from statusConfig and renders a compact linked card." notable_decisions="[]"]
213
211
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
214
212
  // CIL[DOC-STABILITY stability="stable"]
213
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:PassCard:component" type="component" identity="PassCard" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
215
214
  function PassCard({
216
215
  number,
217
216
  label,
@@ -263,15 +262,14 @@ function PassCard({
263
262
  </div>
264
263
  )
265
264
  }
265
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:PassCard:component"]
266
266
  // CIL[DOC-VECTOR type="context" content="purpose='Renders a single pipeline pass card with status, icon, metric, and optional link.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
267
267
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
268
268
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
269
269
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
270
270
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
271
271
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
272
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:passcard:function"]
273
272
 
274
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:stattile:function" type="function" identity="StatTile" parent="none"]
275
273
  // CIL[DOC-MACRO purpose="Renders a numeric stat tile with optional sub-label and accent styling."]
276
274
  // CIL[DOC-RESPONSIBILITY responsibility="Displays a single dashboard metric."]
277
275
  // CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -279,6 +277,7 @@ function PassCard({
279
277
  // CIL[DOC-MICRO logic_summary="Renders a Card with value, label, optional sub, and an icon." notable_decisions="[]"]
280
278
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
281
279
  // CIL[DOC-STABILITY stability="stable"]
280
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:StatTile:component" type="component" identity="StatTile" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
282
281
  function StatTile({
283
282
  label,
284
283
  value,
@@ -307,15 +306,14 @@ function StatTile({
307
306
  </Card>
308
307
  )
309
308
  }
309
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:StatTile:component"]
310
310
  // CIL[DOC-VECTOR type="context" content="purpose='Renders a numeric stat tile with optional sub-label and accent styling.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
311
311
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
312
312
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
313
313
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
314
314
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
315
315
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
316
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:stattile:function"]
317
316
 
318
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:coveragebar:function" type="function" identity="CoverageBar" parent="none"]
319
317
  // CIL[DOC-MACRO purpose="Renders a labeled progress bar showing a percentage."]
320
318
  // CIL[DOC-RESPONSIBILITY responsibility="Visualizes embedding or documentation coverage as a progress bar."]
321
319
  // CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -323,6 +321,7 @@ function StatTile({
323
321
  // CIL[DOC-MICRO logic_summary="Shows a label, percentage, and Progress component." notable_decisions="[]"]
324
322
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
325
323
  // CIL[DOC-STABILITY stability="stable"]
324
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CoverageBar:component" type="component" identity="CoverageBar" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
326
325
  function CoverageBar({ label, pct, color = 'bg-indigo-500' }: { label: string; pct: number; color?: string }) {
327
326
  return (
328
327
  <div className="space-y-1">
@@ -334,15 +333,14 @@ function CoverageBar({ label, pct, color = 'bg-indigo-500' }: { label: string; p
334
333
  </div>
335
334
  )
336
335
  }
336
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CoverageBar:component"]
337
337
  // CIL[DOC-VECTOR type="context" content="purpose='Renders a labeled progress bar showing a percentage.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
338
338
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
339
339
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
340
340
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
341
341
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
342
342
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
343
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:coveragebar:function"]
344
343
 
345
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:step_details:constant" type="constant" identity="STEP_DETAILS" parent="none"]
346
344
  // CIL[DOC-MACRO purpose="Maps CIL pipeline step slugs to labels, icons, descriptions, and skill tags."]
347
345
  // CIL[DOC-RESPONSIBILITY responsibility="Provides the metadata that drives the PassCard rendering for each pipeline stage."]
348
346
  // CIL[DOC-CONTEXT module="admin/cil" layer="data" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -350,6 +348,7 @@ function CoverageBar({ label, pct, color = 'bg-indigo-500' }: { label: string; p
350
348
  // CIL[DOC-MICRO logic_summary="Record of step slugs to display metadata for the nine CIL pipeline stages." notable_decisions="[]"]
351
349
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
352
350
  // CIL[DOC-STABILITY stability="stable"]
351
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:STEP_DETAILS:constant" type="constant" identity="STEP_DETAILS" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
353
352
  const STEP_DETAILS: Record<string, { label: string; icon: React.ElementType; description: string; skill?: string }> = {
354
353
  '0-discovered': { label: 'Discover Files', icon: FileCode2, description: 'Walk repo and register source files' },
355
354
  '1-selected': { label: 'Select Files', icon: Search, description: 'Files matched by selected paths/globs' },
@@ -361,15 +360,14 @@ const STEP_DETAILS: Record<string, { label: string; icon: React.ElementType; des
361
360
  '7-embedded-mapped': { label: 'Embed & Map', icon: Zap, description: 'Generate embeddings and import/call/test edges', skill: 'cil-8' },
362
361
  '8-published': { label: 'Publish', icon: CheckCircle2, description: 'Final validation and currentness check' },
363
362
  }
363
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:STEP_DETAILS:constant"]
364
364
  // CIL[DOC-VECTOR type="context" content="purpose='Maps CIL pipeline step slugs to labels, icons, descriptions, and skill tags.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
365
365
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
366
366
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
367
367
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
368
368
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
369
369
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
370
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:step_details:constant"]
371
370
 
372
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:driftalertcard:function" type="function" identity="DriftAlertCard" parent="none"]
373
371
  // CIL[DOC-MACRO purpose="Renders a card that detects and displays CIL chunk hash drift for a project."]
374
372
  // CIL[DOC-RESPONSIBILITY responsibility="Fetches stored chunks, validates hashes, and surfaces drifted chunks with navigation links."]
375
373
  // CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -377,6 +375,7 @@ const STEP_DETAILS: Record<string, { label: string; icon: React.ElementType; des
377
375
  // CIL[DOC-MICRO logic_summary="Calls admin-data and cil-validate APIs, compares hash status, and lists up to 5 drifted chunks with a count." notable_decisions="[]"]
378
376
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
379
377
  // CIL[DOC-STABILITY stability="stable"]
378
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:DriftAlertCard:component" type="component" identity="DriftAlertCard" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
380
379
  function DriftAlertCard({ projectId, appPath }: { projectId: string; appPath: (p: string) => string }) {
381
380
  const [driftChunks, setDriftChunks] = useState<any[] | null>(null)
382
381
  const [checking, setChecking] = useState(false)
@@ -459,15 +458,14 @@ function DriftAlertCard({ projectId, appPath }: { projectId: string; appPath: (p
459
458
  </Card>
460
459
  )
461
460
  }
461
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:DriftAlertCard:component"]
462
462
  // CIL[DOC-VECTOR type="context" content="purpose='Renders a card that detects and displays CIL chunk hash drift for a project.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
463
463
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
464
464
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
465
465
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
466
466
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
467
467
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
468
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:driftalertcard:function"]
469
468
 
470
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:cildashboardpage:function" type="function" identity="CILDashboardPage" parent="none"]
471
469
  // CIL[DOC-MACRO purpose="Main admin page for reviewing CIL project health, coverage, pipeline status, graph links, and drift."]
472
470
  // CIL[DOC-RESPONSIBILITY responsibility="Fetches and aggregates project stats, coverage, pipeline progress, callmap, and config; renders the dashboard layout."]
473
471
  // CIL[DOC-CONTEXT module="admin/cil" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
@@ -477,12 +475,15 @@ function DriftAlertCard({ projectId, appPath }: { projectId: string; appPath: (p
477
475
  // CIL[DOC-STABILITY stability="stable"]
478
476
  export default function CILDashboardPage() {
479
477
  const { id: projectId } = useParams<{ id: string }>()
478
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:appPath:function" type="function" identity="appPath" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
480
479
  const appPath = (path: string) => '/spine-framework/admin' + (path.startsWith('/') ? path : '/' + path)
480
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:appPath:function"]
481
481
  const [data, setData] = useState<DashboardData>({ project: null, embed: null, doc: null, callmap: null, config: null })
482
482
  const [pipelineProgress, setPipelineProgress] = useState<PipelineProgress | null>(null)
483
483
  const [loading, setLoading] = useState(true)
484
484
  const [discovering, setDiscovering] = useState(false)
485
485
 
486
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:load:constant" type="constant" identity="load" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
486
487
  const load = useCallback(async () => {
487
488
  if (!projectId) return
488
489
  setLoading(true)
@@ -509,11 +510,15 @@ export default function CILDashboardPage() {
509
510
  setLoading(false)
510
511
  }
511
512
  }, [projectId])
513
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:load:constant"]
512
514
 
513
515
  useEffect(() => { load() }, [load])
514
516
 
517
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:project:constant" type="constant" identity="project" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
515
518
  const project = data.project
519
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:project:constant"]
516
520
 
521
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:handleDiscover:constant" type="constant" identity="handleDiscover" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
517
522
  const handleDiscover = useCallback(async () => {
518
523
  if (!projectId) return
519
524
  setDiscovering(true)
@@ -528,6 +533,7 @@ export default function CILDashboardPage() {
528
533
  load()
529
534
  }
530
535
  }, [projectId, load])
536
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:handleDiscover:constant"]
531
537
 
532
538
 
533
539
 
@@ -541,28 +547,54 @@ export default function CILDashboardPage() {
541
547
  )
542
548
  }
543
549
 
550
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:stats:constant" type="constant" identity="stats" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
544
551
  const stats: ProjectStats = project?.data || { file_count: 0, chunk_count: 0, proposal_count: 0, approved_count: 0, pending_review_count: 0, total_ingestion_cost_usd: 0, last_ingested_at: null }
552
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:stats:constant"]
553
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:embed:constant" type="constant" identity="embed" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
545
554
  const embed = data.embed || { total_chunks: 0, embedded_chunks: 0, coverage_pct: 0, unembedded_chunks: 0 }
555
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:embed:constant"]
556
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:doc:constant" type="constant" identity="doc" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
546
557
  const doc = data.doc || { total_chunks: 0, documented_count: 0, undocumented_count: 0, ai_generated_count: 0, human_verified_count: 0, coverage_pct: 0 }
558
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:doc:constant"]
559
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:callmap:constant" type="constant" identity="callmap" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
547
560
  const callmap = data.callmap || { import_links: 0, call_links: 0, export_links: 0, total_links: 0, tested_by_links: 0 }
561
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:callmap:constant"]
562
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:config:constant" type="constant" identity="config" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
548
563
  const config = data.config || { config_items: 0, configures_links: 0 }
564
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:config:constant"]
549
565
 
566
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:pp:constant" type="constant" identity="pp" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
550
567
  const pp = pipelineProgress || { total_selected: 0, total_chunks: 0, by_status: {}, file_statuses: {} }
568
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:pp:constant"]
569
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:selectedFiles:constant" type="constant" identity="selectedFiles" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
551
570
  const selectedFiles = pp.total_selected
571
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:selectedFiles:constant"]
572
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:selectedChunks:constant" type="constant" identity="selectedChunks" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
552
573
  const selectedChunks = pp.total_chunks
574
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:selectedChunks:constant"]
575
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:totalTracked:constant" type="constant" identity="totalTracked" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
553
576
  const totalTracked = Object.values(pp.by_status).reduce((a, b) => a + (b || 0), 0)
577
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:totalTracked:constant"]
554
578
 
579
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:PIPELINE_ORDER:constant" type="constant" identity="PIPELINE_ORDER" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
555
580
  const PIPELINE_ORDER = [
556
581
  '0-discovered', '1-selected', '2-chunked', '3-documented', '4-chunk-validated',
557
582
  '5-doc-validated', '6-enriched', '7-embedded-mapped', '8-published',
558
583
  ]
584
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:PIPELINE_ORDER:constant"]
559
585
 
586
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:embedPct:constant" type="constant" identity="embedPct" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
560
587
  const embedPct = selectedChunks > 0 ? Math.round((embed.embedded_chunks / selectedChunks) * 100) : 0
588
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:embedPct:constant"]
589
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:docPct:constant" type="constant" identity="docPct" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
561
590
  const docPct = selectedChunks > 0 ? Math.round((doc.documented_count / selectedChunks) * 100) : 0
591
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:docPct:constant"]
562
592
 
593
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:lastIngested:constant" type="constant" identity="lastIngested" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
563
594
  const lastIngested = stats.last_ingested_at
564
595
  ? new Date(stats.last_ingested_at).toLocaleDateString('en-US', { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })
565
596
  : 'Never'
597
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:lastIngested:constant"]
566
598
 
567
599
  return (
568
600
  <div className="p-6 space-y-6 max-w-5xl">
@@ -602,17 +634,6 @@ export default function CILDashboardPage() {
602
634
  </Button>
603
635
  </div>
604
636
  </div>
605
-
606
- <PageInstructions
607
- description="Review CIL project health and ingestion coverage."
608
- sections={[
609
- { title: 'What this page is for', content: 'This page is the project-level overview for a CIL project. It displays stats, coverage, pipeline status, graph links, and drift alerts.' },
610
- { title: 'How to read the cards', content: 'The top tiles show Files, Chunks, Pending Review, and cumulative LLM Cost. The Coverage card shows embedding and documentation coverage plus AI-generated, human-verified, and undocumented counts.' },
611
- { title: 'How to read the pipeline', content: 'Pass cards summarize Discover Files, Select Files, Chunk, Document, Validate Chunks, Validate Docs, Enrich, Embed & Map, and Publish. Each card shows status, counts, and a link to the relevant step.' },
612
- { title: 'Important notes', content: 'Use Refresh to reload the dashboard and Run Pipeline to start or continue ingestion. A drift alert appears when stored hashes differ from current code.' },
613
- ]}
614
- />
615
-
616
637
  {}
617
638
  <div className="grid grid-cols-2 sm:grid-cols-4 gap-4">
618
639
  <StatTile label="Files" value={selectedFiles.toLocaleString()} sub={`${stats.file_count.toLocaleString()} discovered`} icon={FileCode2} />
@@ -660,26 +681,38 @@ export default function CILDashboardPage() {
660
681
  <h2 className="text-sm font-medium text-muted-foreground uppercase tracking-wide mb-3">Pipeline Status</h2>
661
682
  <div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
662
683
  {(() => {
684
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:outByIdx:constant" type="constant" identity="outByIdx" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
663
685
  const outByIdx = PIPELINE_ORDER.map((_, i) =>
664
686
  PIPELINE_ORDER.slice(i === 0 ? 1 : i).reduce((sum, s) => sum + (pp.by_status[s] || 0), 0)
665
687
  )
688
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:outByIdx:constant"]
666
689
 
667
690
  return PIPELINE_ORDER.map((status, idx) => {
668
691
 
692
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:detail:constant" type="constant" identity="detail" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
669
693
  const detail = STEP_DETAILS[status]
694
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:detail:constant"]
670
695
 
696
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:inCount:constant" type="constant" identity="inCount" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
671
697
  const inCount = idx === 0 ? totalTracked : outByIdx[idx - 1]
698
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:inCount:constant"]
699
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:outCount:constant" type="constant" identity="outCount" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
672
700
  const outCount = outByIdx[idx]
701
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:outCount:constant"]
673
702
 
703
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:stageStatus:constant" type="constant" identity="stageStatus" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
674
704
  const stageStatus = inCount === 0
675
705
  ? 'empty'
676
706
  : inCount > 0 && outCount === inCount
677
707
  ? 'complete'
678
708
  : 'partial'
709
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:stageStatus:constant"]
679
710
 
711
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:metric:constant" type="constant" identity="metric" parent="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:CILDashboardPage:component"]
680
712
  const metric = selectedFiles > 0
681
713
  ? `${inCount.toLocaleString()} / ${outCount.toLocaleString()} files`
682
714
  : 'No files selected'
715
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:metric:constant"]
683
716
 
684
717
  return (
685
718
  <PassCard
@@ -769,4 +802,3 @@ export default function CILDashboardPage() {
769
802
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
770
803
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
771
804
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
772
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:cildashboardpage:function"]