neotoma 0.3.0 → 0.3.2

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 (1699) hide show
  1. package/README.md +9 -9
  2. package/dist/actions.js +2 -2
  3. package/dist/actions.js.map +1 -1
  4. package/dist/cli/bootstrap.js +0 -0
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +158 -5
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/crypto/auth.js +1 -1
  9. package/dist/crypto/auth.js.map +1 -1
  10. package/dist/mcp_ws_bridge.js +1 -1
  11. package/dist/mcp_ws_bridge.js.map +1 -1
  12. package/dist/server.js +2 -2
  13. package/dist/server.js.map +1 -1
  14. package/dist/services/field_converters.js +3 -3
  15. package/dist/services/field_converters.js.map +1 -1
  16. package/dist/services/field_validation.js +1 -1
  17. package/dist/services/field_validation.js.map +1 -1
  18. package/dist/services/mcp_auth.js +1 -1
  19. package/dist/services/mcp_auth.js.map +1 -1
  20. package/dist/services/mcp_oauth.js +1 -1
  21. package/dist/services/mcp_oauth.js.map +1 -1
  22. package/dist/services/parquet_reader.js +1 -1
  23. package/dist/services/parquet_reader.js.map +1 -1
  24. package/dist/services/public_key_registry.js +2 -2
  25. package/dist/services/public_key_registry.js.map +1 -1
  26. package/package.json +27 -7
  27. package/.claude/CLAUDE.md +0 -81
  28. package/.claude/rules/agent_constraints.md +0 -201
  29. package/.claude/rules/agent_instructions_sync_rules.md +0 -100
  30. package/.claude/rules/agent_test_execution.md +0 -358
  31. package/.claude/rules/autonomous_execution.md +0 -119
  32. package/.claude/rules/bug_fix_detection.md +0 -145
  33. package/.claude/rules/bug_learning.md +0 -154
  34. package/.claude/rules/checkpoint_management.md +0 -194
  35. package/.claude/rules/configuration_management.md +0 -159
  36. package/.claude/rules/content_style_enforcement.md +0 -141
  37. package/.claude/rules/dependency_installation.md +0 -148
  38. package/.claude/rules/document_loading_order.md +0 -197
  39. package/.claude/rules/documentation_rules.md +0 -169
  40. package/.claude/rules/downstream_doc_updates.md +0 -269
  41. package/.claude/rules/env_check.md +0 -55
  42. package/.claude/rules/environment_variables_1password.md +0 -315
  43. package/.claude/rules/environment_variables_env_file.md +0 -124
  44. package/.claude/rules/feature_unit_detection.md +0 -132
  45. package/.claude/rules/file_naming.md +0 -34
  46. package/.claude/rules/git_remote_sync.md +0 -242
  47. package/.claude/rules/instruction_documentation.md +0 -287
  48. package/.claude/rules/native_browser_debugging.md +0 -68
  49. package/.claude/rules/plan_execution_testing.md +0 -101
  50. package/.claude/rules/plan_format.md +0 -38
  51. package/.claude/rules/post_build_testing.md +0 -162
  52. package/.claude/rules/prefer_cli_tools.md +0 -233
  53. package/.claude/rules/readme_maintenance.md +0 -156
  54. package/.claude/rules/release_detection.md +0 -95
  55. package/.claude/rules/release_status_readme_update.md +0 -62
  56. package/.claude/rules/risk_management.md +0 -170
  57. package/.claude/rules/security.md +0 -168
  58. package/.claude/rules/social_media_conventions.md +0 -42
  59. package/.claude/rules/test_first_workflow.md +0 -344
  60. package/.claude/rules/worktree_env.md +0 -56
  61. package/.claude/settings.json +0 -5
  62. package/.claude/skills/commit.md +0 -762
  63. package/.claude/skills/create_feature_unit.md +0 -176
  64. package/.claude/skills/create_release.md +0 -428
  65. package/.claude/skills/fix_feature_bug.md +0 -93
  66. package/.claude/skills/pull.md +0 -314
  67. package/.claude/skills/setup_symlinks.md +0 -228
  68. package/.codex/config.toml +0 -92
  69. package/.cursor/commands/analyze.md +0 -574
  70. package/.cursor/commands/commit.md +0 -768
  71. package/.cursor/commands/create_feature_unit.md +0 -182
  72. package/.cursor/commands/create_prototype.md +0 -95
  73. package/.cursor/commands/create_release.md +0 -434
  74. package/.cursor/commands/create_rule.md +0 -296
  75. package/.cursor/commands/debug.md +0 -985
  76. package/.cursor/commands/final_review.md +0 -97
  77. package/.cursor/commands/fix_feature_bug.md +0 -99
  78. package/.cursor/commands/manage_error_debugging.md +0 -186
  79. package/.cursor/commands/migrate_plans.md +0 -499
  80. package/.cursor/commands/publish.md +0 -559
  81. package/.cursor/commands/pull.md +0 -320
  82. package/.cursor/commands/push.md +0 -259
  83. package/.cursor/commands/report.md +0 -1506
  84. package/.cursor/commands/report_error.md +0 -1505
  85. package/.cursor/commands/run_feature_workflow.md +0 -83
  86. package/.cursor/commands/setup_commands.md +0 -87
  87. package/.cursor/commands/setup_symlinks.md +0 -234
  88. package/.cursor/commands/sync_env_from_1password.md +0 -321
  89. package/.cursor/commands.json +0 -100
  90. package/.cursor/environment.json +0 -5
  91. package/.cursor/mcp.json.template +0 -16
  92. package/.cursor/plans/agent_skills_analysis_aac0f1b6.plan.md +0 -949
  93. package/.cursor/plans/agent_trust_framework_eb38ca7d.plan.md +0 -634
  94. package/.cursor/plans/all-storage-unstructured_provenance_df0b7a8f.plan.md +0 -112
  95. package/.cursor/plans/automated_error_debugging_cloud_agents.plan.md +0 -526
  96. package/.cursor/plans/automated_error_debugging_cursor_cli.plan.md +0 -599
  97. package/.cursor/plans/automated_error_debugging_localhost_clarified.plan.md +0 -510
  98. package/.cursor/plans/bug_report_and_contribution_client_guidance.plan.md +0 -143
  99. package/.cursor/plans/convert_1password_sync_to_mcp_343ca61c.plan.md +0 -282
  100. package/.cursor/plans/debug_pending_errors_command.plan.md +0 -531
  101. package/.cursor/plans/error_reporting_command_8868f27b.plan.md +0 -255
  102. package/.cursor/plans/mcp-cli-action-item-01-openapi-core.plan.md +0 -30
  103. package/.cursor/plans/mcp-cli-action-item-02-openapi-mcp-cli-mapping.plan.md +0 -18
  104. package/.cursor/plans/mcp-cli-action-item-03-cli-equivalent-logging.plan.md +0 -18
  105. package/.cursor/plans/mcp-cli-action-item-06-error-taxonomy.plan.md +0 -18
  106. package/.cursor/plans/mcp-cli-action-item-07-fixture-replay-graphs.plan.md +0 -18
  107. package/.cursor/plans/mcp-cli-action-item-08-cli-reference-executor.plan.md +0 -18
  108. package/.cursor/plans/mcp-cli-action-item-09-mcp-tools-atomic.plan.md +0 -18
  109. package/.cursor/plans/mcp-cli-action-item-10-canonical-walkthrough.plan.md +0 -18
  110. package/.cursor/plans/mcp-cli-action-item-11-fixtures-expected-outputs.plan.md +0 -18
  111. package/.cursor/plans/mcp-cli-action-item-12-failure-gallery.plan.md +0 -18
  112. package/.cursor/plans/mcp_source-path_documentation_5ce48609.plan.md +0 -83
  113. package/.cursor/plans/me_and_get_authenticated_user_response_updates.plan.md +0 -125
  114. package/.cursor/plans/multi-llm_provider_support_3fdeb361.plan.md +0 -120
  115. package/.cursor/plans/plan_migration_command_integrated.plan.md +0 -393
  116. package/.cursor/plans/schema_icon_enhancements_plan.md +0 -533
  117. package/.cursor/plans/site-react-tailwind-parity.plan.md +0 -82
  118. package/.cursor/plans/sources-first-ingestion-v8.plan.md +0 -0
  119. package/.cursor/plans/sources-first_ingestion_v10_baef2ba2.plan.md +0 -363
  120. package/.cursor/plans/test_coverage_gap_analysis_9cb70022.plan.md +0 -39
  121. package/.cursor/port_to_foundation_analysis.md +0 -217
  122. package/.cursor/rules/agent_constraints.mdc +0 -210
  123. package/.cursor/rules/autonomous_execution.mdc +0 -128
  124. package/.cursor/rules/configuration_management.mdc +0 -168
  125. package/.cursor/rules/cursor_rules_editing.mdc +0 -99
  126. package/.cursor/rules/cursor_rules_sync.mdc +0 -74
  127. package/.cursor/rules/cursor_rules_sync_requirement.mdc +0 -156
  128. package/.cursor/rules/developer_agent_instructions_sync_rules.mdc +0 -109
  129. package/.cursor/rules/document_loading_order.mdc +0 -206
  130. package/.cursor/rules/instruction_documentation.mdc +0 -296
  131. package/.cursor/rules/risk_management.mdc +0 -179
  132. package/.cursor/rules/security.mdc +0 -177
  133. package/.cursor/skipped_records/companies_skipped.json +0 -27
  134. package/.cursor/skipped_records/contacts_skipped.json +0 -23
  135. package/.cursor/skipped_records/goals_skipped.json +0 -7
  136. package/.cursor/skipped_records/people_skipped.json +0 -14
  137. package/.cursor/skipped_records/projects_skipped.json +0 -39
  138. package/.cursor/worktrees.json +0 -12
  139. package/.dockerignore +0 -9
  140. package/.env.example +0 -84
  141. package/.eslintrc.json +0 -11
  142. package/.github/workflows/deploy-pages-site.yml +0 -55
  143. package/.gitmodules +0 -12
  144. package/.husky/pre-commit +0 -42
  145. package/.mcp.json +0 -13
  146. package/.nvmrc +0 -1
  147. package/.prettierrc.json +0 -7
  148. package/.vscode/extensions.json +0 -5
  149. package/.vscode/settings.json +0 -47
  150. package/CONTRIBUTING.md +0 -23
  151. package/Dockerfile +0 -28
  152. package/SECURITY.md +0 -41
  153. package/components.json +0 -21
  154. package/cursor_rules_manifest.json +0 -28
  155. package/dist/__fixtures__/helpers.d.ts +0 -91
  156. package/dist/__fixtures__/helpers.d.ts.map +0 -1
  157. package/dist/__fixtures__/helpers.js +0 -384
  158. package/dist/__fixtures__/helpers.js.map +0 -1
  159. package/dist/__fixtures__/types.d.ts +0 -285
  160. package/dist/__fixtures__/types.d.ts.map +0 -1
  161. package/dist/__fixtures__/types.js +0 -7
  162. package/dist/__fixtures__/types.js.map +0 -1
  163. package/dist/__fixtures__/validation.d.ts +0 -45
  164. package/dist/__fixtures__/validation.d.ts.map +0 -1
  165. package/dist/__fixtures__/validation.js +0 -311
  166. package/dist/__fixtures__/validation.js.map +0 -1
  167. package/dist/config/plaid.d.ts +0 -21
  168. package/dist/config/plaid.d.ts.map +0 -1
  169. package/dist/config/plaid.js +0 -38
  170. package/dist/config/plaid.js.map +0 -1
  171. package/dist/events/event_emitter.d.ts +0 -24
  172. package/dist/events/event_emitter.d.ts.map +0 -1
  173. package/dist/events/event_emitter.js +0 -85
  174. package/dist/events/event_emitter.js.map +0 -1
  175. package/dist/events/event_log.d.ts +0 -23
  176. package/dist/events/event_log.d.ts.map +0 -1
  177. package/dist/events/event_log.js +0 -77
  178. package/dist/events/event_log.js.map +0 -1
  179. package/dist/events/event_schema.d.ts +0 -58
  180. package/dist/events/event_schema.d.ts.map +0 -1
  181. package/dist/events/event_schema.js +0 -43
  182. package/dist/events/event_schema.js.map +0 -1
  183. package/dist/events/event_validator.d.ts +0 -23
  184. package/dist/events/event_validator.d.ts.map +0 -1
  185. package/dist/events/event_validator.js +0 -90
  186. package/dist/events/event_validator.js.map +0 -1
  187. package/dist/events/index.d.ts +0 -9
  188. package/dist/events/index.d.ts.map +0 -1
  189. package/dist/events/index.js +0 -9
  190. package/dist/events/index.js.map +0 -1
  191. package/dist/events/replay.d.ts +0 -27
  192. package/dist/events/replay.d.ts.map +0 -1
  193. package/dist/events/replay.js +0 -62
  194. package/dist/events/replay.js.map +0 -1
  195. package/dist/hashing/hash_chain.d.ts +0 -31
  196. package/dist/hashing/hash_chain.d.ts.map +0 -1
  197. package/dist/hashing/hash_chain.js +0 -52
  198. package/dist/hashing/hash_chain.js.map +0 -1
  199. package/dist/integrations/plaid/client.d.ts +0 -53
  200. package/dist/integrations/plaid/client.d.ts.map +0 -1
  201. package/dist/integrations/plaid/client.js +0 -224
  202. package/dist/integrations/plaid/client.js.map +0 -1
  203. package/dist/integrations/plaid/normalizers.d.ts +0 -26
  204. package/dist/integrations/plaid/normalizers.d.ts.map +0 -1
  205. package/dist/integrations/plaid/normalizers.js +0 -166
  206. package/dist/integrations/plaid/normalizers.js.map +0 -1
  207. package/dist/integrations/providers/asana.d.ts +0 -9
  208. package/dist/integrations/providers/asana.d.ts.map +0 -1
  209. package/dist/integrations/providers/asana.js +0 -62
  210. package/dist/integrations/providers/asana.js.map +0 -1
  211. package/dist/integrations/providers/base.d.ts +0 -17
  212. package/dist/integrations/providers/base.d.ts.map +0 -1
  213. package/dist/integrations/providers/base.js +0 -64
  214. package/dist/integrations/providers/base.js.map +0 -1
  215. package/dist/integrations/providers/facebook.d.ts +0 -9
  216. package/dist/integrations/providers/facebook.d.ts.map +0 -1
  217. package/dist/integrations/providers/facebook.js +0 -58
  218. package/dist/integrations/providers/facebook.js.map +0 -1
  219. package/dist/integrations/providers/gmail.d.ts +0 -10
  220. package/dist/integrations/providers/gmail.d.ts.map +0 -1
  221. package/dist/integrations/providers/gmail.js +0 -67
  222. package/dist/integrations/providers/gmail.js.map +0 -1
  223. package/dist/integrations/providers/index.d.ts +0 -6
  224. package/dist/integrations/providers/index.d.ts.map +0 -1
  225. package/dist/integrations/providers/index.js +0 -25
  226. package/dist/integrations/providers/index.js.map +0 -1
  227. package/dist/integrations/providers/instagram.d.ts +0 -9
  228. package/dist/integrations/providers/instagram.d.ts.map +0 -1
  229. package/dist/integrations/providers/instagram.js +0 -47
  230. package/dist/integrations/providers/instagram.js.map +0 -1
  231. package/dist/integrations/providers/metadata.d.ts +0 -25
  232. package/dist/integrations/providers/metadata.d.ts.map +0 -1
  233. package/dist/integrations/providers/metadata.js +0 -407
  234. package/dist/integrations/providers/metadata.js.map +0 -1
  235. package/dist/integrations/providers/types.d.ts +0 -39
  236. package/dist/integrations/providers/types.d.ts.map +0 -1
  237. package/dist/integrations/providers/types.js +0 -2
  238. package/dist/integrations/providers/types.js.map +0 -1
  239. package/dist/integrations/providers/x.d.ts +0 -9
  240. package/dist/integrations/providers/x.d.ts.map +0 -1
  241. package/dist/integrations/providers/x.js +0 -78
  242. package/dist/integrations/providers/x.js.map +0 -1
  243. package/dist/reducers/record_reducer.d.ts +0 -25
  244. package/dist/reducers/record_reducer.d.ts.map +0 -1
  245. package/dist/reducers/record_reducer.js +0 -93
  246. package/dist/reducers/record_reducer.js.map +0 -1
  247. package/dist/reducers/reducer_registry.d.ts +0 -47
  248. package/dist/reducers/reducer_registry.d.ts.map +0 -1
  249. package/dist/reducers/reducer_registry.js +0 -82
  250. package/dist/reducers/reducer_registry.js.map +0 -1
  251. package/dist/repositories/db/event_repo.d.ts +0 -14
  252. package/dist/repositories/db/event_repo.d.ts.map +0 -1
  253. package/dist/repositories/db/event_repo.js +0 -67
  254. package/dist/repositories/db/event_repo.js.map +0 -1
  255. package/dist/repositories/db/state_repo.d.ts +0 -14
  256. package/dist/repositories/db/state_repo.d.ts.map +0 -1
  257. package/dist/repositories/db/state_repo.js +0 -61
  258. package/dist/repositories/db/state_repo.js.map +0 -1
  259. package/dist/repositories/file/event_repo.d.ts +0 -18
  260. package/dist/repositories/file/event_repo.d.ts.map +0 -1
  261. package/dist/repositories/file/event_repo.js +0 -148
  262. package/dist/repositories/file/event_repo.js.map +0 -1
  263. package/dist/repositories/file/state_repo.d.ts +0 -21
  264. package/dist/repositories/file/state_repo.d.ts.map +0 -1
  265. package/dist/repositories/file/state_repo.js +0 -89
  266. package/dist/repositories/file/state_repo.js.map +0 -1
  267. package/dist/repositories/sqlite/supabase_adapter.d.ts +0 -135
  268. package/dist/repositories/sqlite/supabase_adapter.d.ts.map +0 -1
  269. package/dist/repositories/sqlite/supabase_adapter.js +0 -810
  270. package/dist/repositories/sqlite/supabase_adapter.js.map +0 -1
  271. package/dist/services/connectors.d.ts +0 -89
  272. package/dist/services/connectors.d.ts.map +0 -1
  273. package/dist/services/connectors.js +0 -248
  274. package/dist/services/connectors.js.map +0 -1
  275. package/dist/services/event_generation.d.ts +0 -37
  276. package/dist/services/event_generation.d.ts.map +0 -1
  277. package/dist/services/event_generation.js +0 -236
  278. package/dist/services/event_generation.js.map +0 -1
  279. package/dist/services/extraction/rules.d.ts +0 -26
  280. package/dist/services/extraction/rules.d.ts.map +0 -1
  281. package/dist/services/extraction/rules.js +0 -691
  282. package/dist/services/extraction/rules.js.map +0 -1
  283. package/dist/services/file_analysis.d.ts +0 -38
  284. package/dist/services/file_analysis.d.ts.map +0 -1
  285. package/dist/services/file_analysis.js +0 -325
  286. package/dist/services/file_analysis.js.map +0 -1
  287. package/dist/services/graph_builder.d.ts +0 -51
  288. package/dist/services/graph_builder.d.ts.map +0 -1
  289. package/dist/services/graph_builder.js +0 -279
  290. package/dist/services/graph_builder.js.map +0 -1
  291. package/dist/services/importers.d.ts +0 -28
  292. package/dist/services/importers.d.ts.map +0 -1
  293. package/dist/services/importers.js +0 -174
  294. package/dist/services/importers.js.map +0 -1
  295. package/dist/services/observation_ingestion.d.ts +0 -26
  296. package/dist/services/observation_ingestion.d.ts.map +0 -1
  297. package/dist/services/observation_ingestion.js +0 -364
  298. package/dist/services/observation_ingestion.js.map +0 -1
  299. package/dist/services/payload_compiler.d.ts +0 -36
  300. package/dist/services/payload_compiler.d.ts.map +0 -1
  301. package/dist/services/payload_compiler.js +0 -121
  302. package/dist/services/payload_compiler.js.map +0 -1
  303. package/dist/services/payload_identity.d.ts +0 -35
  304. package/dist/services/payload_identity.d.ts.map +0 -1
  305. package/dist/services/payload_identity.js +0 -101
  306. package/dist/services/payload_identity.js.map +0 -1
  307. package/dist/services/payload_schema.d.ts +0 -104
  308. package/dist/services/payload_schema.d.ts.map +0 -1
  309. package/dist/services/payload_schema.js +0 -46
  310. package/dist/services/payload_schema.js.map +0 -1
  311. package/dist/services/plaid_sync.d.ts +0 -77
  312. package/dist/services/plaid_sync.d.ts.map +0 -1
  313. package/dist/services/plaid_sync.js +0 -273
  314. package/dist/services/plaid_sync.js.map +0 -1
  315. package/dist/services/record_comparison.d.ts +0 -29
  316. package/dist/services/record_comparison.d.ts.map +0 -1
  317. package/dist/services/record_comparison.js +0 -84
  318. package/dist/services/record_comparison.js.map +0 -1
  319. package/dist/services/records.d.ts +0 -31
  320. package/dist/services/records.d.ts.map +0 -1
  321. package/dist/services/records.js +0 -184
  322. package/dist/services/records.js.map +0 -1
  323. package/dist/services/search.d.ts +0 -15
  324. package/dist/services/search.d.ts.map +0 -1
  325. package/dist/services/search.js +0 -81
  326. package/dist/services/search.js.map +0 -1
  327. package/dist/services/summary.d.ts +0 -5
  328. package/dist/services/summary.d.ts.map +0 -1
  329. package/dist/services/summary.js +0 -118
  330. package/dist/services/summary.js.map +0 -1
  331. package/docs/NEOTOMA_MANIFEST.md +0 -152
  332. package/docs/api/rest_api.md +0 -466
  333. package/docs/architecture/agentic_portfolio_overview.md +0 -99
  334. package/docs/architecture/agentic_wallet_overview.md +0 -93
  335. package/docs/architecture/architectural_decisions.md +0 -462
  336. package/docs/architecture/architecture.md +0 -842
  337. package/docs/architecture/blockchain_readiness_assessment.md +0 -248
  338. package/docs/architecture/consistency.md +0 -539
  339. package/docs/architecture/conversational_ux_architecture.md +0 -240
  340. package/docs/architecture/determinism.md +0 -762
  341. package/docs/architecture/idempotence_pattern.md +0 -139
  342. package/docs/architecture/mcp_actions_assessment.md +0 -182
  343. package/docs/architecture/ner_vs_schema_first_extraction.md +0 -280
  344. package/docs/architecture/schema_expansion.md +0 -260
  345. package/docs/architecture/schema_handling.md +0 -209
  346. package/docs/architecture/source_material_model.md +0 -281
  347. package/docs/assets/neotoma_banner.png +0 -0
  348. package/docs/conventions/TEST_EXECUTION_IMPROVEMENTS.md +0 -205
  349. package/docs/conventions/always_on_rules_review.md +0 -66
  350. package/docs/conventions/code_conventions_implementation.md +0 -111
  351. package/docs/conventions/code_conventions_plan.md +0 -124
  352. package/docs/conventions/code_review_summary.md +0 -96
  353. package/docs/conventions/documentation_standards.md +0 -104
  354. package/docs/conventions/estimation_methodology.md +0 -146
  355. package/docs/conventions/file_naming_migration_status.md +0 -94
  356. package/docs/conventions/readme_generation_framework.md +0 -230
  357. package/docs/conventions/time_tracking_template.md +0 -60
  358. package/docs/conventions/writing_style_guide.md +0 -252
  359. package/docs/developer/agent_cli_configuration.md +0 -140
  360. package/docs/developer/agent_instructions_sync_rules.mdc +0 -97
  361. package/docs/developer/canonical_walkthrough.md +0 -137
  362. package/docs/developer/cli_agent_instructions.md +0 -141
  363. package/docs/developer/cli_overview.md +0 -207
  364. package/docs/developer/cli_reference.md +0 -518
  365. package/docs/developer/developer_preview_launch_checklist.md +0 -128
  366. package/docs/developer/developer_preview_storage.md +0 -35
  367. package/docs/developer/developer_release_manual_test_checklist.md +0 -209
  368. package/docs/developer/development_workflow.md +0 -308
  369. package/docs/developer/environment/CONNECTOR_SECRET_KEY_SETUP.md +0 -96
  370. package/docs/developer/environment/DEV_CONNECTOR_SECRET_KEY_EXPLANATION.md +0 -80
  371. package/docs/developer/environment/ENV_MAPPINGS_STATUS.md +0 -86
  372. package/docs/developer/environment/ENV_VAR_NAMING_STRATEGY.md +0 -145
  373. package/docs/developer/environment/MIGRATION_TO_SINGLE_VAR_NAMES.md +0 -89
  374. package/docs/developer/environment/QUICK_START_1PASSWORD.md +0 -126
  375. package/docs/developer/environment/README.md +0 -27
  376. package/docs/developer/environment/SETUP_ENV_MAPPINGS.md +0 -256
  377. package/docs/developer/environment_distinction_audit.md +0 -43
  378. package/docs/developer/fix_doc_inconsistencies_plan.md +0 -63
  379. package/docs/developer/getting_started.md +0 -100
  380. package/docs/developer/import_interpretation_debug.md +0 -69
  381. package/docs/developer/launchd_dev_servers.md +0 -51
  382. package/docs/developer/launchd_watch_build.md +0 -37
  383. package/docs/developer/mcp/instructions.md +0 -71
  384. package/docs/developer/mcp/invalid_connection_id_handling.md +0 -181
  385. package/docs/developer/mcp/tool_descriptions.yaml +0 -41
  386. package/docs/developer/mcp/unauthenticated.md +0 -30
  387. package/docs/developer/mcp_chatgpt_setup.md +0 -159
  388. package/docs/developer/mcp_claude_code_setup.md +0 -519
  389. package/docs/developer/mcp_https_testing.md +0 -178
  390. package/docs/developer/mcp_https_testing_status.md +0 -130
  391. package/docs/developer/mcp_https_tunnel_status.md +0 -147
  392. package/docs/developer/mcp_oauth_migration_guide.md +0 -196
  393. package/docs/developer/mcp_overview.md +0 -145
  394. package/docs/developer/mcp_server_examples_from_cursor_docs.md +0 -485
  395. package/docs/developer/observation_architecture_documentation_integration.md +0 -368
  396. package/docs/developer/release_orchestrator.md +0 -197
  397. package/docs/developer/repository_cleanup_plan.md +0 -87
  398. package/docs/developer/resolved_blockers.md +0 -49
  399. package/docs/developer/schema_initialization.md +0 -182
  400. package/docs/developer/secrets/README.md +0 -15
  401. package/docs/developer/secrets/secrets_architecture.md +0 -95
  402. package/docs/developer/secrets/secrets_manager_value.md +0 -53
  403. package/docs/developer/secrets/secrets_secure_approach.md +0 -103
  404. package/docs/developer/secrets/secrets_setup.md +0 -116
  405. package/docs/developer/shared_components_submodule_setup.md +0 -273
  406. package/docs/developer/spec_compliance_validation_system.md +0 -261
  407. package/docs/developer/test_coverage_gap_analysis_plan.md +0 -36
  408. package/docs/developer/tunnels.md +0 -327
  409. package/docs/developer/vite_troubleshooting.md +0 -111
  410. package/docs/doc_dependencies.yaml +0 -497
  411. package/docs/examples/schema_breaking_change_reconciliation.md +0 -515
  412. package/docs/feature_units/completed/FU-050/FU-050_spec.md +0 -341
  413. package/docs/feature_units/completed/FU-050/manifest.yaml +0 -330
  414. package/docs/feature_units/completed/FU-051/FU-051_spec.md +0 -173
  415. package/docs/feature_units/completed/FU-051/manifest.yaml +0 -229
  416. package/docs/feature_units/completed/FU-052/FU-052_spec.md +0 -158
  417. package/docs/feature_units/completed/FU-052/manifest.yaml +0 -188
  418. package/docs/feature_units/completed/FU-053/FU-053_spec.md +0 -144
  419. package/docs/feature_units/completed/FU-053/manifest.yaml +0 -145
  420. package/docs/feature_units/completed/FU-054/FU-054_spec.md +0 -144
  421. package/docs/feature_units/completed/FU-054/manifest.yaml +0 -139
  422. package/docs/feature_units/completed/FU-702/billing_spec.md +0 -413
  423. package/docs/feature_units/completed/FU-702/manifest.yaml +0 -418
  424. package/docs/feature_units/standards/DISCOVERY_CAGAN_ALIGNMENT.md +0 -214
  425. package/docs/feature_units/standards/creating_feature_units.md +0 -385
  426. package/docs/feature_units/standards/discovery_process.md +0 -821
  427. package/docs/feature_units/standards/error_protocol.md +0 -60
  428. package/docs/feature_units/standards/execution_instructions.md +0 -87
  429. package/docs/feature_units/standards/feature_unit_spec.md +0 -325
  430. package/docs/feature_units/standards/integration_test_execution.md +0 -127
  431. package/docs/feature_units/standards/manifest_template.yaml +0 -370
  432. package/docs/feature_units/standards/model_selection.md +0 -207
  433. package/docs/feature_units/standards/multi_agent_orchestration.md +0 -411
  434. package/docs/feature_units/standards/release_report_generation.md +0 -448
  435. package/docs/feature_units/standards/release_report_spec.md +0 -444
  436. package/docs/feature_units/standards/release_report_template.md +0 -76
  437. package/docs/feature_units/standards/spec_compliance_validation.md +0 -147
  438. package/docs/feature_units/standards/worker_agent_template.md +0 -191
  439. package/docs/foundation/ai_safety.md +0 -10
  440. package/docs/foundation/composability_analysis.md +0 -308
  441. package/docs/foundation/core_identity.md +0 -50
  442. package/docs/foundation/documentation_design_system.md +0 -505
  443. package/docs/foundation/entity_resolution.md +0 -34
  444. package/docs/foundation/layered_architecture.md +0 -99
  445. package/docs/foundation/mmry_comparison.md +0 -176
  446. package/docs/foundation/philosophy.md +0 -103
  447. package/docs/foundation/problem_statement.md +0 -41
  448. package/docs/foundation/product_positioning.md +0 -69
  449. package/docs/foundation/product_principles.md +0 -18
  450. package/docs/foundation/quality_requirements.md +0 -68
  451. package/docs/foundation/timeline_events.md +0 -19
  452. package/docs/foundation/user_workflows.md +0 -38
  453. package/docs/implementation/PARQUET_MCP_SERVER_FIXES.md +0 -373
  454. package/docs/implementation/PARQUET_SUPPORT_IMPLEMENTATION.md +0 -207
  455. package/docs/infrastructure/deployment.md +0 -372
  456. package/docs/legal/README.md +0 -51
  457. package/docs/legal/compliance.md +0 -854
  458. package/docs/legal/privacy_policy.md +0 -114
  459. package/docs/legal/privacy_policy_changelog.md +0 -49
  460. package/docs/legal/terms_of_service.md +0 -185
  461. package/docs/legal/terms_of_service_changelog.md +0 -62
  462. package/docs/migration/llm_extraction_removal.md +0 -387
  463. package/docs/migration/llm_interpretation_docs_update.md +0 -130
  464. package/docs/observability/logging.md +0 -50
  465. package/docs/observability/metrics_standard.md +0 -38
  466. package/docs/observability/tracing.md +0 -41
  467. package/docs/operations/debugging/README.md +0 -11
  468. package/docs/operations/debugging/error_debug_instructions.md +0 -55
  469. package/docs/operations/health_check.md +0 -73
  470. package/docs/operations/runbook.md +0 -88
  471. package/docs/prompts/llm_extraction_system_prompt.md +0 -31
  472. package/docs/proposals/IMPLEMENTATION_SUMMARY.md +0 -198
  473. package/docs/proposals/MIGRATION_REPORT.md +0 -65
  474. package/docs/proposals/PROPOSAL_TEMPLATE.md +0 -58
  475. package/docs/proposals/README.md +0 -57
  476. package/docs/proposals/agent-trust-framework.md +0 -621
  477. package/docs/proposals/conversation_turn_identity_reverts_forks.md +0 -144
  478. package/docs/proposals/document-v023-release.md +0 -898
  479. package/docs/proposals/iterative_chat_store_mcp_instructions.md +0 -155
  480. package/docs/proposals/llm_sampling_parameters_interpretation_config.md +0 -196
  481. package/docs/proposals/mcp-cli-action-items.md +0 -207
  482. package/docs/proposals/plan-migration-command-integrated-with-commit.md +0 -386
  483. package/docs/proposals/sources-first-ingestion-v10.md +0 -348
  484. package/docs/proposals/test-coverage-gap-analysis.md +0 -26
  485. package/docs/prototypes/PROTOTYPE_QUICKSTART.md +0 -56
  486. package/docs/prototypes/README.md +0 -74
  487. package/docs/reference/error_codes.md +0 -223
  488. package/docs/releases/archived/aspirational/README.md +0 -57
  489. package/docs/releases/archived/aspirational/v0.4.0/manifest.yaml +0 -94
  490. package/docs/releases/archived/aspirational/v0.4.0/release_plan.md +0 -51
  491. package/docs/releases/archived/aspirational/v0.5.0/manifest.yaml +0 -152
  492. package/docs/releases/archived/aspirational/v0.5.0/release_plan.md +0 -236
  493. package/docs/releases/archived/aspirational/v0.9.0/README.md +0 -78
  494. package/docs/releases/archived/aspirational/v0.9.0/manifest.yaml +0 -111
  495. package/docs/releases/archived/aspirational/v0.9.0/release_plan.md +0 -238
  496. package/docs/releases/archived/aspirational/v0.9.0/status.md +0 -89
  497. package/docs/releases/archived/aspirational/v1.0.0/UI_REFACTORING_PLAN.md +0 -239
  498. package/docs/releases/archived/aspirational/v1.0.0/acceptance_criteria.md +0 -88
  499. package/docs/releases/archived/aspirational/v1.0.0/approach_comparison.md +0 -558
  500. package/docs/releases/archived/aspirational/v1.0.0/architectural_impact_chat_ui.md +0 -195
  501. package/docs/releases/archived/aspirational/v1.0.0/blog_post_update_directives.md +0 -491
  502. package/docs/releases/archived/aspirational/v1.0.0/business_viability_discovery_plan.md +0 -135
  503. package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-100_compliance.md +0 -23
  504. package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-101_compliance.md +0 -23
  505. package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-102_compliance.md +0 -23
  506. package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-103_compliance.md +0 -23
  507. package/docs/releases/archived/aspirational/v1.0.0/compliance_reports/FU-105_compliance.md +0 -23
  508. package/docs/releases/archived/aspirational/v1.0.0/continuous_discovery_log.md +0 -77
  509. package/docs/releases/archived/aspirational/v1.0.0/continuous_discovery_plan.md +0 -145
  510. package/docs/releases/archived/aspirational/v1.0.0/cross_platform_signal_detection.md +0 -181
  511. package/docs/releases/archived/aspirational/v1.0.0/deployment_strategy.md +0 -115
  512. package/docs/releases/archived/aspirational/v1.0.0/discovery_checklist.md +0 -195
  513. package/docs/releases/archived/aspirational/v1.0.0/discovery_filtering_criteria.md +0 -197
  514. package/docs/releases/archived/aspirational/v1.0.0/discovery_filtering_keywords.md +0 -143
  515. package/docs/releases/archived/aspirational/v1.0.0/discovery_lead_sourcing_tools.md +0 -438
  516. package/docs/releases/archived/aspirational/v1.0.0/discovery_plan.md +0 -185
  517. package/docs/releases/archived/aspirational/v1.0.0/execution_schedule.md +0 -130
  518. package/docs/releases/archived/aspirational/v1.0.0/feasibility_validation_plan.md +0 -116
  519. package/docs/releases/archived/aspirational/v1.0.0/handle_registration.md +0 -263
  520. package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-100_implementation_log.md +0 -51
  521. package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-101_implementation_log.md +0 -51
  522. package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-102_implementation_log.md +0 -51
  523. package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-103_implementation_log.md +0 -51
  524. package/docs/releases/archived/aspirational/v1.0.0/implementation_logs/FU-105_implementation_log.md +0 -51
  525. package/docs/releases/archived/aspirational/v1.0.0/manifest.yaml +0 -160
  526. package/docs/releases/archived/aspirational/v1.0.0/marketing_agent_instructions.md +0 -209
  527. package/docs/releases/archived/aspirational/v1.0.0/marketing_automation_implementation.md +0 -996
  528. package/docs/releases/archived/aspirational/v1.0.0/marketing_automation_plan.md +0 -291
  529. package/docs/releases/archived/aspirational/v1.0.0/marketing_dogfooding_analysis.md +0 -295
  530. package/docs/releases/archived/aspirational/v1.0.0/marketing_metrics_plan.md +0 -120
  531. package/docs/releases/archived/aspirational/v1.0.0/marketing_plan.md +0 -280
  532. package/docs/releases/archived/aspirational/v1.0.0/marketing_segments_plan.md +0 -128
  533. package/docs/releases/archived/aspirational/v1.0.0/participant_recruitment_log.md +0 -392
  534. package/docs/releases/archived/aspirational/v1.0.0/post_launch_marketing_plan.md +0 -252
  535. package/docs/releases/archived/aspirational/v1.0.0/pre_launch_marketing_plan.md +0 -748
  536. package/docs/releases/archived/aspirational/v1.0.0/pre_mortem.md +0 -122
  537. package/docs/releases/archived/aspirational/v1.0.0/subscription_detection_strategy.md +0 -160
  538. package/docs/releases/archived/aspirational/v1.0.0/usability_discovery_plan.md +0 -115
  539. package/docs/releases/archived/aspirational/v1.0.0/value_discovery_plan.md +0 -279
  540. package/docs/releases/archived/aspirational/v1.0.0/visibility_timing_analysis.md +0 -402
  541. package/docs/releases/archived/aspirational/v2.0.0/status.md +0 -120
  542. package/docs/releases/archived/aspirational/v2.1.0/manifest.yaml +0 -469
  543. package/docs/releases/archived/aspirational/v2.2.0/manifest.yaml +0 -165
  544. package/docs/releases/archived/aspirational/v2.2.0/status.md +0 -283
  545. package/docs/releases/compliance_reports/all_fus_compliance_summary.md +0 -112
  546. package/docs/releases/in_progress/v0.2.0/agent_status.json +0 -420
  547. package/docs/releases/in_progress/v0.2.0/status.md +0 -90
  548. package/docs/releases/v0.1.0/agent_status.json +0 -242
  549. package/docs/releases/v0.1.0/agent_status.json.example +0 -76
  550. package/docs/releases/v0.1.0/compliance_reports/FU-000_compliance.md +0 -23
  551. package/docs/releases/v0.1.0/compliance_reports/FU-002_compliance.md +0 -23
  552. package/docs/releases/v0.1.0/compliance_reports/FU-050_compliance.md +0 -59
  553. package/docs/releases/v0.1.0/compliance_reports/FU-051_compliance.md +0 -39
  554. package/docs/releases/v0.1.0/compliance_reports/FU-052_compliance.md +0 -44
  555. package/docs/releases/v0.1.0/compliance_reports/FU-053_compliance.md +0 -25
  556. package/docs/releases/v0.1.0/compliance_reports/FU-054_compliance.md +0 -31
  557. package/docs/releases/v0.1.0/compliance_reports/FU-055_compliance.md +0 -23
  558. package/docs/releases/v0.1.0/compliance_reports/FU-056_compliance.md +0 -23
  559. package/docs/releases/v0.1.0/compliance_reports/FU-057_compliance.md +0 -23
  560. package/docs/releases/v0.1.0/compliance_reports/FU-058_compliance.md +0 -23
  561. package/docs/releases/v0.1.0/compliance_reports/FU-059_compliance.md +0 -23
  562. package/docs/releases/v0.1.0/compliance_reports/FU-061_compliance.md +0 -23
  563. package/docs/releases/v0.1.0/compliance_reports/FU-100_compliance.md +0 -97
  564. package/docs/releases/v0.1.0/compliance_reports/FU-104_compliance.md +0 -23
  565. package/docs/releases/v0.1.0/compliance_reports/FU-200_compliance.md +0 -23
  566. package/docs/releases/v0.1.0/compliance_reports/FU-201_compliance.md +0 -23
  567. package/docs/releases/v0.1.0/compliance_reports/FU-202_compliance.md +0 -23
  568. package/docs/releases/v0.1.0/compliance_reports/FU-203_compliance.md +0 -23
  569. package/docs/releases/v0.1.0/compliance_reports/FU-204_compliance.md +0 -23
  570. package/docs/releases/v0.1.0/compliance_reports/FU-205_compliance.md +0 -23
  571. package/docs/releases/v0.1.0/compliance_reports/FU-206_compliance.md +0 -23
  572. package/docs/releases/v0.1.0/execution_schedule.md +0 -174
  573. package/docs/releases/v0.1.0/fu_spec_status.md +0 -83
  574. package/docs/releases/v0.1.0/implementation_logs/FU-000_implementation_log.md +0 -51
  575. package/docs/releases/v0.1.0/implementation_logs/FU-002_implementation_log.md +0 -51
  576. package/docs/releases/v0.1.0/implementation_logs/FU-050_implementation_log.md +0 -111
  577. package/docs/releases/v0.1.0/implementation_logs/FU-051_implementation_log.md +0 -91
  578. package/docs/releases/v0.1.0/implementation_logs/FU-052_implementation_log.md +0 -81
  579. package/docs/releases/v0.1.0/implementation_logs/FU-053_implementation_log.md +0 -71
  580. package/docs/releases/v0.1.0/implementation_logs/FU-054_implementation_log.md +0 -71
  581. package/docs/releases/v0.1.0/implementation_logs/FU-055_implementation_log.md +0 -51
  582. package/docs/releases/v0.1.0/implementation_logs/FU-056_implementation_log.md +0 -51
  583. package/docs/releases/v0.1.0/implementation_logs/FU-057_implementation_log.md +0 -51
  584. package/docs/releases/v0.1.0/implementation_logs/FU-058_implementation_log.md +0 -51
  585. package/docs/releases/v0.1.0/implementation_logs/FU-059_implementation_log.md +0 -51
  586. package/docs/releases/v0.1.0/implementation_logs/FU-061_implementation_log.md +0 -51
  587. package/docs/releases/v0.1.0/implementation_logs/FU-100_implementation_log.md +0 -251
  588. package/docs/releases/v0.1.0/implementation_logs/FU-104_implementation_log.md +0 -51
  589. package/docs/releases/v0.1.0/implementation_logs/FU-200_implementation_log.md +0 -51
  590. package/docs/releases/v0.1.0/implementation_logs/FU-201_implementation_log.md +0 -51
  591. package/docs/releases/v0.1.0/implementation_logs/FU-202_implementation_log.md +0 -51
  592. package/docs/releases/v0.1.0/implementation_logs/FU-203_implementation_log.md +0 -51
  593. package/docs/releases/v0.1.0/implementation_logs/FU-204_implementation_log.md +0 -51
  594. package/docs/releases/v0.1.0/implementation_logs/FU-205_implementation_log.md +0 -51
  595. package/docs/releases/v0.1.0/implementation_logs/FU-206_implementation_log.md +0 -51
  596. package/docs/releases/v0.1.0/integration_tests.md +0 -316
  597. package/docs/releases/v0.1.0/manifest.yaml +0 -291
  598. package/docs/releases/v0.1.0/mcp_actions_status.md +0 -101
  599. package/docs/releases/v0.1.0/release_plan.md +0 -196
  600. package/docs/releases/v0.1.0/status.md +0 -148
  601. package/docs/releases/v0.1.0/test_coverage_setup_notes.md +0 -39
  602. package/docs/releases/v0.1.1/manifest.yaml +0 -153
  603. package/docs/releases/v0.2.0/status.md +0 -167
  604. package/docs/releases/v0.2.1/acceptance_criteria.md +0 -200
  605. package/docs/releases/v0.2.1/execution_schedule.md +0 -114
  606. package/docs/releases/v0.2.1/feature_unit_overview.md +0 -246
  607. package/docs/releases/v0.2.1/integration_tests.md +0 -281
  608. package/docs/releases/v0.2.1/manifest.yaml +0 -141
  609. package/docs/releases/v0.2.1/release_plan.md +0 -211
  610. package/docs/releases/v0.2.1/status.md +0 -106
  611. package/docs/releases/v0.2.15/README.md +0 -79
  612. package/docs/releases/v0.2.15/migrations/01_add_source_graph_edges.sql +0 -109
  613. package/docs/releases/v0.2.15/migrations/02_drop_legacy_tables.sql +0 -130
  614. package/docs/releases/v0.2.2/execution_schedule.md +0 -123
  615. package/docs/releases/v0.2.2/integration_tests.md +0 -258
  616. package/docs/releases/v0.2.2/manifest.yaml +0 -108
  617. package/docs/releases/v0.2.2/release_plan.md +0 -246
  618. package/docs/releases/v0.2.2/status.md +0 -113
  619. package/docs/releases/v0.2.3/agent_skills_alignment.md +0 -738
  620. package/docs/releases/v0.2.3/enhancements_summary.md +0 -309
  621. package/docs/releases/v0.2.3/integration_guide.md +0 -3400
  622. package/docs/releases/v0.2.3/manifest.yaml +0 -212
  623. package/docs/releases/v0.2.3/mcp_actions.md +0 -491
  624. package/docs/releases/v0.2.3/plan_completion_review.md +0 -410
  625. package/docs/releases/v0.2.3/release_overview.md +0 -13
  626. package/docs/releases/v0.2.3/schema_extensions/agent_decision.md +0 -311
  627. package/docs/releases/v0.2.3/schema_extensions/agent_session.md +0 -464
  628. package/docs/releases/v0.2.3/schema_extensions/architectural_decision.md +0 -390
  629. package/docs/releases/v0.2.3/schema_extensions/codebase_entity.md +0 -404
  630. package/docs/releases/v0.2.3/schema_extensions/feature_unit.md +0 -307
  631. package/docs/releases/v0.2.3/schema_extensions/release.md +0 -338
  632. package/docs/releases/v0.2.3/schema_extensions/validation_result.md +0 -377
  633. package/docs/releases/v0.2.3/spec.md +0 -569
  634. package/docs/releases/v0.3.0/manifest.yaml +0 -77
  635. package/docs/releases/v0.3.0/migrations/01_add_source_graph_edges.sql +0 -110
  636. package/docs/releases/v0.3.0/migrations/02_drop_legacy_tables.sql +0 -131
  637. package/docs/releases/v0.3.0/status.md +0 -193
  638. package/docs/reports/AUTO_ENHANCEMENT_TEST_RESULTS.md +0 -51
  639. package/docs/reports/AUTO_ENHANCEMENT_TEST_SUMMARY.md +0 -64
  640. package/docs/reports/BIGINT_SERIALIZATION_DEBUG.md +0 -75
  641. package/docs/reports/BUG_LEARNING_PROTOCOL_ESTABLISHED.md +0 -179
  642. package/docs/reports/CONSOLE_LOG_MCP_PROTOCOL_FIX.md +0 -58
  643. package/docs/reports/CRYPTO_TRANSACTION_DISCREPANCY_RESOLUTION.md +0 -108
  644. package/docs/reports/CRYPTO_TRANSACTION_SIDE_BY_SIDE_COMPARISON.md +0 -165
  645. package/docs/reports/FAILING_TESTS_ANALYSIS.md +0 -140
  646. package/docs/reports/FAILING_TESTS_SUMMARY.md +0 -106
  647. package/docs/reports/FINAL_PARQUET_COMPARISON.md +0 -226
  648. package/docs/reports/FINAL_TEST_STATUS.md +0 -145
  649. package/docs/reports/LEGACY_REMOVAL_SUMMARY.md +0 -108
  650. package/docs/reports/MCP_ACTIONS_SUMMARY.md +0 -329
  651. package/docs/reports/MCP_ACTION_TEST_COVERAGE.md +0 -132
  652. package/docs/reports/MCP_SPEC_COMPARISON.md +0 -306
  653. package/docs/reports/MCP_SPEC_COMPARISON_UPDATED.md +0 -247
  654. package/docs/reports/MCP_SPEC_VOCABULARY_CONFORMANCE.md +0 -220
  655. package/docs/reports/MCP_TEST_SUITE_IMPLEMENTATION.md +0 -180
  656. package/docs/reports/MCP_TEST_SUITE_RESULTS.md +0 -182
  657. package/docs/reports/PARQUET_MCP_BUG_REPORT.md +0 -70
  658. package/docs/reports/PARQUET_MCP_STORAGE_COMPLETE.md +0 -214
  659. package/docs/reports/PARQUET_SAMPLE_FILES_CREATED.md +0 -49
  660. package/docs/reports/PARQUET_STORAGE_SUCCESS.md +0 -263
  661. package/docs/reports/PARQUET_VS_NEOTOMA_COMPARISON.md +0 -241
  662. package/docs/reports/REIMPORT_TASKS_BLOCKER.md +0 -50
  663. package/docs/reports/SAMPLE_FILE_STRUCTURE_UPDATE.md +0 -68
  664. package/docs/reports/SAMPLE_PARQUET_IMPORT_TEST_RESULTS.md +0 -91
  665. package/docs/reports/SCHEMA_ENHANCEMENT_STATUS.md +0 -84
  666. package/docs/reports/SCHEMA_ENHANCEMENT_TEST_RESULTS.md +0 -78
  667. package/docs/reports/TASK_RELOAD_BLOCKER.md +0 -40
  668. package/docs/reports/TEST_FIXES_SUMMARY.md +0 -96
  669. package/docs/reports/VOCABULARY_CONFORMANCE_REVIEW.md +0 -177
  670. package/docs/reports/WHY_TESTS_MISSED_BIGINT_ISSUE.md +0 -144
  671. package/docs/reports/beyond_rag_agent_memory_neotoma_architecture_report.md +0 -103
  672. package/docs/reports/dhh_clankers_with_claws_neotoma_report.md +0 -102
  673. package/docs/reports/dr_cintas_pageindex_structure_over_embeddings_report.md +0 -77
  674. package/docs/reports/failure_gallery.md +0 -97
  675. package/docs/reports/fixture_expansion_summary.md +0 -204
  676. package/docs/reports/mcp_action_names_review.md +0 -131
  677. package/docs/reports/mcp_cli_action_items_fidelity_report.md +0 -189
  678. package/docs/reports/neotoma_pdf_interpreted_as_note_investigation_2026_02_23.md +0 -89
  679. package/docs/reports/plan_execution_changes_report.md +0 -122
  680. package/docs/reports/schema_distinctions.md +0 -210
  681. package/docs/reports/schema_redundancy_analysis.md +0 -304
  682. package/docs/specs/FUNCTIONAL_REQUIREMENTS.md +0 -160
  683. package/docs/specs/GENERAL_REQUIREMENTS.md +0 -30
  684. package/docs/specs/ICP_PRIORITY_TIERS.md +0 -132
  685. package/docs/specs/ICP_PROFILES.md +0 -2345
  686. package/docs/specs/INTERNAL_MCP_RELEASE.md +0 -300
  687. package/docs/specs/MANIFEST_ALIGNMENT_SUMMARY.md +0 -162
  688. package/docs/specs/MCP_SPEC.md +0 -2275
  689. package/docs/specs/METRICS_REQUIREMENTS.md +0 -386
  690. package/docs/specs/MVP_EXECUTION_PLAN.md +0 -956
  691. package/docs/specs/MVP_FEATURE_UNITS.md +0 -1821
  692. package/docs/specs/MVP_OVERVIEW.md +0 -184
  693. package/docs/specs/NONFUNCTIONAL_REQUIREMENTS.md +0 -98
  694. package/docs/specs/ONBOARDING_SPEC.md +0 -591
  695. package/docs/specs/PARQUET_MCP_RESOURCES_SPEC.md +0 -328
  696. package/docs/specs/TEST_PLAN.md +0 -116
  697. package/docs/specs/UI_SPEC.md +0 -93
  698. package/docs/subsystems/accessibility.md +0 -48
  699. package/docs/subsystems/auth.md +0 -170
  700. package/docs/subsystems/deletion.md +0 -494
  701. package/docs/subsystems/entity_merge.md +0 -300
  702. package/docs/subsystems/errors.md +0 -82
  703. package/docs/subsystems/events.md +0 -50
  704. package/docs/subsystems/i18n.md +0 -42
  705. package/docs/subsystems/ingestion/ingestion.md +0 -772
  706. package/docs/subsystems/ingestion/state_machines.md +0 -49
  707. package/docs/subsystems/observation_architecture.md +0 -379
  708. package/docs/subsystems/privacy.md +0 -71
  709. package/docs/subsystems/record_types.md +0 -753
  710. package/docs/subsystems/reducer.md +0 -436
  711. package/docs/subsystems/relationships.md +0 -455
  712. package/docs/subsystems/schema.md +0 -1213
  713. package/docs/subsystems/schema_registry.md +0 -588
  714. package/docs/subsystems/schema_snapshots/.gitkeep +0 -6
  715. package/docs/subsystems/schema_snapshots/README.md +0 -209
  716. package/docs/subsystems/schema_snapshots/account/v1.0.json +0 -52
  717. package/docs/subsystems/schema_snapshots/address/v1.0.json +0 -79
  718. package/docs/subsystems/schema_snapshots/agent_message/v1.0.json +0 -96
  719. package/docs/subsystems/schema_snapshots/balance/v1.0.json +0 -64
  720. package/docs/subsystems/schema_snapshots/company/v1.0.json +0 -86
  721. package/docs/subsystems/schema_snapshots/contact/v1.0.json +0 -68
  722. package/docs/subsystems/schema_snapshots/contact/v1.1.json +0 -112
  723. package/docs/subsystems/schema_snapshots/contract/v1.0.json +0 -48
  724. package/docs/subsystems/schema_snapshots/conversation/v1.0.json +0 -102
  725. package/docs/subsystems/schema_snapshots/crypto_transaction/v1.0.json +0 -76
  726. package/docs/subsystems/schema_snapshots/email/v1.0.json +0 -87
  727. package/docs/subsystems/schema_snapshots/event/v1.0.json +0 -79
  728. package/docs/subsystems/schema_snapshots/exercise/v1.0.json +0 -72
  729. package/docs/subsystems/schema_snapshots/fixed_cost/v1.0.json +0 -112
  730. package/docs/subsystems/schema_snapshots/flow/v1.0.json +0 -84
  731. package/docs/subsystems/schema_snapshots/goal/v1.0.json +0 -71
  732. package/docs/subsystems/schema_snapshots/holding/v1.0.json +0 -75
  733. package/docs/subsystems/schema_snapshots/income/v1.0.json +0 -68
  734. package/docs/subsystems/schema_snapshots/liability/v1.0.json +0 -60
  735. package/docs/subsystems/schema_snapshots/location/v1.0.json +0 -79
  736. package/docs/subsystems/schema_snapshots/meal/v1.0.json +0 -68
  737. package/docs/subsystems/schema_snapshots/message/v1.0.json +0 -72
  738. package/docs/subsystems/schema_snapshots/note/v1.0.json +0 -64
  739. package/docs/subsystems/schema_snapshots/order/v1.0.json +0 -72
  740. package/docs/subsystems/schema_snapshots/person/v1.0.json +0 -86
  741. package/docs/subsystems/schema_snapshots/project/v1.0.json +0 -75
  742. package/docs/subsystems/schema_snapshots/property/v1.0.json +0 -64
  743. package/docs/subsystems/schema_snapshots/purchase/v1.0.json +0 -75
  744. package/docs/subsystems/schema_snapshots/relationship/v1.0.json +0 -63
  745. package/docs/subsystems/schema_snapshots/task/v1.0.json +0 -91
  746. package/docs/subsystems/schema_snapshots/tax_event/v1.0.json +0 -72
  747. package/docs/subsystems/schema_snapshots/tax_filing/v1.0.json +0 -83
  748. package/docs/subsystems/schema_snapshots/transaction/v1.0.json +0 -40
  749. package/docs/subsystems/schema_snapshots/transfer/v1.0.json +0 -76
  750. package/docs/subsystems/schema_snapshots/wallet/v1.0.json +0 -68
  751. package/docs/subsystems/search/search.md +0 -63
  752. package/docs/subsystems/sources.md +0 -493
  753. package/docs/subsystems/vector_ops.md +0 -72
  754. package/docs/templates/issue_template.md +0 -36
  755. package/docs/templates/pr_template.md +0 -74
  756. package/docs/testing/ROUTE_COVERAGE_MATRIX.md +0 -104
  757. package/docs/testing/WHY_PARTIAL_ROUTE_COVERAGE.md +0 -183
  758. package/docs/testing/automated_test_catalog.md +0 -353
  759. package/docs/testing/cli_command_coverage_review.md +0 -130
  760. package/docs/testing/fixtures_standard.md +0 -202
  761. package/docs/testing/test_coverage_audit_summary.md +0 -571
  762. package/docs/testing/testing_standard.md +0 -146
  763. package/docs/ui/DESIGN_SYSTEM_UPDATE_SUMMARY.md +0 -152
  764. package/docs/ui/SHADCN_INTEGRATION_COMPLETE.md +0 -255
  765. package/docs/ui/design_constraints_template.yaml +0 -228
  766. package/docs/ui/design_system/accessibility.md +0 -38
  767. package/docs/ui/design_system/authentication_components.md +0 -38
  768. package/docs/ui/design_system/billing_components.md +0 -36
  769. package/docs/ui/design_system/brand_alignment.md +0 -35
  770. package/docs/ui/design_system/color_palette.md +0 -95
  771. package/docs/ui/design_system/component_styles.md +0 -241
  772. package/docs/ui/design_system/dark_mode.md +0 -30
  773. package/docs/ui/design_system/empty_states.md +0 -47
  774. package/docs/ui/design_system/error_states.md +0 -35
  775. package/docs/ui/design_system/file_upload_components.md +0 -60
  776. package/docs/ui/design_system/future_considerations.md +0 -19
  777. package/docs/ui/design_system/iconography.md +0 -21
  778. package/docs/ui/design_system/icp_aesthetic_analysis.md +0 -35
  779. package/docs/ui/design_system/icp_preference_alignment.md +0 -33
  780. package/docs/ui/design_system/implementation_notes.md +0 -119
  781. package/docs/ui/design_system/loading_states.md +0 -40
  782. package/docs/ui/design_system/motion_and_animation.md +0 -45
  783. package/docs/ui/design_system/navigation_components.md +0 -63
  784. package/docs/ui/design_system/onboarding_components.md +0 -48
  785. package/docs/ui/design_system/responsive_design.md +0 -26
  786. package/docs/ui/design_system/search_components.md +0 -32
  787. package/docs/ui/design_system/settings_components.md +0 -29
  788. package/docs/ui/design_system/spacing_and_layout.md +0 -67
  789. package/docs/ui/design_system/style_guide.md +0 -395
  790. package/docs/ui/design_system/typography.md +0 -88
  791. package/docs/ui/design_system/visual_hierarchy.md +0 -64
  792. package/docs/ui/design_system.md +0 -124
  793. package/docs/ui/dsl_spec.md +0 -97
  794. package/docs/ui/patterns/dashboard.md +0 -58
  795. package/docs/ui/patterns/detail.md +0 -68
  796. package/docs/ui/patterns/list.md +0 -72
  797. package/docs/ui/patterns/navigation.md +0 -314
  798. package/docs/ui/patterns/settings.md +0 -52
  799. package/docs/ui/patterns/wizard.md +0 -53
  800. package/docs/ui/prototype_guide.md +0 -300
  801. package/docs/ui/shadcn_components.md +0 -189
  802. package/docs/ui/style_guide_updates.md +0 -74
  803. package/docs/vocabulary/canonical_terms.md +0 -318
  804. package/fly.toml +0 -29
  805. package/foundation/.cursor/rules/agent_constraints.mdc +0 -198
  806. package/foundation/.cursor/rules/agent_test_execution.mdc +0 -356
  807. package/foundation/.cursor/rules/autonomous_execution.mdc +0 -117
  808. package/foundation/.cursor/rules/behavioral_self_adaptation.mdc +0 -531
  809. package/foundation/.cursor/rules/bug_fix_detection.mdc +0 -142
  810. package/foundation/.cursor/rules/checkpoint_management.mdc +0 -191
  811. package/foundation/.cursor/rules/configuration_management.mdc +0 -156
  812. package/foundation/.cursor/rules/content_style_enforcement.mdc +0 -138
  813. package/foundation/.cursor/rules/dependency_installation.mdc +0 -146
  814. package/foundation/.cursor/rules/document_loading_order.mdc +0 -194
  815. package/foundation/.cursor/rules/documentation_rules.mdc +0 -166
  816. package/foundation/.cursor/rules/downstream_doc_updates.mdc +0 -266
  817. package/foundation/.cursor/rules/environment_variables_1password.mdc +0 -307
  818. package/foundation/.cursor/rules/environment_variables_env_file.mdc +0 -121
  819. package/foundation/.cursor/rules/feature_unit_detection.mdc +0 -129
  820. package/foundation/.cursor/rules/file_naming.mdc +0 -31
  821. package/foundation/.cursor/rules/git_remote_sync.mdc +0 -240
  822. package/foundation/.cursor/rules/instruction_documentation.mdc +0 -302
  823. package/foundation/.cursor/rules/native_browser_debugging.mdc +0 -65
  824. package/foundation/.cursor/rules/plan_execution_testing.mdc +0 -98
  825. package/foundation/.cursor/rules/post_build_testing.mdc +0 -159
  826. package/foundation/.cursor/rules/prefer_cli_tools.mdc +0 -234
  827. package/foundation/.cursor/rules/readme_maintenance.mdc +0 -153
  828. package/foundation/.cursor/rules/release_detection.mdc +0 -92
  829. package/foundation/.cursor/rules/release_status_readme_update.mdc +0 -64
  830. package/foundation/.cursor/rules/risk_management.mdc +0 -167
  831. package/foundation/.cursor/rules/security.mdc +0 -158
  832. package/foundation/.cursor/rules/test_first_workflow.mdc +0 -341
  833. package/foundation/.cursor/rules/worktree_env.mdc +0 -53
  834. package/foundation/.cursor/skills/analyze/SKILL.md +0 -566
  835. package/foundation/.cursor/skills/commit/SKILL.md +0 -782
  836. package/foundation/.cursor/skills/create-feature-unit/SKILL.md +0 -180
  837. package/foundation/.cursor/skills/create-prototype/SKILL.md +0 -91
  838. package/foundation/.cursor/skills/create-release/SKILL.md +0 -432
  839. package/foundation/.cursor/skills/create-rule/SKILL.md +0 -292
  840. package/foundation/.cursor/skills/debug/SKILL.md +0 -980
  841. package/foundation/.cursor/skills/final-review/SKILL.md +0 -93
  842. package/foundation/.cursor/skills/fix-feature-bug/SKILL.md +0 -100
  843. package/foundation/.cursor/skills/manage-error-debugging/SKILL.md +0 -182
  844. package/foundation/.cursor/skills/publish/SKILL.md +0 -554
  845. package/foundation/.cursor/skills/pull/SKILL.md +0 -315
  846. package/foundation/.cursor/skills/push/SKILL.md +0 -254
  847. package/foundation/.cursor/skills/report/SKILL.md +0 -1501
  848. package/foundation/.cursor/skills/report-error/SKILL.md +0 -1501
  849. package/foundation/.cursor/skills/run-feature-workflow/SKILL.md +0 -79
  850. package/foundation/.cursor/skills/setup-commands/SKILL.md +0 -28
  851. package/foundation/.cursor/skills/setup-cursor-copies/SKILL.md +0 -233
  852. package/foundation/.cursor/skills/sync-env-from-1password/SKILL.md +0 -302
  853. package/foundation/CONTRIBUTING.md +0 -202
  854. package/foundation/LICENSE +0 -22
  855. package/foundation/MIGRATION.md +0 -396
  856. package/foundation/README.md +0 -391
  857. package/foundation/agent_instructions/README.md +0 -559
  858. package/foundation/config/foundation-config.yaml +0 -498
  859. package/foundation/config/foundation_config.yaml +0 -475
  860. package/foundation/config/repo_adapters/personal.yaml +0 -40
  861. package/foundation/config/repo_adapters/template.yaml +0 -45
  862. package/foundation/conventions/code_conventions.md +0 -908
  863. package/foundation/conventions/documentation_standards.md +0 -459
  864. package/foundation/conventions/naming_patterns.yaml +0 -139
  865. package/foundation/conventions/testing_conventions.md +0 -374
  866. package/foundation/conventions/writing_style_guide.md +0 -221
  867. package/foundation/development/branch_strategy.md +0 -266
  868. package/foundation/development/feature_unit_workflow.md +0 -423
  869. package/foundation/development/pr_process.md +0 -385
  870. package/foundation/development/release_workflow.md +0 -2296
  871. package/foundation/development/templates/feature_unit_spec_template.md +0 -312
  872. package/foundation/development/templates/manifest_template_extended.yaml +0 -303
  873. package/foundation/development/templates/manifest_template_simple.yaml +0 -148
  874. package/foundation/development/workflow.md +0 -509
  875. package/foundation/development/worktree_setup.sh +0 -207
  876. package/foundation/scripts/README.md +0 -230
  877. package/foundation/scripts/__pycache__/op_sync_env_from_1password.cpython-314.pyc +0 -0
  878. package/foundation/scripts/install-foundation.sh +0 -232
  879. package/foundation/scripts/install_foundation.sh +0 -232
  880. package/foundation/scripts/op_sync_env_from_1password.py +0 -1007
  881. package/foundation/scripts/report_error_create_dirs.sh +0 -14
  882. package/foundation/scripts/report_error_generate_id.sh +0 -10
  883. package/foundation/scripts/report_error_update_queue.sh +0 -24
  884. package/foundation/scripts/report_error_validate_target.sh +0 -34
  885. package/foundation/scripts/report_error_wait_resolution.sh +0 -69
  886. package/foundation/scripts/validate_setup.sh +0 -147
  887. package/foundation/security/credential_management.md +0 -263
  888. package/foundation/security/pre_commit_audit.sh +0 -78
  889. package/foundation/security/security_rules.md +0 -163
  890. package/foundation/strategy/README.md +0 -279
  891. package/foundation/strategy/competitive_analysis_template.md +0 -271
  892. package/foundation/strategy/partnership_analysis_template.md +0 -423
  893. package/foundation/strategy/project_assessment_framework.md +0 -485
  894. package/foundation/strategy/relevance_analysis_template.md +0 -297
  895. package/foundation/tooling/README.md +0 -198
  896. package/foundation/validation/README.md +0 -120
  897. package/foundation-config.yaml +0 -543
  898. package/frontend/docs.html +0 -43
  899. package/frontend/frontend/.vite-prototype/deps/@noble_curves_ed25519__js.js +0 -2859
  900. package/frontend/frontend/.vite-prototype/deps/@noble_curves_ed25519__js.js.map +0 -7
  901. package/frontend/frontend/.vite-prototype/deps/@noble_hashes_utils__js.js +0 -62
  902. package/frontend/frontend/.vite-prototype/deps/@noble_hashes_utils__js.js.map +0 -7
  903. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-dialog.js +0 -464
  904. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-dialog.js.map +0 -7
  905. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-dropdown-menu.js +0 -1488
  906. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-dropdown-menu.js.map +0 -7
  907. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-label.js +0 -84
  908. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-label.js.map +0 -7
  909. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-scroll-area.js +0 -757
  910. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-scroll-area.js.map +0 -7
  911. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-select.js +0 -1351
  912. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-select.js.map +0 -7
  913. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-slot.js +0 -18
  914. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-slot.js.map +0 -7
  915. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-toast.js +0 -675
  916. package/frontend/frontend/.vite-prototype/deps/@radix-ui_react-toast.js.map +0 -7
  917. package/frontend/frontend/.vite-prototype/deps/@tanstack_react-table.js +0 -3254
  918. package/frontend/frontend/.vite-prototype/deps/@tanstack_react-table.js.map +0 -7
  919. package/frontend/frontend/.vite-prototype/deps/_metadata.json +0 -187
  920. package/frontend/frontend/.vite-prototype/deps/chunk-557GXNYU.js +0 -23
  921. package/frontend/frontend/.vite-prototype/deps/chunk-557GXNYU.js.map +0 -7
  922. package/frontend/frontend/.vite-prototype/deps/chunk-6FYWT56J.js.map +0 -7
  923. package/frontend/frontend/.vite-prototype/deps/chunk-C7HFWHWH.js +0 -271
  924. package/frontend/frontend/.vite-prototype/deps/chunk-C7HFWHWH.js.map +0 -7
  925. package/frontend/frontend/.vite-prototype/deps/chunk-CJDTXCAB.js +0 -49
  926. package/frontend/frontend/.vite-prototype/deps/chunk-CJDTXCAB.js.map +0 -7
  927. package/frontend/frontend/.vite-prototype/deps/chunk-DC5AMYBS.js +0 -39
  928. package/frontend/frontend/.vite-prototype/deps/chunk-DC5AMYBS.js.map +0 -7
  929. package/frontend/frontend/.vite-prototype/deps/chunk-F4FBYZZO.js +0 -2258
  930. package/frontend/frontend/.vite-prototype/deps/chunk-F4FBYZZO.js.map +0 -7
  931. package/frontend/frontend/.vite-prototype/deps/chunk-GIBJ3MQP.js +0 -129
  932. package/frontend/frontend/.vite-prototype/deps/chunk-GIBJ3MQP.js.map +0 -7
  933. package/frontend/frontend/.vite-prototype/deps/chunk-IMIZXM4S.js +0 -218
  934. package/frontend/frontend/.vite-prototype/deps/chunk-IMIZXM4S.js.map +0 -7
  935. package/frontend/frontend/.vite-prototype/deps/chunk-K236IVZX.js +0 -21628
  936. package/frontend/frontend/.vite-prototype/deps/chunk-K236IVZX.js.map +0 -7
  937. package/frontend/frontend/.vite-prototype/deps/chunk-LPO6FEV6.js +0 -21
  938. package/frontend/frontend/.vite-prototype/deps/chunk-LPO6FEV6.js.map +0 -7
  939. package/frontend/frontend/.vite-prototype/deps/chunk-PZJDTVNM.js +0 -144
  940. package/frontend/frontend/.vite-prototype/deps/chunk-PZJDTVNM.js.map +0 -7
  941. package/frontend/frontend/.vite-prototype/deps/chunk-RGYP7AMI.js +0 -1116
  942. package/frontend/frontend/.vite-prototype/deps/chunk-RGYP7AMI.js.map +0 -7
  943. package/frontend/frontend/.vite-prototype/deps/chunk-SMVRXQSC.js +0 -928
  944. package/frontend/frontend/.vite-prototype/deps/chunk-SMVRXQSC.js.map +0 -7
  945. package/frontend/frontend/.vite-prototype/deps/chunk-SPBFJIQZ.js +0 -49
  946. package/frontend/frontend/.vite-prototype/deps/chunk-SPBFJIQZ.js.map +0 -7
  947. package/frontend/frontend/.vite-prototype/deps/chunk-UQF5EARV.js +0 -9
  948. package/frontend/frontend/.vite-prototype/deps/chunk-UQF5EARV.js.map +0 -7
  949. package/frontend/frontend/.vite-prototype/deps/chunk-VEFHXNY4.js +0 -186
  950. package/frontend/frontend/.vite-prototype/deps/chunk-VEFHXNY4.js.map +0 -7
  951. package/frontend/frontend/.vite-prototype/deps/chunk-Z55WIHBM.js +0 -349
  952. package/frontend/frontend/.vite-prototype/deps/chunk-Z55WIHBM.js.map +0 -7
  953. package/frontend/frontend/.vite-prototype/deps/class-variance-authority.js +0 -51
  954. package/frontend/frontend/.vite-prototype/deps/class-variance-authority.js.map +0 -7
  955. package/frontend/frontend/.vite-prototype/deps/clsx.js +0 -10
  956. package/frontend/frontend/.vite-prototype/deps/clsx.js.map +0 -7
  957. package/frontend/frontend/.vite-prototype/deps/lucide-react.js +0 -31586
  958. package/frontend/frontend/.vite-prototype/deps/lucide-react.js.map +0 -7
  959. package/frontend/frontend/.vite-prototype/deps/package.json +0 -3
  960. package/frontend/frontend/.vite-prototype/deps/papaparse.js +0 -431
  961. package/frontend/frontend/.vite-prototype/deps/papaparse.js.map +0 -7
  962. package/frontend/frontend/.vite-prototype/deps/react-dom.js +0 -7
  963. package/frontend/frontend/.vite-prototype/deps/react-dom.js.map +0 -7
  964. package/frontend/frontend/.vite-prototype/deps/react-dom_client.js +0 -39
  965. package/frontend/frontend/.vite-prototype/deps/react-dom_client.js.map +0 -7
  966. package/frontend/frontend/.vite-prototype/deps/react.js +0 -6
  967. package/frontend/frontend/.vite-prototype/deps/react.js.map +0 -7
  968. package/frontend/frontend/.vite-prototype/deps/react_jsx-dev-runtime.js +0 -913
  969. package/frontend/frontend/.vite-prototype/deps/react_jsx-dev-runtime.js.map +0 -7
  970. package/frontend/frontend/.vite-prototype/deps/react_jsx-runtime.js +0 -7
  971. package/frontend/frontend/.vite-prototype/deps/react_jsx-runtime.js.map +0 -7
  972. package/frontend/frontend/.vite-prototype/deps/sonner.js +0 -1139
  973. package/frontend/frontend/.vite-prototype/deps/sonner.js.map +0 -7
  974. package/frontend/frontend/.vite-prototype/deps/tailwind-merge.js +0 -2534
  975. package/frontend/frontend/.vite-prototype/deps/tailwind-merge.js.map +0 -7
  976. package/frontend/index.html +0 -38
  977. package/frontend/src/App.tsx +0 -15
  978. package/frontend/src/bridge/discovery.ts +0 -126
  979. package/frontend/src/bridge/index.ts +0 -9
  980. package/frontend/src/bridge/mcp.ts +0 -85
  981. package/frontend/src/bridge/types.ts +0 -24
  982. package/frontend/src/bridge/websocket.ts +0 -349
  983. package/frontend/src/components/AIAgentBridge.tsx +0 -75
  984. package/frontend/src/components/AboutPage.tsx +0 -102
  985. package/frontend/src/components/AppNavigationSidebar.tsx +0 -181
  986. package/frontend/src/components/AppSidebar.tsx +0 -206
  987. package/frontend/src/components/AuthErrorHandler.tsx +0 -23
  988. package/frontend/src/components/Dashboard.tsx +0 -303
  989. package/frontend/src/components/DashboardPage.tsx +0 -78
  990. package/frontend/src/components/EmptyPlaceholder.tsx +0 -58
  991. package/frontend/src/components/EntityDetail.tsx +0 -801
  992. package/frontend/src/components/EntityList.tsx +0 -409
  993. package/frontend/src/components/ErrorBoundary.tsx +0 -131
  994. package/frontend/src/components/FileUploadView.tsx +0 -246
  995. package/frontend/src/components/FloatingSettingsButton.tsx +0 -46
  996. package/frontend/src/components/Header.tsx +0 -43
  997. package/frontend/src/components/IntegrationsPage.tsx +0 -46
  998. package/frontend/src/components/InterpretationList.tsx +0 -246
  999. package/frontend/src/components/KeyManagementDialog.tsx +0 -227
  1000. package/frontend/src/components/Layout.tsx +0 -67
  1001. package/frontend/src/components/MCPChatGPTPage.tsx +0 -128
  1002. package/frontend/src/components/MCPClaudePage.tsx +0 -112
  1003. package/frontend/src/components/MCPCodeiumPage.tsx +0 -100
  1004. package/frontend/src/components/MCPConfigurationPage.tsx +0 -624
  1005. package/frontend/src/components/MCPConnectionDialog.tsx +0 -177
  1006. package/frontend/src/components/MCPConnectionsList.tsx +0 -197
  1007. package/frontend/src/components/MCPContinuePage.tsx +0 -90
  1008. package/frontend/src/components/MCPCursorPage.tsx +0 -379
  1009. package/frontend/src/components/MCPGeminiPage.tsx +0 -102
  1010. package/frontend/src/components/MCPGitHubCopilotPage.tsx +0 -100
  1011. package/frontend/src/components/MCPGrokPage.tsx +0 -99
  1012. package/frontend/src/components/MCPJetBrainsPage.tsx +0 -107
  1013. package/frontend/src/components/MCPManusPage.tsx +0 -104
  1014. package/frontend/src/components/MCPSetupDialog.tsx +0 -268
  1015. package/frontend/src/components/MCPVSCodePage.tsx +0 -100
  1016. package/frontend/src/components/MCPWindsurfPage.tsx +0 -99
  1017. package/frontend/src/components/MainApp.tsx +0 -19
  1018. package/frontend/src/components/NotFound.tsx +0 -46
  1019. package/frontend/src/components/OAuthPage.tsx +0 -426
  1020. package/frontend/src/components/ObservationList.tsx +0 -277
  1021. package/frontend/src/components/ProtectedRoute.tsx +0 -38
  1022. package/frontend/src/components/QuickEntryPanel.tsx +0 -99
  1023. package/frontend/src/components/RealtimeStatusIndicator.tsx +0 -32
  1024. package/frontend/src/components/RecentActivityFeed.tsx +0 -198
  1025. package/frontend/src/components/RelationshipDetail.tsx +0 -232
  1026. package/frontend/src/components/RelationshipList.tsx +0 -269
  1027. package/frontend/src/components/SchemaDetail.test.tsx +0 -53
  1028. package/frontend/src/components/SchemaDetail.tsx +0 -230
  1029. package/frontend/src/components/SchemaList.tsx +0 -228
  1030. package/frontend/src/components/SearchResults.tsx +0 -318
  1031. package/frontend/src/components/SeoHead.tsx +0 -40
  1032. package/frontend/src/components/SitePage.tsx +0 -654
  1033. package/frontend/src/components/SourceDetail.tsx +0 -382
  1034. package/frontend/src/components/SourceTable.tsx +0 -243
  1035. package/frontend/src/components/StyleGuide.md +0 -48
  1036. package/frontend/src/components/StyleGuide.tsx +0 -2316
  1037. package/frontend/src/components/TimelineView.tsx +0 -321
  1038. package/frontend/src/components/UniversalSearch.tsx +0 -518
  1039. package/frontend/src/components/design-system/BadgesPage.tsx +0 -47
  1040. package/frontend/src/components/design-system/ButtonsPage.tsx +0 -67
  1041. package/frontend/src/components/design-system/CardsPage.tsx +0 -31
  1042. package/frontend/src/components/design-system/CollapsiblePage.tsx +0 -84
  1043. package/frontend/src/components/design-system/ColorsPage.tsx +0 -125
  1044. package/frontend/src/components/design-system/DesignSystemIndex.tsx +0 -73
  1045. package/frontend/src/components/design-system/DesignSystemLayout.tsx +0 -22
  1046. package/frontend/src/components/design-system/DesignSystemRouter.tsx +0 -43
  1047. package/frontend/src/components/design-system/InputsPage.tsx +0 -40
  1048. package/frontend/src/components/design-system/PageFormatsPage.tsx +0 -263
  1049. package/frontend/src/components/design-system/ProgressPage.tsx +0 -54
  1050. package/frontend/src/components/design-system/SkeletonPage.tsx +0 -68
  1051. package/frontend/src/components/design-system/SpacingPage.tsx +0 -45
  1052. package/frontend/src/components/design-system/StyleGuidePage.tsx +0 -313
  1053. package/frontend/src/components/design-system/SwitchPage.tsx +0 -60
  1054. package/frontend/src/components/design-system/TablesPage.tsx +0 -206
  1055. package/frontend/src/components/design-system/TabsPage.tsx +0 -88
  1056. package/frontend/src/components/design-system/TooltipPage.tsx +0 -94
  1057. package/frontend/src/components/design-system/TypographyPage.tsx +0 -81
  1058. package/frontend/src/components/icons/CursorIcon.tsx +0 -26
  1059. package/frontend/src/components/quick-entry/ContactDialog.tsx +0 -177
  1060. package/frontend/src/components/quick-entry/EventDialog.tsx +0 -204
  1061. package/frontend/src/components/quick-entry/TaskDialog.tsx +0 -204
  1062. package/frontend/src/components/quick-entry/TransactionDialog.tsx +0 -188
  1063. package/frontend/src/components/ui/alert.tsx +0 -59
  1064. package/frontend/src/components/ui/badge.tsx +0 -36
  1065. package/frontend/src/components/ui/breadcrumb.tsx +0 -120
  1066. package/frontend/src/components/ui/button.tsx +0 -56
  1067. package/frontend/src/components/ui/card.tsx +0 -68
  1068. package/frontend/src/components/ui/collapsible.tsx +0 -9
  1069. package/frontend/src/components/ui/dialog.tsx +0 -81
  1070. package/frontend/src/components/ui/dropdown-menu.tsx +0 -195
  1071. package/frontend/src/components/ui/input-group.tsx +0 -26
  1072. package/frontend/src/components/ui/input.tsx +0 -24
  1073. package/frontend/src/components/ui/label.tsx +0 -19
  1074. package/frontend/src/components/ui/progress.tsx +0 -26
  1075. package/frontend/src/components/ui/scroll-area.tsx +0 -35
  1076. package/frontend/src/components/ui/select.tsx +0 -173
  1077. package/frontend/src/components/ui/separator.tsx +0 -31
  1078. package/frontend/src/components/ui/sheet.tsx +0 -139
  1079. package/frontend/src/components/ui/sidebar.tsx +0 -851
  1080. package/frontend/src/components/ui/skeleton.tsx +0 -15
  1081. package/frontend/src/components/ui/switch.tsx +0 -35
  1082. package/frontend/src/components/ui/table-scroll-wrapper.tsx +0 -96
  1083. package/frontend/src/components/ui/table.tsx +0 -127
  1084. package/frontend/src/components/ui/tabs.tsx +0 -53
  1085. package/frontend/src/components/ui/textarea.tsx +0 -23
  1086. package/frontend/src/components/ui/toast.tsx +0 -122
  1087. package/frontend/src/components/ui/toaster.tsx +0 -32
  1088. package/frontend/src/components/ui/tooltip.tsx +0 -28
  1089. package/frontend/src/components/ui/use-toast.ts +0 -194
  1090. package/frontend/src/constants/integrations.ts +0 -51
  1091. package/frontend/src/contexts/AuthContext.tsx +0 -205
  1092. package/frontend/src/contexts/RealtimeContext.tsx +0 -119
  1093. package/frontend/src/docs/DocumentationApp.tsx +0 -104
  1094. package/frontend/src/docs/DocumentationDirectory.tsx +0 -159
  1095. package/frontend/src/docs/DocumentationLayout.tsx +0 -31
  1096. package/frontend/src/docs/DocumentationPage.tsx +0 -38
  1097. package/frontend/src/docs/DocumentationSidebar.tsx +0 -15
  1098. package/frontend/src/docs/MarkdownContent.tsx +0 -212
  1099. package/frontend/src/docs/README.md +0 -198
  1100. package/frontend/src/docs/main.tsx +0 -12
  1101. package/frontend/src/hooks/use-mobile.tsx +0 -19
  1102. package/frontend/src/hooks/useKeys.ts +0 -202
  1103. package/frontend/src/hooks/useMCPConfig.ts +0 -175
  1104. package/frontend/src/hooks/useRealtimeEntities.ts +0 -56
  1105. package/frontend/src/hooks/useRealtimeObservations.ts +0 -56
  1106. package/frontend/src/hooks/useRealtimeRelationships.ts +0 -56
  1107. package/frontend/src/hooks/useRealtimeSources.ts +0 -53
  1108. package/frontend/src/hooks/useRealtimeTimeline.ts +0 -53
  1109. package/frontend/src/hooks/useSettings.ts +0 -95
  1110. package/frontend/src/hooks/useStorageQuota.ts +0 -65
  1111. package/frontend/src/hooks/useTheme.tsx +0 -42
  1112. package/frontend/src/index.css +0 -247
  1113. package/frontend/src/lib/api_client.ts +0 -8
  1114. package/frontend/src/lib/auth.ts +0 -100
  1115. package/frontend/src/lib/idempotency.ts +0 -25
  1116. package/frontend/src/lib/utils.ts +0 -7
  1117. package/frontend/src/main.tsx +0 -40
  1118. package/frontend/src/sample-data/sets-medium.csv +0 -55
  1119. package/frontend/src/sample-data/sets-medium.ts +0 -45
  1120. package/frontend/src/shared/.eslintrc.json +0 -35
  1121. package/frontend/src/shared/.github/README.md +0 -55
  1122. package/frontend/src/shared/.github/workflows/ci.yml +0 -88
  1123. package/frontend/src/shared/.github/workflows/release.yml +0 -34
  1124. package/frontend/src/shared/.github/workflows/setup.yml +0 -56
  1125. package/frontend/src/shared/README.md +0 -163
  1126. package/frontend/src/shared/SETUP.md +0 -121
  1127. package/frontend/src/shared/components.json +0 -20
  1128. package/frontend/src/shared/package-lock.json +0 -4508
  1129. package/frontend/src/shared/package.json +0 -78
  1130. package/frontend/src/shared/src/components/AppSidebar.tsx +0 -77
  1131. package/frontend/src/shared/src/components/ErrorBoundary.tsx +0 -87
  1132. package/frontend/src/shared/src/components/Layout.tsx +0 -262
  1133. package/frontend/src/shared/src/components/ui/breadcrumb.tsx +0 -115
  1134. package/frontend/src/shared/src/components/ui/button.tsx +0 -56
  1135. package/frontend/src/shared/src/components/ui/calendar.tsx +0 -211
  1136. package/frontend/src/shared/src/components/ui/input.tsx +0 -22
  1137. package/frontend/src/shared/src/components/ui/popover.tsx +0 -29
  1138. package/frontend/src/shared/src/components/ui/separator.tsx +0 -29
  1139. package/frontend/src/shared/src/components/ui/sheet.tsx +0 -140
  1140. package/frontend/src/shared/src/components/ui/sidebar.tsx +0 -519
  1141. package/frontend/src/shared/src/components/ui/skeleton.tsx +0 -15
  1142. package/frontend/src/shared/src/components/ui/tooltip.tsx +0 -28
  1143. package/frontend/src/shared/src/hooks/use-mobile.tsx +0 -19
  1144. package/frontend/src/shared/src/index.css +0 -75
  1145. package/frontend/src/shared/src/index.ts +0 -34
  1146. package/frontend/src/shared/src/lib/utils.ts +0 -6
  1147. package/frontend/src/shared/tailwind.config.mjs +0 -67
  1148. package/frontend/src/shared/tsconfig.json +0 -29
  1149. package/frontend/src/site/seo_metadata.ts +0 -133
  1150. package/frontend/src/site/site_data.test.ts +0 -36
  1151. package/frontend/src/site/site_data.ts +0 -575
  1152. package/frontend/src/store/README.md +0 -10
  1153. package/frontend/src/utils/api_access.ts +0 -24
  1154. package/frontend/src/utils/csv.test.ts +0 -42
  1155. package/frontend/src/utils/csv.ts +0 -45
  1156. package/frontend/src/utils/csv_summary.ts +0 -139
  1157. package/frontend/src/utils/debounce.ts +0 -24
  1158. package/frontend/src/utils/entity_display.test.ts +0 -334
  1159. package/frontend/src/utils/entity_display.ts +0 -23
  1160. package/frontend/src/utils/entity_type_formatter.ts +0 -56
  1161. package/frontend/src/utils/error_utils.ts +0 -137
  1162. package/frontend/src/utils/property_keys.ts +0 -36
  1163. package/frontend/src/utils/schema_icons.test.ts +0 -59
  1164. package/frontend/src/utils/schema_icons.ts +0 -229
  1165. package/frontend/src/utils/time.ts +0 -37
  1166. package/frontend/src/vite-env.d.ts +0 -14
  1167. package/frontend/tsconfig.json +0 -27
  1168. package/frontend/tsconfig.node.json +0 -11
  1169. package/mcp/web-scraper/README.md +0 -475
  1170. package/mcp/web-scraper/SETUP.md +0 -150
  1171. package/mcp/web-scraper/__init__.py +0 -3
  1172. package/mcp/web-scraper/chatgpt_scraper_mcp_server.py +0 -435
  1173. package/mcp/web-scraper/create_repo.sh +0 -50
  1174. package/mcp/web-scraper/imports/spotify/playlist_3i0FY58V7n8XIUyWDm3AYA.json +0 -1052
  1175. package/mcp/web-scraper/nytimes_article.json +0 -7
  1176. package/mcp/web-scraper/plugins/__init__.py +0 -3
  1177. package/mcp/web-scraper/plugins/chatgpt_scraper.py +0 -105
  1178. package/mcp/web-scraper/plugins/metacast_scraper.py +0 -828
  1179. package/mcp/web-scraper/plugins/nyt_podcast_scraper.py +0 -538
  1180. package/mcp/web-scraper/plugins/spotify_scraper.py +0 -618
  1181. package/mcp/web-scraper/plugins/twitter_scraper.py +0 -576
  1182. package/mcp/web-scraper/plugins/url_body_fetcher.py +0 -172
  1183. package/mcp/web-scraper/pytest.ini +0 -11
  1184. package/mcp/web-scraper/requirements-test.txt +0 -6
  1185. package/mcp/web-scraper/requirements.txt +0 -6
  1186. package/mcp/web-scraper/run-web-scraper-mcp.sh +0 -38
  1187. package/mcp/web-scraper/scrape_spotify_playlist.py +0 -77
  1188. package/mcp/web-scraper/scraper.py +0 -819
  1189. package/mcp/web-scraper/scraper_base.py +0 -88
  1190. package/mcp/web-scraper/scraper_registry.py +0 -32
  1191. package/mcp/web-scraper/scripts/scrape_tweet_and_verify_referenced.py +0 -65
  1192. package/mcp/web-scraper/store_songs_to_parquet.py +0 -120
  1193. package/mcp/web-scraper/tests/__init__.py +0 -0
  1194. package/mcp/web-scraper/tests/conftest.py +0 -40
  1195. package/mcp/web-scraper/tests/integration/__init__.py +0 -0
  1196. package/mcp/web-scraper/tests/unit/__init__.py +0 -0
  1197. package/mcp/web-scraper/tests/unit/test_source_detection.py +0 -60
  1198. package/mcp/web-scraper/web_scraper_mcp_server.py +0 -639
  1199. package/openapi.yaml +0 -2071
  1200. package/playwright/fixtures/servers.ts +0 -180
  1201. package/playwright/global_setup.ts +0 -3
  1202. package/playwright/tests/auto-enhancement.spec.ts +0 -370
  1203. package/playwright/tests/coverage-map.json +0 -135
  1204. package/playwright/tests/design-system.spec.ts +0 -216
  1205. package/playwright/tests/entity-detail.spec.ts +0 -268
  1206. package/playwright/tests/entity-list.spec.ts +0 -266
  1207. package/playwright/tests/floating-settings-button.spec.ts +0 -95
  1208. package/playwright/tests/graph-integrity.spec.ts +0 -344
  1209. package/playwright/tests/helpers.ts +0 -560
  1210. package/playwright/tests/interpretations.spec.ts +0 -285
  1211. package/playwright/tests/mcp-configuration.spec.ts +0 -208
  1212. package/playwright/tests/mcp-relationships.spec.ts +0 -631
  1213. package/playwright/tests/mcp-store-retrieve.spec.ts +0 -288
  1214. package/playwright/tests/not-found.spec.ts +0 -30
  1215. package/playwright/tests/oauth-flow.spec.ts +0 -790
  1216. package/playwright/tests/observations.spec.ts +0 -295
  1217. package/playwright/tests/relationship-detail.spec.ts +0 -305
  1218. package/playwright/tests/relationships-list.spec.ts +0 -275
  1219. package/playwright/tests/schema-detail.spec.ts +0 -300
  1220. package/playwright/tests/schemas-list.spec.ts +0 -262
  1221. package/playwright/tests/search-flow.spec.ts +0 -216
  1222. package/playwright/tests/site-page.spec.ts +0 -23
  1223. package/playwright/tests/source-detail.spec.ts +0 -300
  1224. package/playwright/tests/sources-list.spec.ts +0 -254
  1225. package/playwright/tests/upload-flow.spec.ts +0 -279
  1226. package/playwright/tsconfig.json +0 -17
  1227. package/playwright/types.d.ts +0 -14
  1228. package/playwright/utils/servers.ts +0 -435
  1229. package/playwright.config.ts +0 -77
  1230. package/postcss.config.mjs +0 -7
  1231. package/scripts/add_ngrok_mapping.py +0 -99
  1232. package/scripts/add_required_observation_fields.js +0 -96
  1233. package/scripts/add_required_source_fields.js +0 -95
  1234. package/scripts/analyze-data-dir-schemas.js +0 -256
  1235. package/scripts/analyze_data_dir_for_schemas.ts +0 -378
  1236. package/scripts/analyze_low_confidence_fields.ts +0 -235
  1237. package/scripts/analyze_schema_redundancies.ts +0 -228
  1238. package/scripts/apply_documentation_rules.sh +0 -81
  1239. package/scripts/apply_file_naming_convention.sh +0 -75
  1240. package/scripts/backfill_entity_embeddings.ts +0 -95
  1241. package/scripts/branch.js +0 -47
  1242. package/scripts/build_github_pages_site.tsx +0 -65
  1243. package/scripts/check-playwright-coverage.ts +0 -159
  1244. package/scripts/check_agent_conversations.js +0 -72
  1245. package/scripts/check_agent_status.js +0 -156
  1246. package/scripts/check_auto_enhancement_status.ts +0 -215
  1247. package/scripts/check_auto_test_schemas.ts +0 -43
  1248. package/scripts/check_claude_sync.sh +0 -35
  1249. package/scripts/check_raw_fragments.ts +0 -46
  1250. package/scripts/check_remaining_eligibility.ts +0 -46
  1251. package/scripts/check_remaining_fields.ts +0 -58
  1252. package/scripts/check_sendgrid_credits.sh +0 -122
  1253. package/scripts/check_sendgrid_email_logs.sh +0 -150
  1254. package/scripts/check_snapshot_schema.ts +0 -18
  1255. package/scripts/check_sources.ts +0 -34
  1256. package/scripts/check_stale_snapshots.ts +0 -80
  1257. package/scripts/cleanup-auto-test-schemas.ts +0 -80
  1258. package/scripts/cleanup_test_schemas.ts +0 -275
  1259. package/scripts/com.neotoma.dev-servers.plist.template +0 -27
  1260. package/scripts/com.neotoma.watch-build.plist.template +0 -27
  1261. package/scripts/complete_submodule_setup.sh +0 -101
  1262. package/scripts/configure_sendgrid_dns.sh +0 -162
  1263. package/scripts/copy-env-to-worktree.js +0 -109
  1264. package/scripts/copy_pdf_worker_wrapper.js +0 -19
  1265. package/scripts/create_sample_parquet_files.py +0 -120
  1266. package/scripts/create_sample_parquet_files.ts +0 -146
  1267. package/scripts/create_sample_parquet_files_mcp.ts +0 -196
  1268. package/scripts/create_sample_parquet_files_simple.sh +0 -132
  1269. package/scripts/cursor-worktree-init.sh +0 -24
  1270. package/scripts/debug-ssl.sh +0 -86
  1271. package/scripts/debug_pdf_extraction.ts +0 -69
  1272. package/scripts/debug_vec_knn.ts +0 -69
  1273. package/scripts/dev-proxy.js +0 -406
  1274. package/scripts/dev-serve.js +0 -349
  1275. package/scripts/disable-dns.sh +0 -47
  1276. package/scripts/doctor.ts +0 -97
  1277. package/scripts/export_schema_snapshots.ts +0 -253
  1278. package/scripts/fix-ssl-cert.sh +0 -72
  1279. package/scripts/fix_mcp_phase1_tests.sh +0 -51
  1280. package/scripts/fix_observation_column_names.js +0 -51
  1281. package/scripts/fix_observation_priority_ordering.js +0 -45
  1282. package/scripts/fix_observation_properties_to_fields.js +0 -48
  1283. package/scripts/fix_sqlite_schema_mismatch.js +0 -75
  1284. package/scripts/generate-dev-cert.sh +0 -69
  1285. package/scripts/generate_pdf_fixtures.ts +0 -330
  1286. package/scripts/generate_schema_icons.ts +0 -216
  1287. package/scripts/get_branch_ports.js +0 -56
  1288. package/scripts/get_mcp_token.sh +0 -47
  1289. package/scripts/get_secrets_for_agents.js +0 -45
  1290. package/scripts/ingest_data_dir.ts +0 -215
  1291. package/scripts/ingest_finances_data.ts +0 -255
  1292. package/scripts/initialize-schemas.ts +0 -350
  1293. package/scripts/install_launchd_dev_servers.js +0 -54
  1294. package/scripts/install_launchd_watch_build.js +0 -53
  1295. package/scripts/instruct_agents_credential_setup.js +0 -130
  1296. package/scripts/instruct_agents_env_check.js +0 -99
  1297. package/scripts/instruct_agents_run_tests_until_passing.js +0 -128
  1298. package/scripts/kill_port.js +0 -174
  1299. package/scripts/linters/sync_agent_instructions_pre_commit.sh +0 -34
  1300. package/scripts/manage_error_debugging.sh +0 -228
  1301. package/scripts/manually_queue_enhancements.ts +0 -156
  1302. package/scripts/merge-dev.js +0 -319
  1303. package/scripts/migrate_auto_enhanced_fields.ts +0 -83
  1304. package/scripts/migrate_env_to_secrets.js +0 -69
  1305. package/scripts/migrate_plans.ts +0 -870
  1306. package/scripts/monitor_and_fix_snapshots.ts +0 -165
  1307. package/scripts/move_docs_rules_to_cursor.js +0 -54
  1308. package/scripts/move_docs_rules_to_cursor.sh +0 -24
  1309. package/scripts/neotoma-npm-reserve/README.md +0 -8
  1310. package/scripts/neotoma-npm-reserve/package.json +0 -10
  1311. package/scripts/notify_agents_env_vars.js +0 -109
  1312. package/scripts/notify_agents_setup_script.js +0 -148
  1313. package/scripts/notify_running_agents_credentials.js +0 -177
  1314. package/scripts/pdf_worker_polyfill.mjs +0 -27
  1315. package/scripts/pick-port.js +0 -108
  1316. package/scripts/postinstall.js +0 -84
  1317. package/scripts/process_remaining_eligible.ts +0 -70
  1318. package/scripts/prototypes/run-prototype.sh +0 -40
  1319. package/scripts/prune-merged-branches.js +0 -115
  1320. package/scripts/recompute_bob.ts +0 -64
  1321. package/scripts/recompute_snapshots.ts +0 -72
  1322. package/scripts/release_orchestrator.js +0 -1995
  1323. package/scripts/remove_duplicate_source_fields.js +0 -61
  1324. package/scripts/rename-branch-from-commit.js +0 -111
  1325. package/scripts/respawn_agents_with_credentials.js +0 -358
  1326. package/scripts/respawn_single_agent.js +0 -324
  1327. package/scripts/run-dev-server-with-tunnel-url.sh +0 -16
  1328. package/scripts/run-dev-task.js +0 -160
  1329. package/scripts/run_dev_servers_launchd.sh +0 -14
  1330. package/scripts/run_integration_tests.js +0 -523
  1331. package/scripts/run_migrations.js +0 -55
  1332. package/scripts/run_neotoma_mcp_stdio.sh +0 -11
  1333. package/scripts/run_neotoma_mcp_stdio_dev_watch.sh +0 -10
  1334. package/scripts/run_neotoma_mcp_stdio_prod.sh +0 -11
  1335. package/scripts/run_neotoma_mcp_stdio_prod_watch.sh +0 -12
  1336. package/scripts/run_watch_build_launchd.sh +0 -18
  1337. package/scripts/scrape_nytimes_article.py +0 -182
  1338. package/scripts/scrape_nytimes_simple.py +0 -152
  1339. package/scripts/secrets_manager.js +0 -232
  1340. package/scripts/send_agent_followup.js +0 -136
  1341. package/scripts/setup-data-symlink.js +0 -88
  1342. package/scripts/setup-dns.sh +0 -54
  1343. package/scripts/setup-env-copy-hook.sh +0 -67
  1344. package/scripts/setup-foundation-symlink.js +0 -45
  1345. package/scripts/setup-https-tunnel.sh +0 -409
  1346. package/scripts/setup-test-env.sh +0 -18
  1347. package/scripts/setup_agent_credentials.sh +0 -27
  1348. package/scripts/setup_agent_environment.sh +0 -39
  1349. package/scripts/setup_claude_instructions.sh +0 -437
  1350. package/scripts/setup_cloudflare_email_routing.sh +0 -158
  1351. package/scripts/setup_shared_submodule.sh +0 -100
  1352. package/scripts/simulate_npm_install.js +0 -70
  1353. package/scripts/spec_compliance_patterns.js +0 -260
  1354. package/scripts/sync-env-from-1password.sh +0 -100
  1355. package/scripts/sync_mcp_configs.js +0 -106
  1356. package/scripts/test-base64-store.ts +0 -53
  1357. package/scripts/test-error-handling.ts +0 -44
  1358. package/scripts/test-file-path-store.ts +0 -142
  1359. package/scripts/test-raw-fragments-idempotence.ts +0 -157
  1360. package/scripts/test-raw-fragments-insert.ts +0 -88
  1361. package/scripts/test-store-response-structure.ts +0 -125
  1362. package/scripts/test-store-structured-response.ts +0 -126
  1363. package/scripts/test_agent_env_spawn.js +0 -82
  1364. package/scripts/test_confidence.ts +0 -36
  1365. package/scripts/test_dsnp_parquet_reading.ts +0 -72
  1366. package/scripts/test_mcp_semantic_search.ts +0 -36
  1367. package/scripts/test_parquet_ingestion.ts +0 -52
  1368. package/scripts/test_raw_fragments_in_response.ts +0 -31
  1369. package/scripts/test_sendgrid_smtp.sh +0 -45
  1370. package/scripts/test_store_parquet_via_mcp.ts +0 -66
  1371. package/scripts/trigger_error_debug_cli.js +0 -271
  1372. package/scripts/unblock_agents.js +0 -208
  1373. package/scripts/validate-coverage-map.ts +0 -187
  1374. package/scripts/validate-doc-dependencies.js +0 -410
  1375. package/scripts/validate_all_fu_compliance.js +0 -752
  1376. package/scripts/validate_schema_sync.ts +0 -135
  1377. package/scripts/validate_spec_compliance.js +0 -669
  1378. package/scripts/watch_site.js +0 -68
  1379. package/scripts/wipe-local-database.js +0 -191
  1380. package/scripts/with_branch_ports.js +0 -496
  1381. package/site_pages/.nojekyll +0 -0
  1382. package/site_pages/FAVICON_CANDIDATES.md +0 -22
  1383. package/site_pages/favicon-1-diamond.svg +0 -3
  1384. package/site_pages/favicon-2-n-box.svg +0 -10
  1385. package/site_pages/favicon-3-waves.svg +0 -3
  1386. package/site_pages/favicon-4-n-minimal.svg +0 -3
  1387. package/site_pages/favicon-5-bars.svg +0 -5
  1388. package/site_pages/favicon.svg +0 -10
  1389. package/site_pages/index.html +0 -40
  1390. package/site_pages/robots.txt +0 -4
  1391. package/site_pages/sitemap.xml +0 -5
  1392. package/src/actions.ts +0 -4468
  1393. package/src/cli/agent_instructions_scan.ts +0 -793
  1394. package/src/cli/bootstrap.ts +0 -35
  1395. package/src/cli/config.ts +0 -338
  1396. package/src/cli/format.ts +0 -337
  1397. package/src/cli/index.ts +0 -11417
  1398. package/src/cli/init_abort.ts +0 -7
  1399. package/src/cli/mcp_config_scan.ts +0 -1359
  1400. package/src/cli/pack_rat.ts +0 -134
  1401. package/src/config/record_types.ts +0 -562
  1402. package/src/config.ts +0 -164
  1403. package/src/crypto/agent_identity.ts +0 -46
  1404. package/src/crypto/auth.ts +0 -110
  1405. package/src/crypto/column_encryption.ts +0 -109
  1406. package/src/crypto/crypto.test.ts +0 -311
  1407. package/src/crypto/envelope.ts +0 -240
  1408. package/src/crypto/export.ts +0 -131
  1409. package/src/crypto/index.ts +0 -13
  1410. package/src/crypto/key_derivation.ts +0 -176
  1411. package/src/crypto/keys.ts +0 -85
  1412. package/src/crypto/mcp_auth_token.ts +0 -35
  1413. package/src/crypto/signature.ts +0 -50
  1414. package/src/crypto/types.ts +0 -48
  1415. package/src/db.ts +0 -66
  1416. package/src/embeddings.ts +0 -76
  1417. package/src/index.ts +0 -25
  1418. package/src/mcp_ws_bridge.ts +0 -222
  1419. package/src/middleware/encrypt_response.ts +0 -39
  1420. package/src/normalize.ts +0 -351
  1421. package/src/record_types.test.ts +0 -36
  1422. package/src/reducers/index.ts +0 -5
  1423. package/src/reducers/observation_reducer.ts +0 -458
  1424. package/src/reducers/relationship_reducer.ts +0 -291
  1425. package/src/repositories/db/capability_repo.ts +0 -29
  1426. package/src/repositories/file/capability_repo.ts +0 -29
  1427. package/src/repositories/index.ts +0 -7
  1428. package/src/repositories/interfaces.ts +0 -112
  1429. package/src/repositories/sqlite/__tests__/local_db_adapter.test.ts +0 -138
  1430. package/src/repositories/sqlite/local_db_adapter.ts +0 -961
  1431. package/src/repositories/sqlite/sqlite_client.ts +0 -378
  1432. package/src/server.ts +0 -6157
  1433. package/src/services/__tests__/csv_chunking.test.ts +0 -125
  1434. package/src/services/__tests__/deletion.test.ts +0 -358
  1435. package/src/services/__tests__/entity_semantic_search.test.ts +0 -45
  1436. package/src/services/__tests__/local_auth.test.ts +0 -52
  1437. package/src/services/__tests__/local_entity_embedding.test.ts +0 -108
  1438. package/src/services/__tests__/mcp_oauth.test.ts +0 -407
  1439. package/src/services/__tests__/oauth_key_gate.test.ts +0 -50
  1440. package/src/services/__tests__/oauth_state.test.ts +0 -40
  1441. package/src/services/__tests__/schema_icon_service.test.ts +0 -151
  1442. package/src/services/auto_enhancement_processor.ts +0 -237
  1443. package/src/services/capability_registry.ts +0 -202
  1444. package/src/services/correction.ts +0 -87
  1445. package/src/services/csv_chunking.ts +0 -128
  1446. package/src/services/csv_row_extraction.ts +0 -124
  1447. package/src/services/dashboard_stats.ts +0 -115
  1448. package/src/services/deletion.ts +0 -482
  1449. package/src/services/deletion_monitor.ts +0 -314
  1450. package/src/services/encryption_service.ts +0 -110
  1451. package/src/services/entity_merge.ts +0 -100
  1452. package/src/services/entity_queries.ts +0 -518
  1453. package/src/services/entity_resolution.ts +0 -367
  1454. package/src/services/entity_semantic_search.ts +0 -64
  1455. package/src/services/entity_snapshot_embedding.ts +0 -115
  1456. package/src/services/field_canonicalization.ts +0 -393
  1457. package/src/services/field_converters.ts +0 -173
  1458. package/src/services/field_validation.ts +0 -173
  1459. package/src/services/file_text_extraction.ts +0 -213
  1460. package/src/services/finances_field_mapping.ts +0 -473
  1461. package/src/services/gdpr_deletion.ts +0 -497
  1462. package/src/services/interpretation.ts +0 -939
  1463. package/src/services/llm_extraction.ts +0 -548
  1464. package/src/services/local_auth.ts +0 -154
  1465. package/src/services/local_entity_embedding.ts +0 -196
  1466. package/src/services/mcp_auth.ts +0 -75
  1467. package/src/services/mcp_oauth.ts +0 -1625
  1468. package/src/services/mcp_oauth_errors.ts +0 -139
  1469. package/src/services/oauth_key_gate.ts +0 -116
  1470. package/src/services/oauth_state.ts +0 -70
  1471. package/src/services/observation_identity.ts +0 -161
  1472. package/src/services/observation_storage.ts +0 -162
  1473. package/src/services/parquet_reader.ts +0 -375
  1474. package/src/services/public_key_registry.ts +0 -103
  1475. package/src/services/raw_fragments.ts +0 -217
  1476. package/src/services/raw_storage.ts +0 -267
  1477. package/src/services/relationships.ts +0 -495
  1478. package/src/services/schema_definitions.ts +0 -2041
  1479. package/src/services/schema_icon_service.ts +0 -260
  1480. package/src/services/schema_inference.ts +0 -401
  1481. package/src/services/schema_recommendation.ts +0 -1475
  1482. package/src/services/schema_registry.ts +0 -1403
  1483. package/src/services/snapshot_computation.ts +0 -92
  1484. package/src/services/source_identity.ts +0 -22
  1485. package/src/services/timeline_events.ts +0 -198
  1486. package/src/shared/action_handlers/entity_handlers.ts +0 -115
  1487. package/src/shared/action_schemas.test.ts +0 -59
  1488. package/src/shared/action_schemas.ts +0 -317
  1489. package/src/shared/api_client.ts +0 -86
  1490. package/src/shared/contract_mappings.ts +0 -646
  1491. package/src/shared/entity_display_name.ts +0 -64
  1492. package/src/shared/local_transport.ts +0 -126
  1493. package/src/shared/openapi_schema.ts +0 -175
  1494. package/src/shared/openapi_types.ts +0 -2810
  1495. package/src/shared/record_display_summary.ts +0 -133
  1496. package/src/utils/__tests__/csv_summary.test.ts +0 -53
  1497. package/src/utils/__tests__/lucide_icons.test.ts +0 -133
  1498. package/src/utils/chat.test.ts +0 -42
  1499. package/src/utils/chat.ts +0 -35
  1500. package/src/utils/csv.test.ts +0 -41
  1501. package/src/utils/csv.ts +0 -77
  1502. package/src/utils/csv_summary.ts +0 -195
  1503. package/src/utils/log_encrypt.ts +0 -144
  1504. package/src/utils/logger.ts +0 -94
  1505. package/src/utils/lucide_icons.ts +0 -279
  1506. package/src/utils/property_keys.test.ts +0 -109
  1507. package/src/utils/property_keys.ts +0 -66
  1508. package/src/utils/property_sanitizer.test.ts +0 -105
  1509. package/src/utils/property_sanitizer.ts +0 -135
  1510. package/src/version_check.test.ts +0 -107
  1511. package/src/version_check.ts +0 -58
  1512. package/supabase/.temp/cli-latest +0 -0
  1513. package/tailwind.config.mjs +0 -134
  1514. package/tests/TEST_ACTION_MATRIX.md +0 -387
  1515. package/tests/agent/mcp_instruction_behavior.test.ts +0 -72
  1516. package/tests/agent/runner/agent_runner.ts +0 -27
  1517. package/tests/agent/runner/claude_code_runner.ts +0 -128
  1518. package/tests/agent/runner/cursor_cli_runner.ts +0 -7
  1519. package/tests/cli/api_client_offline_fallback.test.ts +0 -89
  1520. package/tests/cli/cli_admin_commands.test.ts +0 -268
  1521. package/tests/cli/cli_api_commands.test.ts +0 -75
  1522. package/tests/cli/cli_auth_commands.test.ts +0 -67
  1523. package/tests/cli/cli_command_coverage_guard.test.ts +0 -50
  1524. package/tests/cli/cli_correction_commands.test.ts +0 -277
  1525. package/tests/cli/cli_direct_invocation_parity.test.ts +0 -46
  1526. package/tests/cli/cli_entity_commands.test.ts +0 -324
  1527. package/tests/cli/cli_entity_subcommands.test.ts +0 -422
  1528. package/tests/cli/cli_infra_commands.test.ts +0 -475
  1529. package/tests/cli/cli_mcp_commands.test.ts +0 -51
  1530. package/tests/cli/cli_observation_commands.test.ts +0 -232
  1531. package/tests/cli/cli_query_commands.test.ts +0 -369
  1532. package/tests/cli/cli_relationship_commands.test.ts +0 -410
  1533. package/tests/cli/cli_schema_commands.test.ts +0 -296
  1534. package/tests/cli/cli_session_startup_ux.test.ts +0 -112
  1535. package/tests/cli/cli_smoke.test.ts +0 -456
  1536. package/tests/cli/cli_source_commands.test.ts +0 -214
  1537. package/tests/cli/cli_stats_commands.test.ts +0 -51
  1538. package/tests/cli/cli_store_commands.test.ts +0 -339
  1539. package/tests/cli/cli_timeline_commands.test.ts +0 -294
  1540. package/tests/cli/config.test.ts +0 -36
  1541. package/tests/cli/config_api_discovery.test.ts +0 -91
  1542. package/tests/cli/test_command_detection.test.ts +0 -128
  1543. package/tests/cli/test_debug_tty.test.ts +0 -32
  1544. package/tests/contract/contract_mapping.test.ts +0 -131
  1545. package/tests/contract/contract_mcp_cli_parity.test.ts +0 -223
  1546. package/tests/contract/openapi_schema.test.ts +0 -15
  1547. package/tests/fixtures/README.md +0 -22
  1548. package/tests/fixtures/agent_mcp/insurance_policy.txt +0 -5
  1549. package/tests/fixtures/agent_mcp_cases.json +0 -137
  1550. package/tests/fixtures/csv/sample_balances.csv +0 -7
  1551. package/tests/fixtures/csv/sample_contacts.csv +0 -6
  1552. package/tests/fixtures/csv/sample_crypto_transactions.csv +0 -6
  1553. package/tests/fixtures/csv/sample_flows.csv +0 -7
  1554. package/tests/fixtures/csv/sample_holdings.csv +0 -7
  1555. package/tests/fixtures/csv/sample_income.csv +0 -7
  1556. package/tests/fixtures/csv/sample_purchases.csv +0 -7
  1557. package/tests/fixtures/csv/sample_tax_events.csv +0 -7
  1558. package/tests/fixtures/csv/sample_transactions.csv +0 -7
  1559. package/tests/fixtures/csv/sample_transfers.csv +0 -6
  1560. package/tests/fixtures/expected/contact_snapshot.json +0 -19
  1561. package/tests/fixtures/expected/transaction_snapshot.json +0 -21
  1562. package/tests/fixtures/helpers.ts +0 -522
  1563. package/tests/fixtures/json/account.json +0 -63
  1564. package/tests/fixtures/json/argument.json +0 -39
  1565. package/tests/fixtures/json/balance.json +0 -56
  1566. package/tests/fixtures/json/belief.json +0 -44
  1567. package/tests/fixtures/json/contact.json +0 -83
  1568. package/tests/fixtures/json/contract.json +0 -62
  1569. package/tests/fixtures/json/crypto_transaction.json +0 -67
  1570. package/tests/fixtures/json/domain.json +0 -41
  1571. package/tests/fixtures/json/emotion.json +0 -31
  1572. package/tests/fixtures/json/fixed_cost.json +0 -75
  1573. package/tests/fixtures/json/flow.json +0 -71
  1574. package/tests/fixtures/json/habit.json +0 -54
  1575. package/tests/fixtures/json/habit_completion.json +0 -31
  1576. package/tests/fixtures/json/habit_objective.json +0 -40
  1577. package/tests/fixtures/json/holding.json +0 -65
  1578. package/tests/fixtures/json/income.json +0 -59
  1579. package/tests/fixtures/json/liability.json +0 -50
  1580. package/tests/fixtures/json/order.json +0 -62
  1581. package/tests/fixtures/json/outcome.json +0 -56
  1582. package/tests/fixtures/json/process.json +0 -43
  1583. package/tests/fixtures/json/property.json +0 -52
  1584. package/tests/fixtures/json/purchase.json +0 -66
  1585. package/tests/fixtures/json/research.json +0 -53
  1586. package/tests/fixtures/json/strategy.json +0 -68
  1587. package/tests/fixtures/json/task_attachment.json +0 -62
  1588. package/tests/fixtures/json/task_comment.json +0 -54
  1589. package/tests/fixtures/json/task_dependency.json +0 -51
  1590. package/tests/fixtures/json/task_story.json +0 -53
  1591. package/tests/fixtures/json/tax_event.json +0 -60
  1592. package/tests/fixtures/json/tax_filing.json +0 -61
  1593. package/tests/fixtures/json/transaction.json +0 -62
  1594. package/tests/fixtures/json/transfer.json +0 -60
  1595. package/tests/fixtures/json/wallet.json +0 -51
  1596. package/tests/fixtures/json/workout.json +0 -45
  1597. package/tests/fixtures/pdf/sample-upload.txt +0 -2
  1598. package/tests/fixtures/pdf/sample_bank_statement.md +0 -32
  1599. package/tests/fixtures/pdf/sample_bank_statement.pdf +0 -0
  1600. package/tests/fixtures/pdf/sample_contract.md +0 -27
  1601. package/tests/fixtures/pdf/sample_contract.pdf +0 -0
  1602. package/tests/fixtures/pdf/sample_exercise.md +0 -31
  1603. package/tests/fixtures/pdf/sample_exercise.pdf +0 -0
  1604. package/tests/fixtures/pdf/sample_holding_statement.md +0 -29
  1605. package/tests/fixtures/pdf/sample_holding_statement.pdf +0 -0
  1606. package/tests/fixtures/pdf/sample_invoice.md +0 -27
  1607. package/tests/fixtures/pdf/sample_invoice.pdf +0 -108
  1608. package/tests/fixtures/pdf/sample_meal.md +0 -28
  1609. package/tests/fixtures/pdf/sample_meal.pdf +0 -111
  1610. package/tests/fixtures/pdf/sample_note.md +0 -28
  1611. package/tests/fixtures/pdf/sample_note.pdf +0 -0
  1612. package/tests/fixtures/pdf/sample_receipt.md +0 -28
  1613. package/tests/fixtures/pdf/sample_receipt.pdf +0 -0
  1614. package/tests/fixtures/pdf/sample_research.md +0 -31
  1615. package/tests/fixtures/pdf/sample_research.pdf +0 -0
  1616. package/tests/fixtures/pdf/sample_tax_form.md +0 -38
  1617. package/tests/fixtures/pdf/sample_tax_form.pdf +0 -0
  1618. package/tests/fixtures/pdf/sample_transaction_receipt.md +0 -28
  1619. package/tests/fixtures/pdf/sample_transaction_receipt.pdf +0 -0
  1620. package/tests/fixtures/replay_graph.test.ts +0 -125
  1621. package/tests/fixtures/sample_invoice.pdf +0 -1
  1622. package/tests/fixtures/types.ts +0 -321
  1623. package/tests/fixtures/validation.ts +0 -333
  1624. package/tests/helpers/cleanup_helpers.ts +0 -550
  1625. package/tests/helpers/create_test_parquet.ts +0 -187
  1626. package/tests/helpers/cross_layer_helpers.ts +0 -130
  1627. package/tests/helpers/mcp_action_helper.ts +0 -55
  1628. package/tests/helpers/mcp_spec_validators.ts +0 -433
  1629. package/tests/helpers/test_data_helpers.ts +0 -226
  1630. package/tests/helpers/test_schema_helpers.ts +0 -264
  1631. package/tests/integration/cli_to_mcp_entities.test.ts +0 -211
  1632. package/tests/integration/cli_to_mcp_relationships.test.ts +0 -196
  1633. package/tests/integration/cli_to_mcp_schemas.test.ts +0 -232
  1634. package/tests/integration/cli_to_mcp_stats_snapshots.test.ts +0 -67
  1635. package/tests/integration/cli_to_mcp_store.test.ts +0 -249
  1636. package/tests/integration/dashboard_stats.test.ts +0 -180
  1637. package/tests/integration/entity_queries.test.ts +0 -666
  1638. package/tests/integration/field_converters.test.ts +0 -266
  1639. package/tests/integration/fixture_mcp_store_replay.test.ts +0 -255
  1640. package/tests/integration/gdpr_deletion.test.ts +0 -433
  1641. package/tests/integration/llm_extraction.test.ts +0 -554
  1642. package/tests/integration/mcp_actions_matrix.test.ts +0 -969
  1643. package/tests/integration/mcp_auto_enhancement.test.ts +0 -659
  1644. package/tests/integration/mcp_auto_schema_creation.test.ts +0 -658
  1645. package/tests/integration/mcp_correction_variations.test.ts +0 -641
  1646. package/tests/integration/mcp_entity_creation.test.ts +0 -333
  1647. package/tests/integration/mcp_entity_variations.test.ts +0 -474
  1648. package/tests/integration/mcp_graph_variations.test.ts +0 -380
  1649. package/tests/integration/mcp_npm_check_update.test.ts +0 -54
  1650. package/tests/integration/mcp_query_variations.test.ts +0 -392
  1651. package/tests/integration/mcp_relationship_variations.test.ts +0 -433
  1652. package/tests/integration/mcp_resource_variations.test.ts +0 -423
  1653. package/tests/integration/mcp_resources.test.ts +0 -452
  1654. package/tests/integration/mcp_schema_actions.test.ts +0 -673
  1655. package/tests/integration/mcp_schema_variations.test.ts +0 -428
  1656. package/tests/integration/mcp_store_parquet.test.ts +0 -466
  1657. package/tests/integration/mcp_store_unstructured.test.ts +0 -413
  1658. package/tests/integration/mcp_store_variations.test.ts +0 -452
  1659. package/tests/integration/nonjson_csv_store_behavior.test.ts +0 -348
  1660. package/tests/integration/nonjson_fixtures_mcp_replay.test.ts +0 -253
  1661. package/tests/integration/observation_ingestion.test.ts +0 -362
  1662. package/tests/integration/payload/payload_submission.test.ts +0 -296
  1663. package/tests/integration/payload_compiler.test.ts +0 -347
  1664. package/tests/integration/public_key_registry.test.ts +0 -204
  1665. package/tests/integration/relationship_snapshots.test.ts +0 -235
  1666. package/tests/integration/schema_recommendation_integration.test.ts +0 -418
  1667. package/tests/integration/setup_v0.2.0_schemas.ts +0 -61
  1668. package/tests/integration/v0.2.0_ingestion.test.ts +0 -527
  1669. package/tests/services/auto_enhancement_converter_detection.test.ts +0 -663
  1670. package/tests/services/auto_enhancement_processor.test.ts +0 -445
  1671. package/tests/services/capability_registry.test.ts +0 -254
  1672. package/tests/services/converter_detection_unit.test.ts +0 -168
  1673. package/tests/services/encryption_service.test.ts +0 -147
  1674. package/tests/services/entity_resolution.test.ts +0 -285
  1675. package/tests/services/field_canonicalization.test.ts +0 -215
  1676. package/tests/services/field_converters.test.ts +0 -211
  1677. package/tests/services/field_validation.test.ts +0 -318
  1678. package/tests/services/finances_field_mapping.test.ts +0 -245
  1679. package/tests/services/interpretation.test.ts +0 -144
  1680. package/tests/services/mcp_auth.test.ts +0 -34
  1681. package/tests/services/observation_identity.test.ts +0 -154
  1682. package/tests/services/payload_identity.test.ts +0 -325
  1683. package/tests/services/payload_schema.test.ts +0 -282
  1684. package/tests/services/raw_storage.test.ts +0 -546
  1685. package/tests/services/schema_definitions.test.ts +0 -119
  1686. package/tests/services/schema_recommendation.test.ts +0 -590
  1687. package/tests/services/schema_registry_incremental.test.ts +0 -882
  1688. package/tests/services/summary.test.ts +0 -26
  1689. package/tests/unit/bigint_serialization.test.ts +0 -220
  1690. package/tests/unit/observation_reducer_converters.test.ts +0 -430
  1691. package/tests/unit/parquet_reader.test.ts +0 -155
  1692. package/tests/unit/relationship_reducer.test.ts +0 -208
  1693. package/tests/unit/schema_inference.test.ts +0 -358
  1694. package/tests/unit/seo_metadata.test.ts +0 -52
  1695. package/tsconfig.json +0 -22
  1696. package/vite.config.ts +0 -165
  1697. package/vitest.config.ts +0 -111
  1698. package/vitest.global_setup.ts +0 -42
  1699. package/vitest.setup.ts +0 -89
@@ -1,3400 +0,0 @@
1
- # v0.2.3 Foundation Agent Integration Guide
2
-
3
- **Alignment**: This guide implements [Agent Skills for Context Engineering](https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering) principles throughout.
4
-
5
- ## Overview
6
-
7
- This guide details how foundation agents integrate with Neotoma for unified memory management following Agent Skills for Context Engineering principles. It covers:
8
-
9
- - **Memory Systems** (Agent Skill 6): Entity tracking, knowledge graphs, semantic and episodic memory
10
- - **Context Degradation Management** (Agent Skill 2): Preventing lost-in-middle, attention degradation
11
- - **Context Compression** (Agent Skill 3): Entity resolution, snapshot compression, selective loading
12
- - **Context Optimization** (Agent Skill 4): High-signal token curation, query-based loading
13
- - **Multi-Agent Patterns** (Agent Skill 5): Orchestrator, peer-to-peer, hierarchical collaboration
14
- - **Evaluation Patterns** (Agent Skills 8 & 9): Performance metrics, quality scoring, LLM-as-judge
15
-
16
- This guide provides graceful degradation, memory storage patterns, memory retrieval patterns, and best practices aligned with Agent Skills principles.
17
-
18
- ## Integration Architecture
19
-
20
- ### Unified Memory System
21
-
22
- Foundation agents use Neotoma for all memory (real-world entities + codebase metadata):
23
-
24
- ```
25
- ┌─────────────────────────────────────┐
26
- │ Foundation Agent │
27
- │ (Cursor, ChatGPT, Claude) │
28
- └─────────────────┬───────────────────┘
29
-
30
- │ MCP Protocol
31
-
32
- ┌─────────────────▼───────────────────┐
33
- │ Neotoma MCP Server │
34
- │ - Entity Resolution │
35
- │ - Timeline Generation │
36
- │ - Cross-Session Persistence │
37
- └─────────────────┬───────────────────┘
38
-
39
-
40
- ┌─────────────────▼───────────────────┐
41
- │ Neotoma Database │
42
- │ - Real-World Entities │
43
- │ - Codebase Metadata │
44
- │ - Observations & Snapshots │
45
- └─────────────────────────────────────┘
46
- ```
47
-
48
- ### Memory Types
49
-
50
- | Memory Type | Entity Types | Use Case |
51
- |-------------|--------------|----------|
52
- | **Codebase Metadata** | feature_unit, release, codebase_entity | Track development units, releases, architecture |
53
- | **Agent Activity** | agent_decision, agent_session | Track decisions, sessions, checkpoints |
54
- | **Quality Tracking** | validation_result | Track test results, linter output, compliance |
55
- | **Architecture** | architectural_decision | Track high-level architectural decisions |
56
- | **Real-World Entities** | contact, invoice, event, etc. | Track people, companies, documents mentioned in docs |
57
-
58
- ## Graceful Degradation
59
-
60
- Foundation agents check Neotoma availability and fall back to `.cursor/memory/` if unavailable.
61
-
62
- ### Detection Pattern
63
-
64
- ```typescript
65
- // neotoma_client.ts
66
- export async function isNeotomaAvailable(): Promise<boolean> {
67
- try {
68
- const response = await fetch('http://localhost:3000/mcp/health', {
69
- method: 'GET',
70
- timeout: 2000
71
- });
72
- return response.ok;
73
- } catch (error) {
74
- return false;
75
- }
76
- }
77
- ```
78
-
79
- ### Storage Pattern
80
-
81
- ```typescript
82
- // memory_service.ts
83
- import { isNeotomaAvailable } from './neotoma_client';
84
- import { mcpClient } from './mcp_client';
85
- import { writeToLocalMemory } from './local_memory';
86
-
87
- export async function storeFeatureUnit(featureUnit: FeatureUnit) {
88
- if (await isNeotomaAvailable()) {
89
- // Use Neotoma via MCP (preferred)
90
- try {
91
- const result = await mcpClient.submit_payload({
92
- capability_id: "neotoma:store_feature_unit:v1",
93
- body: featureUnit,
94
- provenance: {
95
- source_refs: [],
96
- extracted_at: new Date().toISOString(),
97
- extractor_version: "neotoma-mcp:v0.2.3"
98
- }
99
- });
100
- console.log(`Stored Feature Unit ${featureUnit.id} in Neotoma (payload_id: ${result.payload_id})`);
101
- return result;
102
- } catch (error) {
103
- console.error('Failed to store in Neotoma, falling back to local memory:', error);
104
- return writeToLocalMemory('feature_units', featureUnit.id, featureUnit);
105
- }
106
- } else {
107
- // Fallback to lightweight memory
108
- console.log(`Neotoma unavailable, using local memory for Feature Unit ${featureUnit.id}`);
109
- return writeToLocalMemory('feature_units', featureUnit.id, featureUnit);
110
- }
111
- }
112
- ```
113
-
114
- ### Retrieval Pattern
115
-
116
- ```typescript
117
- export async function getFeatureUnit(id: string): Promise<FeatureUnit | null> {
118
- if (await isNeotomaAvailable()) {
119
- try {
120
- const result = await mcpClient.retrieve_records({
121
- type: 'feature_unit',
122
- properties: { id }
123
- });
124
-
125
- if (result.records.length > 0) {
126
- return result.records[0].properties as FeatureUnit;
127
- }
128
-
129
- // Fall back to local memory if not found in Neotoma
130
- return readFromLocalMemory('feature_units', id);
131
- } catch (error) {
132
- console.error('Failed to query Neotoma, falling back to local memory:', error);
133
- return readFromLocalMemory('feature_units', id);
134
- }
135
- } else {
136
- return readFromLocalMemory('feature_units', id);
137
- }
138
- }
139
- ```
140
-
141
- ## Memory Storage Patterns
142
-
143
- ### Feature Unit Creation
144
-
145
- **When**: After `create-feature-unit` command completes
146
-
147
- ```typescript
148
- import { storeFeatureUnit } from './memory_service';
149
-
150
- async function createFeatureUnitCommand(args: CreateFeatureUnitArgs) {
151
- // 1. Create Feature Unit spec
152
- const spec = generateFeatureUnitSpec(args);
153
-
154
- // 2. Write spec to file
155
- writeFeatureUnitSpec(spec.id, spec);
156
-
157
- // 3. Store in Neotoma
158
- await storeFeatureUnit({
159
- id: spec.id,
160
- description: spec.overview,
161
- status: 'planning',
162
- dependencies: spec.dependencies || [],
163
- risk_level: spec.risk_level,
164
- created_at: new Date().toISOString(),
165
- updated_at: new Date().toISOString()
166
- });
167
-
168
- console.log(`Feature Unit ${spec.id} created and stored in memory`);
169
- }
170
- ```
171
-
172
- ### Feature Unit Status Update
173
-
174
- **When**: Status changes (in_progress, completed, deployed)
175
-
176
- ```typescript
177
- async function updateFeatureUnitStatus(id: string, newStatus: string) {
178
- // 1. Update spec file
179
- const spec = readFeatureUnitSpec(id);
180
- spec.status = newStatus;
181
- spec.updated = new Date().toISOString();
182
- writeFeatureUnitSpec(id, spec);
183
-
184
- // 2. Update in Neotoma
185
- await storeFeatureUnit({
186
- id: spec.id,
187
- description: spec.overview,
188
- status: newStatus,
189
- dependencies: spec.dependencies || [],
190
- risk_level: spec.risk_level,
191
- created_at: spec.created,
192
- updated_at: spec.updated
193
- });
194
-
195
- console.log(`Feature Unit ${id} status updated to ${newStatus}`);
196
- }
197
- ```
198
-
199
- ### Release Creation
200
-
201
- **When**: After `create-release` command completes
202
-
203
- ```typescript
204
- async function createReleaseCommand(args: CreateReleaseArgs) {
205
- // 1. Create Release spec
206
- const spec = generateReleaseSpec(args);
207
-
208
- // 2. Write spec to file
209
- writeReleaseSpec(spec.id, spec);
210
-
211
- // 3. Store in Neotoma
212
- await mcpClient.submit_payload({
213
- capability_id: "neotoma:store_release:v1",
214
- body: {
215
- id: spec.id,
216
- version: spec.version,
217
- feature_units: spec.feature_units,
218
- status: 'planning',
219
- acceptance_criteria: spec.acceptance_criteria,
220
- target_ship_date: spec.target_ship_date,
221
- created_at: new Date().toISOString(),
222
- updated_at: new Date().toISOString()
223
- },
224
- provenance: {
225
- source_refs: [],
226
- extracted_at: new Date().toISOString(),
227
- extractor_version: "neotoma-mcp:v0.2.3"
228
- }
229
- });
230
-
231
- console.log(`Release ${spec.id} created and stored in memory`);
232
- }
233
- ```
234
-
235
- ### Technical Decision Recording
236
-
237
- **When**: Making architectural or technical decisions
238
-
239
- ```typescript
240
- async function recordDecision(decision: string, rationale: string, context: any) {
241
- await mcpClient.submit_agent_decision({
242
- decision,
243
- rationale,
244
- context,
245
- decision_type: 'technical',
246
- timestamp: new Date().toISOString(),
247
- agent_id: 'cursor-agent'
248
- });
249
-
250
- console.log(`Decision recorded: ${decision}`);
251
- }
252
-
253
- // Example usage
254
- await recordDecision(
255
- 'Use Neotoma for all foundation agent memory',
256
- 'Unified memory system with entity resolution and timeline generation',
257
- {
258
- feature_unit: 'FU-061',
259
- session_id: 'abc123',
260
- task: 'Design agent memory system'
261
- }
262
- );
263
- ```
264
-
265
- ### Session History Recording
266
-
267
- **When**: Session starts and ends
268
-
269
- ```typescript
270
- async function startSession(sessionId: string) {
271
- const session = {
272
- session_id: sessionId,
273
- actions: [],
274
- checkpoints: [],
275
- outcomes: [],
276
- started_at: new Date().toISOString()
277
- };
278
-
279
- // Store session start (will be updated as session progresses)
280
- // Note: This is typically done at session end with full history
281
-
282
- return session;
283
- }
284
-
285
- async function endSession(session: AgentSession) {
286
- session.ended_at = new Date().toISOString();
287
- session.duration = calculateDuration(session.started_at, session.ended_at);
288
-
289
- // Store complete session
290
- await mcpClient.submit_agent_session(session);
291
-
292
- console.log(`Session ${session.session_id} completed (${session.duration}s)`);
293
- }
294
-
295
- // Example usage
296
- const session = await startSession('abc123');
297
-
298
- // Track actions
299
- session.actions.push({
300
- type: 'create_feature_unit',
301
- result: 'success',
302
- details: { feature_unit_id: 'FU-061' },
303
- timestamp: new Date().toISOString()
304
- });
305
-
306
- // Track checkpoints
307
- session.checkpoints.push({
308
- name: 'spec_complete',
309
- state: { feature_unit_id: 'FU-061', status: 'planning' },
310
- timestamp: new Date().toISOString()
311
- });
312
-
313
- // Track outcomes
314
- session.outcomes.push({
315
- type: 'feature_unit_created',
316
- id: 'FU-061'
317
- });
318
-
319
- // End session
320
- await endSession(session);
321
- ```
322
-
323
- ### Validation Result Recording
324
-
325
- **When**: Running tests, linters, or validation scripts
326
-
327
- ```typescript
328
- async function recordValidationResult(
329
- validationType: string,
330
- status: string,
331
- details: any,
332
- target: string
333
- ) {
334
- await mcpClient.submit_payload({
335
- capability_id: 'neotoma:submit_codebase_metadata:v1',
336
- body: {
337
- entity_type: 'validation_result',
338
- data: {
339
- validation_type: validationType,
340
- status,
341
- details,
342
- target,
343
- timestamp: new Date().toISOString()
344
- }
345
- }
346
- });
347
-
348
- console.log(`Validation result recorded: ${validationType} (${status})`);
349
- }
350
-
351
- // Example usage after running tests
352
- const testResult = runTests();
353
- await recordValidationResult(
354
- 'test',
355
- testResult.passed ? 'passed' : 'failed',
356
- {
357
- passed_count: testResult.passed_count,
358
- failed_count: testResult.failed_count,
359
- duration_ms: testResult.duration_ms
360
- },
361
- 'FU-061'
362
- );
363
- ```
364
-
365
- ## Memory Retrieval Patterns
366
-
367
- ### Querying Feature Units
368
-
369
- ```typescript
370
- // Get all completed Feature Units
371
- async function getCompletedFeatureUnits() {
372
- const result = await mcpClient.retrieve_records({
373
- type: 'feature_unit',
374
- properties: { status: 'completed' },
375
- limit: 100
376
- });
377
-
378
- return result.records.map(r => r.properties);
379
- }
380
-
381
- // Get Feature Unit by ID
382
- async function getFeatureUnit(id: string) {
383
- const result = await mcpClient.retrieve_records({
384
- type: 'feature_unit',
385
- properties: { id },
386
- limit: 1
387
- });
388
-
389
- return result.records.length > 0 ? result.records[0].properties : null;
390
- }
391
-
392
- // Get Feature Units by dependencies
393
- async function getFeatureUnitsByDependency(dependencyId: string) {
394
- const result = await mcpClient.retrieve_records({
395
- type: 'feature_unit',
396
- search: [dependencyId],
397
- search_mode: "keyword"
398
- });
399
-
400
- return result.entities.map(e => e.snapshot);
401
- }
402
- ```
403
-
404
- ### Querying Releases
405
-
406
- ```typescript
407
- // Get current release
408
- async function getCurrentRelease() {
409
- const result = await mcpClient.retrieve_records({
410
- entity_type: 'release',
411
- filters: { status: 'in_progress' },
412
- order_by: 'created_at',
413
- order: 'desc',
414
- limit: 1
415
- });
416
-
417
- return result.entities.length > 0 ? result.entities[0].snapshot : null;
418
- }
419
-
420
- // Get releases containing Feature Unit
421
- async function getReleasesForFeatureUnit(featureUnitId: string) {
422
- const result = await mcpClient.retrieve_records({
423
- entity_type: 'release',
424
- filters: {
425
- feature_units: { contains: featureUnitId }
426
- }
427
- });
428
-
429
- return result.entities.map(e => e.snapshot);
430
- }
431
- ```
432
-
433
- ### Querying Agent Decisions
434
-
435
- ```typescript
436
- // Get recent architectural decisions
437
- async function getArchitecturalDecisions() {
438
- const result = await mcpClient.retrieve_records({
439
- entity_type: 'agent_decision',
440
- filters: { decision_type: 'architectural' },
441
- order_by: 'timestamp',
442
- order: 'desc',
443
- limit: 10
444
- });
445
-
446
- return result.entities.map(e => e.snapshot);
447
- }
448
-
449
- // Get decisions related to Feature Unit
450
- async function getDecisionsForFeatureUnit(featureUnitId: string) {
451
- const result = await mcpClient.retrieve_records({
452
- entity_type: 'agent_decision',
453
- filters: {
454
- 'context.feature_unit': featureUnitId
455
- },
456
- order_by: 'timestamp',
457
- order: 'desc'
458
- });
459
-
460
- return result.entities.map(e => e.snapshot);
461
- }
462
- ```
463
-
464
- ### Querying Session History
465
-
466
- ```typescript
467
- // Get recent sessions
468
- async function getRecentSessions(limit: number = 5) {
469
- const result = await mcpClient.retrieve_records({
470
- type: "agent_session",
471
- limit,
472
- order_by: 'started_at',
473
- order: 'desc'
474
- });
475
-
476
- return result.sessions.map(s => s.snapshot);
477
- }
478
-
479
- // Get specific session
480
- async function getSession(sessionId: string) {
481
- const result = await mcpClient.retrieve_records({
482
- type: "agent_session",
483
- session_id: sessionId
484
- });
485
-
486
- return result.sessions.length > 0 ? result.sessions[0].snapshot : null;
487
- }
488
-
489
- // Restore previous session checkpoint
490
- async function restorePreviousCheckpoint() {
491
- const sessions = await getRecentSessions(1);
492
-
493
- if (sessions.length > 0) {
494
- const lastSession = sessions[0];
495
- const lastCheckpoint = lastSession.checkpoints[lastSession.checkpoints.length - 1];
496
-
497
- if (lastCheckpoint) {
498
- console.log(`Restoring checkpoint: ${lastCheckpoint.name}`);
499
- return lastCheckpoint.state;
500
- }
501
- }
502
-
503
- return null;
504
- }
505
- ```
506
-
507
- ### Querying Entity Timeline
508
-
509
- ```typescript
510
- // Get Feature Unit timeline
511
- async function getFeatureUnitTimeline(featureUnitId: string) {
512
- const result = await mcpClient.query_entity_timeline({
513
- entity_id: featureUnitId,
514
- start_date: '2025-01-01',
515
- end_date: new Date().toISOString().split('T')[0]
516
- });
517
-
518
- return result.events;
519
- }
520
-
521
- // Print timeline
522
- async function printFeatureUnitHistory(featureUnitId: string) {
523
- const events = await getFeatureUnitTimeline(featureUnitId);
524
-
525
- console.log(`\n=== Feature Unit ${featureUnitId} Timeline ===\n`);
526
-
527
- for (const event of events) {
528
- console.log(`${event.timestamp}: ${event.description}`);
529
- if (event.details) {
530
- console.log(` Details: ${JSON.stringify(event.details)}`);
531
- }
532
- }
533
- }
534
- ```
535
-
536
- ## Cross-Session Continuity
537
-
538
- ### Session Restoration
539
-
540
- ```typescript
541
- async function continueFromPreviousSession() {
542
- console.log('Checking for previous session...');
543
-
544
- // Get last session
545
- const sessions = await getRecentSessions(1);
546
-
547
- if (sessions.length === 0) {
548
- console.log('No previous session found, starting fresh');
549
- return null;
550
- }
551
-
552
- const lastSession = sessions[0];
553
- console.log(`Found previous session: ${lastSession.session_id}`);
554
- console.log(`Last action: ${lastSession.actions[lastSession.actions.length - 1]?.type}`);
555
-
556
- // Check if session has checkpoints
557
- if (lastSession.checkpoints.length > 0) {
558
- const lastCheckpoint = lastSession.checkpoints[lastSession.checkpoints.length - 1];
559
- console.log(`Last checkpoint: ${lastCheckpoint.name}`);
560
-
561
- // Restore checkpoint state
562
- return lastCheckpoint.state;
563
- }
564
-
565
- return null;
566
- }
567
-
568
- // Example usage in agent startup
569
- const restoredState = await continueFromPreviousSession();
570
-
571
- if (restoredState) {
572
- console.log('Restored state:', restoredState);
573
- // Continue work from checkpoint
574
- } else {
575
- console.log('Starting new work');
576
- // Start fresh
577
- }
578
- ```
579
-
580
- ### Context Loading
581
-
582
- ```typescript
583
- async function loadWorkContext(featureUnitId: string) {
584
- console.log(`Loading context for Feature Unit ${featureUnitId}...`);
585
-
586
- // Load Feature Unit
587
- const featureUnit = await getFeatureUnit(featureUnitId);
588
-
589
- if (!featureUnit) {
590
- console.log(`Feature Unit ${featureUnitId} not found`);
591
- return null;
592
- }
593
-
594
- // Load related decisions
595
- const decisions = await getDecisionsForFeatureUnit(featureUnitId);
596
-
597
- // Load validation history
598
- const validations = await mcpClient.query_codebase_entities({
599
- entity_type: 'validation_result',
600
- filters: { target: featureUnitId },
601
- order_by: 'timestamp',
602
- order: 'desc',
603
- limit: 5
604
- });
605
-
606
- // Load timeline
607
- const timeline = await getFeatureUnitTimeline(featureUnitId);
608
-
609
- return {
610
- feature_unit: featureUnit,
611
- decisions: decisions.map(d => ({
612
- decision: d.decision,
613
- rationale: d.rationale,
614
- timestamp: d.timestamp
615
- })),
616
- validations: validations.entities.map(v => ({
617
- type: v.snapshot.validation_type,
618
- status: v.snapshot.status,
619
- timestamp: v.snapshot.timestamp
620
- })),
621
- timeline: timeline.map(e => ({
622
- timestamp: e.timestamp,
623
- description: e.description
624
- }))
625
- };
626
- }
627
-
628
- // Example usage
629
- const context = await loadWorkContext('FU-061');
630
- console.log('Loaded context:', context);
631
- ```
632
-
633
- ## Context Degradation Management
634
-
635
- **Agent Skills Reference**: [context-degradation](https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering/blob/main/skills/context-degradation) skill
636
-
637
- ### Problem: Lost-in-the-Middle and Attention Scarcity
638
-
639
- As agent sessions grow longer and context windows fill up, information in the middle of the context can be lost due to:
640
- - **Lost-in-the-middle phenomenon**: LLMs pay less attention to content in the middle of long contexts (U-shaped attention curve)
641
- - **U-shaped attention curves**: Attention is highest at the beginning and end, lower in the middle
642
- - **Attention scarcity**: Context windows are limited by attention mechanics, not just token capacity
643
-
644
- ### Solution: Query-Based Memory Instead of Context Loading
645
-
646
- Neotoma addresses context degradation by providing **persistent, queryable memory** outside the context window:
647
-
648
- **Traditional Approach (Context Degradation Risk):**
649
- ```typescript
650
- // BAD: Load all Feature Units into context
651
- const allFeatureUnits = loadAllFeatureUnitsFromMemory();
652
- // Context window fills up, middle content gets lost
653
- ```
654
-
655
- **Neotoma Approach (No Context Degradation):**
656
- ```typescript
657
- // GOOD: Query only what's needed
658
- const featureUnit = await mcpClient.query_codebase_entities({
659
- entity_type: 'feature_unit',
660
- filters: { id: 'FU-061' },
661
- limit: 1
662
- });
663
- // Only relevant entity loaded, context window preserved
664
- ```
665
-
666
- ### Benefits
667
-
668
- 1. **Selective Loading**: Agents query only relevant entities, not entire memory
669
- 2. **No Context Window Limits**: Memory persists outside context, unlimited size
670
- 3. **Targeted Queries**: Filter by entity type, status, relationships, timestamps
671
- 4. **Progressive Disclosure**: Load foundation → load specific → load related
672
- 5. **Timeline Queries**: Get chronological events without loading all history
673
-
674
- ### Patterns for Context Optimization
675
-
676
- **Agent Skills Principle**: Curate the smallest possible set of **high-signal tokens** that maximize desired outcomes.
677
-
678
- #### Pattern 1: Query on Demand
679
-
680
- ```typescript
681
- // Instead of loading all Feature Units
682
- async function getFeatureUnitContext(id: string) {
683
- // Query only the specific Feature Unit
684
- const result = await mcpClient.retrieve_records({
685
- entity_type: 'feature_unit',
686
- filters: { id },
687
- limit: 1
688
- });
689
-
690
- // Query related entities only if needed
691
- if (result.entities.length > 0) {
692
- const fu = result.entities[0].snapshot;
693
-
694
- // Query related decisions only if needed
695
- const decisions = await mcpClient.query_codebase_entities({
696
- entity_type: 'agent_decision',
697
- filters: { 'context.feature_unit': id },
698
- limit: 5 // Limit to recent decisions
699
- });
700
-
701
- return {
702
- feature_unit: fu,
703
- recent_decisions: decisions.entities.map(e => e.snapshot)
704
- };
705
- }
706
-
707
- return null;
708
- }
709
- ```
710
-
711
- #### Pattern 2: Progressive Disclosure
712
-
713
- ```typescript
714
- // Load foundation first, then specific, then related
715
- async function loadWorkContext(featureUnitId: string) {
716
- // Phase 1: Load foundation (Feature Unit)
717
- const featureUnit = await getFeatureUnit(featureUnitId);
718
-
719
- // Phase 2: Load specific (recent decisions)
720
- const decisions = await getDecisionsForFeatureUnit(featureUnitId, { limit: 3 });
721
-
722
- // Phase 3: Load related (validation results)
723
- const validations = await getValidationsForFeatureUnit(featureUnitId, { limit: 2 });
724
-
725
- // Only load what's needed, when needed
726
- return { featureUnit, decisions, validations };
727
- }
728
- ```
729
-
730
- #### Pattern 3: Timeline Queries Instead of Full History
731
-
732
- ```typescript
733
- // Instead of loading all events
734
- async function getRecentTimeline(entityId: string, days: number = 7) {
735
- const endDate = new Date();
736
- const startDate = new Date();
737
- startDate.setDate(startDate.getDate() - days);
738
-
739
- // Query only recent timeline events
740
- const timeline = await mcpClient.list_timeline_events({
741
- entity_id: entityId,
742
- start_date: startDate.toISOString().split('T')[0],
743
- end_date: endDate.toISOString().split('T')[0]
744
- });
745
-
746
- // Return only recent events (not full history)
747
- return timeline.events.slice(-10); // Last 10 events
748
- }
749
- ```
750
-
751
- #### Pattern 4: Filtered Queries
752
-
753
- ```typescript
754
- // Query only completed Feature Units
755
- const completedFUs = await mcpClient.query_codebase_entities({
756
- entity_type: 'feature_unit',
757
- filters: { status: 'completed' },
758
- limit: 5, // Limit results
759
- order_by: 'updated_at',
760
- order: 'desc'
761
- });
762
-
763
- // Query only architectural decisions
764
- const archDecisions = await mcpClient.query_codebase_entities({
765
- entity_type: 'architectural_decision',
766
- filters: {
767
- status: 'accepted',
768
- decision: { contains: 'storage' } // Filter by keyword
769
- },
770
- limit: 3
771
- });
772
- ```
773
-
774
- ### Context Budget Management
775
-
776
- **Agent Skills Principle**: Attention budget must be allocated across all context to prevent attention scarcity.
777
-
778
- **Recommended Context Budget Allocation:**
779
-
780
- 1. **Foundation Context (20%)**: Core Feature Unit or Release being worked on (high-signal foundation)
781
- 2. **Related Context (30%)**: Recent decisions, validations, related entities (high-signal context)
782
- 3. **Task Context (40%)**: Current task instructions, code, files (current work)
783
- 4. **Reserve (10%)**: Buffer for new information and tool outputs
784
-
785
- **Example:**
786
- ```typescript
787
- async function optimizeContextForTask(featureUnitId: string) {
788
- // 20%: Foundation
789
- const featureUnit = await getFeatureUnit(featureUnitId);
790
-
791
- // 30%: Related (limited to recent)
792
- const recentDecisions = await getDecisionsForFeatureUnit(featureUnitId, { limit: 2 });
793
- const recentValidations = await getValidationsForFeatureUnit(featureUnitId, { limit: 1 });
794
-
795
- // 40%: Task context (provided by agent)
796
- // 10%: Reserve
797
-
798
- return {
799
- foundation: featureUnit,
800
- related: { decisions: recentDecisions, validations: recentValidations }
801
- };
802
- }
803
- ```
804
-
805
- ### Avoiding Context Degradation
806
-
807
- **DO:**
808
- - ✅ Query specific entities by ID
809
- - ✅ Use filters to narrow results
810
- - ✅ Limit query results (use `limit` parameter)
811
- - ✅ Query on demand, not pre-load everything
812
- - ✅ Use timeline queries for recent events only
813
- - ✅ Progressive disclosure (load foundation → specific → related)
814
-
815
- **DON'T:**
816
- - ❌ Load all Feature Units into context
817
- - ❌ Query without filters
818
- - ❌ Load full history when only recent events needed
819
- - ❌ Pre-load all related entities
820
- - ❌ Include entire memory in context
821
-
822
- ### Additional Context Degradation Types
823
-
824
- Beyond lost-in-the-middle, context degradation includes:
825
-
826
- #### Context Poisoning
827
-
828
- **Problem**: Irrelevant or incorrect information corrupts agent reasoning
829
-
830
- **Example**:
831
- ```typescript
832
- // Bad: Loading unrelated entities
833
- const context = {
834
- currentTask: await getFeatureUnit('FU-061'),
835
- allFeatureUnits: await getAllFeatureUnits(), // 50 unrelated FUs
836
- allDecisions: await getAllDecisions() // 100 unrelated decisions
837
- };
838
- // Agent confused by irrelevant information
839
- ```
840
-
841
- **Solution**: Query only directly related entities
842
- ```typescript
843
- // Good: Load only related entities
844
- const context = {
845
- currentTask: await getFeatureUnit('FU-061'),
846
- relatedDecisions: await getDecisionsForFeatureUnit('FU-061', 3),
847
- dependencies: await getFeatureUnitsByIds(currentTask.dependencies)
848
- };
849
- // Only relevant information, no poisoning
850
- ```
851
-
852
- #### Context Distraction
853
-
854
- **Problem**: Relevant but not immediately necessary information distracts from current task
855
-
856
- **Example**:
857
- ```typescript
858
- // Bad: Loading full history when only current state needed
859
- const context = {
860
- featureUnit: await getFeatureUnit('FU-061'),
861
- fullTimeline: await getFullTimeline('FU-061'), // 100 events
862
- allValidations: await getAllValidations('FU-061') // 20 validation runs
863
- };
864
- // Agent distracted by historical details
865
- ```
866
-
867
- **Solution**: Load current state, query history on demand
868
- ```typescript
869
- // Good: Load current state only
870
- const context = {
871
- featureUnit: await getFeatureUnit('FU-061'), // Current state only
872
- recentEvents: await getRecentTimeline('FU-061', 7) // Last 7 days
873
- };
874
- // Focused on current task, history available if needed
875
- ```
876
-
877
- #### Context Clash
878
-
879
- **Problem**: Conflicting information in context (e.g., old status vs. new status)
880
-
881
- **Example**:
882
- ```typescript
883
- // Bad: Loading both old and new versions
884
- const context = {
885
- featureUnit: await getFeatureUnit('FU-061'), // Current: status = 'completed'
886
- oldSnapshot: historicalSnapshots['FU-061'], // Old: status = 'planning'
887
- timeline: await getTimeline('FU-061') // Shows both statuses
888
- };
889
- // Agent confused by conflicting statuses
890
- ```
891
-
892
- **Solution**: Use snapshots (current state), query timeline only when needed
893
- ```typescript
894
- // Good: Load current snapshot only
895
- const context = {
896
- featureUnit: await getFeatureUnit('FU-061') // Current snapshot (completed)
897
- };
898
- // Single source of truth, no conflicting information
899
-
900
- // If history needed, query explicitly
901
- if (needHistory) {
902
- const timeline = await getTimeline('FU-061');
903
- // Timeline shows progression, not conflicting states
904
- }
905
- ```
906
-
907
- ### Preventing Context Degradation
908
-
909
- | Degradation Type | Prevention Strategy | Neotoma Mechanism |
910
- |------------------|---------------------|-------------------|
911
- | Lost-in-the-middle | Query-based loading | Load only relevant entities via filtered queries |
912
- | Context poisoning | Filtered queries | Use `filters` parameter to exclude irrelevant entities |
913
- | Context distraction | Current state focus | Use snapshots (current state) instead of full history |
914
- | Context clash | Single source of truth | Snapshots provide current state, timeline shows progression |
915
- | Attention scarcity | Context budget | 20/30/40/10 allocation prevents overload |
916
-
917
- ### Comparison: With vs. Without Neotoma
918
-
919
- **Without Neotoma (Context Degradation Risk):**
920
- ```typescript
921
- // Load all memory into context
922
- const allMemory = {
923
- featureUnits: loadAllFeatureUnits(), // 50+ entities
924
- releases: loadAllReleases(), // 20+ entities
925
- decisions: loadAllDecisions(), // 100+ entities
926
- sessions: loadAllSessions() // 200+ entities
927
- };
928
- // Context window: 200K tokens
929
- // Risk: Lost-in-the-middle, attention degradation, poisoning, distraction, clash
930
- ```
931
-
932
- **With Neotoma (No Context Degradation):**
933
- ```typescript
934
- // Query only what's needed
935
- const currentFU = await queryFeatureUnit('FU-061'); // 1 entity (current state)
936
- const recentDecisions = await queryDecisions('FU-061', 3); // 3 related entities
937
- const timeline = await queryTimeline('FU-061', 7); // 10 recent events
938
- // Context window: 5K tokens
939
- // Benefit: No degradation, focused attention, no poisoning/distraction/clash
940
- ```
941
-
942
- ## Context Compression
943
-
944
- **Agent Skills Reference**: [context-compression](https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering/blob/main/skills/context-compression) skill
945
-
946
- ### Problem: Token Usage and Information Density
947
-
948
- As agent sessions grow longer, context windows fill with:
949
- - **Redundant information**: Same entities referenced multiple times
950
- - **Full history**: All observations instead of current state
951
- - **Duplicate data**: Multiple representations of same facts
952
- - **Verbose context**: Unnecessary details for current task
953
-
954
- Context compression reduces token usage while preserving information density through summarization, deduplication, and progressive disclosure.
955
-
956
- ### Solution: Compression Through Entity Resolution and Snapshots
957
-
958
- Neotoma compresses context through multiple mechanisms:
959
-
960
- 1. **Entity Resolution (Deduplication)**: Multiple observations about same entity resolve to single entity
961
- 2. **Snapshot Compression**: Current state instead of full observation history
962
- 3. **Timeline Summarization**: Recent events only, not full history
963
- 4. **Selective Loading**: Query only relevant entities, not entire memory
964
- 5. **Checkpoint Restoration**: Restore compressed state instead of full history
965
-
966
- ### Compression Mechanisms
967
-
968
- #### 1. Entity Resolution (Automatic Deduplication)
969
-
970
- **Problem**: Same entity referenced multiple times in context
971
- ```typescript
972
- // Without compression: Multiple references
973
- const context = {
974
- featureUnit1: { id: 'FU-061', status: 'completed' },
975
- featureUnit2: { id: 'FU-061', status: 'completed' }, // Duplicate
976
- featureUnit3: { id: 'FU-061', status: 'completed' } // Duplicate
977
- };
978
- // 3x token usage for same entity
979
- ```
980
-
981
- **Solution**: Entity resolution unifies duplicates
982
- ```typescript
983
- // With Neotoma: Single resolved entity
984
- const featureUnit = await mcpClient.query_codebase_entities({
985
- entity_type: 'feature_unit',
986
- filters: { id: 'FU-061' },
987
- limit: 1
988
- });
989
- // 1x token usage, entity resolution handles duplicates
990
- ```
991
-
992
- **Compression Ratio**: 3:1 (3 references → 1 entity)
993
-
994
- #### 2. Snapshot Compression (Current State vs. Full History)
995
-
996
- **Problem**: Full observation history is verbose
997
- ```typescript
998
- // Without compression: Full history
999
- const featureUnitHistory = {
1000
- observations: [
1001
- { timestamp: '2025-12-01', status: 'planning' },
1002
- { timestamp: '2025-12-05', status: 'in_progress' },
1003
- { timestamp: '2025-12-10', status: 'in_progress' },
1004
- { timestamp: '2025-12-15', status: 'completed' },
1005
- { timestamp: '2025-12-20', status: 'deployed' }
1006
- ]
1007
- };
1008
- // 5 observations, ~500 tokens
1009
- ```
1010
-
1011
- **Solution**: Snapshot provides current state only
1012
- ```typescript
1013
- // With Neotoma: Current snapshot
1014
- const featureUnit = await mcpClient.query_codebase_entities({
1015
- entity_type: 'feature_unit',
1016
- filters: { id: 'FU-061' }
1017
- });
1018
-
1019
- const snapshot = featureUnit.entities[0].snapshot;
1020
- // { id: 'FU-061', status: 'deployed', ... }
1021
- // 1 snapshot, ~100 tokens
1022
- ```
1023
-
1024
- **Compression Ratio**: 5:1 (5 observations → 1 snapshot)
1025
-
1026
- #### 3. Timeline Summarization (Recent Events Only)
1027
-
1028
- **Problem**: Full timeline history is large
1029
- ```typescript
1030
- // Without compression: Full timeline
1031
- const fullTimeline = {
1032
- events: [
1033
- { date: '2025-01-01', event: 'Created' },
1034
- { date: '2025-02-01', event: 'Updated' },
1035
- // ... 100 more events
1036
- { date: '2025-12-31', event: 'Deployed' }
1037
- ]
1038
- };
1039
- // 102 events, ~10K tokens
1040
- ```
1041
-
1042
- **Solution**: Query recent events only
1043
- ```typescript
1044
- // With Neotoma: Recent timeline
1045
- const recentTimeline = await mcpClient.query_entity_timeline({
1046
- entity_id: 'FU-061',
1047
- start_date: '2025-12-01', // Last 30 days only
1048
- end_date: '2025-12-31'
1049
- });
1050
- // 5 events, ~500 tokens
1051
- ```
1052
-
1053
- **Compression Ratio**: 20:1 (102 events → 5 recent events)
1054
-
1055
- #### 4. Selective Loading (Query-Based Compression)
1056
-
1057
- **Problem**: Loading all entities fills context
1058
- ```typescript
1059
- // Without compression: Load everything
1060
- const allMemory = {
1061
- featureUnits: loadAllFeatureUnits(), // 50 entities
1062
- releases: loadAllReleases(), // 20 entities
1063
- decisions: loadAllDecisions(), // 100 entities
1064
- sessions: loadAllSessions() // 200 entities
1065
- };
1066
- // 370 entities, ~200K tokens
1067
- ```
1068
-
1069
- **Solution**: Query only what's needed
1070
- ```typescript
1071
- // With Neotoma: Selective loading
1072
- const currentFU = await queryFeatureUnit('FU-061'); // 1 entity
1073
- const relatedDecisions = await queryDecisions('FU-061', 3); // 3 entities
1074
- // 4 entities, ~2K tokens
1075
- ```
1076
-
1077
- **Compression Ratio**: 92:1 (370 entities → 4 relevant entities)
1078
-
1079
- #### 5. Checkpoint Restoration (Compressed State)
1080
-
1081
- **Problem**: Restoring full session history is verbose
1082
- ```typescript
1083
- // Without compression: Full session history
1084
- const sessionHistory = {
1085
- session_id: 'abc123',
1086
- actions: [
1087
- { type: 'create_feature_unit', result: 'success', ... },
1088
- { type: 'run_tests', result: 'passed', ... },
1089
- // ... 50 more actions
1090
- ],
1091
- checkpoints: [
1092
- { name: 'spec_complete', state: { ...full_state... } },
1093
- { name: 'tests_passing', state: { ...full_state... } },
1094
- // ... 10 more checkpoints
1095
- ]
1096
- };
1097
- // Full history, ~50K tokens
1098
- ```
1099
-
1100
- **Solution**: Restore from checkpoint (compressed state)
1101
- ```typescript
1102
- // With Neotoma: Checkpoint restoration
1103
- const session = await mcpClient.query_agent_history({
1104
- session_id: 'abc123'
1105
- });
1106
-
1107
- const lastCheckpoint = session.sessions[0].snapshot.checkpoints[
1108
- session.sessions[0].snapshot.checkpoints.length - 1
1109
- ];
1110
-
1111
- // Restore compressed checkpoint state
1112
- const restoredState = lastCheckpoint.state;
1113
- // Compressed state, ~2K tokens
1114
- ```
1115
-
1116
- **Compression Ratio**: 25:1 (50K tokens → 2K tokens)
1117
-
1118
- ### Compression Patterns
1119
-
1120
- #### Pattern 1: Entity-Based Compression
1121
-
1122
- ```typescript
1123
- // Compress by querying single entity instead of multiple references
1124
- async function getCompressedFeatureUnitContext(id: string) {
1125
- // Single query returns resolved entity (deduplicated)
1126
- const result = await mcpClient.retrieve_records({
1127
- entity_type: 'feature_unit',
1128
- filters: { id },
1129
- limit: 1
1130
- });
1131
-
1132
- // Snapshot provides current state (compressed from full history)
1133
- return result.entities[0].snapshot;
1134
- }
1135
- ```
1136
-
1137
- #### Pattern 2: Timeline Compression
1138
-
1139
- ```typescript
1140
- // Compress timeline to recent events only
1141
- async function getCompressedTimeline(entityId: string, days: number = 7) {
1142
- const endDate = new Date();
1143
- const startDate = new Date();
1144
- startDate.setDate(startDate.getDate() - days);
1145
-
1146
- // Query only recent events (compressed from full history)
1147
- const timeline = await mcpClient.list_timeline_events({
1148
- entity_id: entityId,
1149
- start_date: startDate.toISOString().split('T')[0],
1150
- end_date: endDate.toISOString().split('T')[0]
1151
- });
1152
-
1153
- // Return only last N events (further compression)
1154
- return timeline.events.slice(-10);
1155
- }
1156
- ```
1157
-
1158
- #### Pattern 3: Relationship Compression
1159
-
1160
- ```typescript
1161
- // Compress by querying relationships instead of loading all entities
1162
- async function getCompressedRelationships(featureUnitId: string) {
1163
- // Query only related entities (compressed from all entities)
1164
- const relatedDecisions = await mcpClient.query_codebase_entities({
1165
- entity_type: 'agent_decision',
1166
- filters: { 'context.feature_unit': featureUnitId },
1167
- limit: 3 // Limit to recent (compression)
1168
- });
1169
-
1170
- // Return only essential relationship data
1171
- return relatedDecisions.entities.map(e => ({
1172
- decision: e.snapshot.decision,
1173
- timestamp: e.snapshot.timestamp
1174
- // Compressed: only essential fields, not full snapshot
1175
- }));
1176
- }
1177
- ```
1178
-
1179
- #### Pattern 4: Checkpoint Compression
1180
-
1181
- ```typescript
1182
- // Compress session restoration via checkpoints
1183
- async function restoreCompressedCheckpoint(sessionId: string, checkpointName: string) {
1184
- const session = await mcpClient.query_agent_history({
1185
- session_id: sessionId
1186
- });
1187
-
1188
- // Find specific checkpoint (compressed state)
1189
- const checkpoint = session.sessions[0].snapshot.checkpoints.find(
1190
- cp => cp.name === checkpointName
1191
- );
1192
-
1193
- // Return compressed checkpoint state
1194
- return checkpoint?.state || null;
1195
- }
1196
- ```
1197
-
1198
- ### Compression Metrics
1199
-
1200
- **Typical Compression Ratios:**
1201
-
1202
- | Compression Type | Without Neotoma | With Neotoma | Ratio |
1203
- |------------------|-----------------|--------------|-------|
1204
- | Entity Resolution | 3 references | 1 entity | 3:1 |
1205
- | Snapshot Compression | 5 observations | 1 snapshot | 5:1 |
1206
- | Timeline Summarization | 102 events | 5 recent events | 20:1 |
1207
- | Selective Loading | 370 entities | 4 relevant entities | 92:1 |
1208
- | Checkpoint Restoration | 50K tokens | 2K tokens | 25:1 |
1209
-
1210
- **Combined Compression**: Up to 100:1 reduction in context size
1211
-
1212
- ### Best Practices for Compression
1213
-
1214
- **DO:**
1215
- - ✅ Use entity resolution (query by ID, not load all)
1216
- - ✅ Use snapshots (current state, not full history)
1217
- - ✅ Query recent timeline only (limit date range)
1218
- - ✅ Use selective loading (filters and limits)
1219
- - ✅ Restore from checkpoints (compressed state)
1220
- - ✅ Query relationships on demand (not pre-load)
1221
-
1222
- **DON'T:**
1223
- - ❌ Load all entities into context
1224
- - ❌ Include full observation history
1225
- - ❌ Query full timeline without date limits
1226
- - ❌ Pre-load all related entities
1227
- - ❌ Restore full session history
1228
- - ❌ Include duplicate entity references
1229
-
1230
- ### Compression Example: Before vs. After
1231
-
1232
- **Before (No Compression):**
1233
- ```typescript
1234
- // Load everything
1235
- const context = {
1236
- allFeatureUnits: loadAllFeatureUnits(), // 50 entities, 50K tokens
1237
- allReleases: loadAllReleases(), // 20 entities, 20K tokens
1238
- allDecisions: loadAllDecisions(), // 100 entities, 100K tokens
1239
- fullTimeline: loadFullTimeline('FU-061'), // 102 events, 10K tokens
1240
- fullSessionHistory: loadFullSession('abc123') // 50 actions, 50K tokens
1241
- };
1242
- // Total: ~230K tokens
1243
- ```
1244
-
1245
- **After (With Neotoma Compression):**
1246
- ```typescript
1247
- // Query only what's needed
1248
- const context = {
1249
- featureUnit: await queryFeatureUnit('FU-061'), // 1 entity, 1K tokens
1250
- recentDecisions: await queryDecisions('FU-061', 3), // 3 entities, 3K tokens
1251
- recentTimeline: await queryTimeline('FU-061', 7), // 5 events, 500 tokens
1252
- checkpoint: await restoreCheckpoint('abc123', 'spec_complete') // 1 checkpoint, 2K tokens
1253
- };
1254
- // Total: ~6.5K tokens
1255
- // Compression: 35:1 ratio
1256
- ```
1257
-
1258
- ## Best Practices
1259
-
1260
- ### 1. Always Check Neotoma Availability
1261
-
1262
- ```typescript
1263
- // Good
1264
- if (await isNeotomaAvailable()) {
1265
- await mcpClient.submit_payload({
1266
- capability_id: "neotoma:store_feature_unit:v1",
1267
- body: featureUnit,
1268
- provenance: {
1269
- source_refs: [],
1270
- extracted_at: new Date().toISOString(),
1271
- extractor_version: "neotoma-mcp:v0.2.3"
1272
- }
1273
- });
1274
- } else {
1275
- await writeToLocalMemory('feature_units', featureUnit.id, featureUnit);
1276
- }
1277
-
1278
- // Bad (no fallback)
1279
- await mcpClient.submit_payload({
1280
- capability_id: "neotoma:store_feature_unit:v1",
1281
- body: featureUnit,
1282
- provenance: {
1283
- source_refs: [],
1284
- extracted_at: new Date().toISOString(),
1285
- extractor_version: "neotoma-mcp:v0.2.3"
1286
- }
1287
- }); // May fail if Neotoma unavailable
1288
- ```
1289
-
1290
- ### 2. Use Timestamps Consistently
1291
-
1292
- ```typescript
1293
- // Good
1294
- const now = new Date().toISOString();
1295
- await mcpClient.submit_feature_unit({
1296
- id: 'FU-061',
1297
- created_at: now,
1298
- updated_at: now
1299
- });
1300
-
1301
- // Bad (missing timestamps)
1302
- await mcpClient.submit_feature_unit({
1303
- id: 'FU-061'
1304
- // Missing created_at and updated_at
1305
- });
1306
- ```
1307
-
1308
- ### 3. Provide Context in Decisions
1309
-
1310
- ```typescript
1311
- // Good
1312
- await mcpClient.submit_agent_decision({
1313
- decision: 'Use content-addressed storage',
1314
- rationale: 'Enables deduplication',
1315
- context: {
1316
- feature_unit: 'FU-061',
1317
- session_id: 'abc123',
1318
- task: 'Design storage layer'
1319
- },
1320
- decision_type: 'technical',
1321
- timestamp: new Date().toISOString()
1322
- });
1323
-
1324
- // Bad (no context)
1325
- await mcpClient.submit_agent_decision({
1326
- decision: 'Use content-addressed storage',
1327
- rationale: 'Enables deduplication',
1328
- timestamp: new Date().toISOString()
1329
- // Missing context
1330
- });
1331
- ```
1332
-
1333
- ### 4. Track Session History
1334
-
1335
- ```typescript
1336
- // Good
1337
- const session = {
1338
- session_id: generateSessionId(),
1339
- actions: [
1340
- { type: 'create_feature_unit', result: 'success' },
1341
- { type: 'run_tests', result: 'passed' }
1342
- ],
1343
- checkpoints: [
1344
- { name: 'spec_complete', timestamp: new Date().toISOString() }
1345
- ],
1346
- outcomes: [
1347
- { type: 'feature_unit_created', id: 'FU-061' }
1348
- ],
1349
- started_at: sessionStart,
1350
- ended_at: new Date().toISOString()
1351
- };
1352
- await mcpClient.submit_agent_session(session);
1353
-
1354
- // Bad (minimal tracking)
1355
- const session = {
1356
- session_id: generateSessionId(),
1357
- actions: [{ type: 'work', result: 'success' }],
1358
- started_at: sessionStart
1359
- };
1360
- await mcpClient.submit_agent_session(session);
1361
- ```
1362
-
1363
- ### 5. Use Entity Resolution
1364
-
1365
- ```typescript
1366
- // Good (entity resolution by ID)
1367
- await mcpClient.submit_feature_unit({
1368
- id: 'FU-061', // Same ID resolves to same entity
1369
- status: 'completed',
1370
- updated_at: new Date().toISOString()
1371
- });
1372
-
1373
- // Bad (no stable ID)
1374
- await mcpClient.submit_feature_unit({
1375
- id: generateRandomId(), // New ID creates duplicate entity
1376
- status: 'completed'
1377
- });
1378
- ```
1379
-
1380
- ### 6. Query Before Creating
1381
-
1382
- ```typescript
1383
- // Good (check if exists first)
1384
- const existing = await getFeatureUnit('FU-061');
1385
- if (!existing) {
1386
- await mcpClient.submit_feature_unit({
1387
- id: 'FU-061',
1388
- description: 'Add sources table',
1389
- status: 'planning',
1390
- created_at: new Date().toISOString(),
1391
- updated_at: new Date().toISOString()
1392
- });
1393
- }
1394
-
1395
- // Bad (always create)
1396
- await mcpClient.submit_feature_unit({
1397
- id: 'FU-061',
1398
- // ...
1399
- }); // May create duplicate observations
1400
- ```
1401
-
1402
- ### 7. Handle Errors Gracefully
1403
-
1404
- ```typescript
1405
- // Good
1406
- try {
1407
- await mcpClient.submit_payload({
1408
- capability_id: "neotoma:store_feature_unit:v1",
1409
- body: featureUnit,
1410
- provenance: {
1411
- source_refs: [],
1412
- extracted_at: new Date().toISOString(),
1413
- extractor_version: "neotoma-mcp:v0.2.3"
1414
- }
1415
- });
1416
- } catch (error) {
1417
- console.error('Failed to store Feature Unit:', error);
1418
- // Fallback to local memory
1419
- await writeToLocalMemory('feature_units', featureUnit.id, featureUnit);
1420
- }
1421
-
1422
- // Bad (no error handling)
1423
- await mcpClient.submit_payload({
1424
- capability_id: "neotoma:store_feature_unit:v1",
1425
- body: featureUnit,
1426
- provenance: {
1427
- source_refs: [],
1428
- extracted_at: new Date().toISOString(),
1429
- extractor_version: "neotoma-mcp:v0.2.3"
1430
- }
1431
- }); // May crash agent
1432
- ```
1433
-
1434
- ### 8. Follow Entity Naming Conventions
1435
-
1436
- **Feature Units**: Use `FU-\d+` pattern (e.g., "FU-061", "FU-062")
1437
- ```typescript
1438
- // Good
1439
- await mcpClient.submit_feature_unit({
1440
- id: 'FU-061', // Matches pattern FU-\d+
1441
- // ...
1442
- });
1443
-
1444
- // Bad
1445
- await mcpClient.submit_feature_unit({
1446
- id: 'feature-unit-61', // Doesn't match pattern
1447
- // ...
1448
- });
1449
- ```
1450
-
1451
- **Releases**: Use `v\d+\.\d+\.\d+` pattern (e.g., "v0.2.3", "v1.0.0")
1452
- ```typescript
1453
- // Good
1454
- await mcpClient.submit_payload({
1455
- capability_id: "neotoma:store_release:v1",
1456
- body: {
1457
- id: 'v0.2.3', // Matches pattern v\d+\.\d+\.\d+
1458
- version: '0.2.3',
1459
- // ...
1460
- });
1461
-
1462
- // Bad
1463
- await mcpClient.submit_payload({
1464
- capability_id: "neotoma:store_release:v1",
1465
- body: {
1466
- id: 'release-0.2.3', // Doesn't match pattern
1467
- // ...
1468
- });
1469
- ```
1470
-
1471
- **Session IDs**: Use descriptive, unique identifiers (min 5 chars)
1472
- ```typescript
1473
- // Good
1474
- const sessionId = `session-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
1475
-
1476
- // Bad
1477
- const sessionId = 'abc'; // Too short (min 5 chars)
1478
- ```
1479
-
1480
- ### 9. Optimize Timeline Queries
1481
-
1482
- **Use Date Ranges**: Query only relevant time periods
1483
- ```typescript
1484
- // Good (optimized: last 7 days only)
1485
- const timeline = await mcpClient.query_entity_timeline({
1486
- entity_id: 'FU-061',
1487
- start_date: '2025-12-24', // Last 7 days
1488
- end_date: '2025-12-31'
1489
- });
1490
-
1491
- // Bad (no date range: full history)
1492
- const timeline = await mcpClient.query_entity_timeline({
1493
- entity_id: 'FU-061'
1494
- // No date range = loads full history
1495
- });
1496
- ```
1497
-
1498
- **Limit Event Types**: Filter by event types when possible
1499
- ```typescript
1500
- // Good (filtered: only created/updated events)
1501
- const timeline = await mcpClient.query_entity_timeline({
1502
- entity_id: 'FU-061',
1503
- event_types: ['created', 'updated']
1504
- });
1505
-
1506
- // Bad (all event types)
1507
- const timeline = await mcpClient.query_entity_timeline({
1508
- entity_id: 'FU-061'
1509
- // All event types = more data
1510
- });
1511
- ```
1512
-
1513
- **Use Recent Events Only**: Slice results to most recent
1514
- ```typescript
1515
- // Good (recent events only)
1516
- const timeline = await mcpClient.query_entity_timeline({
1517
- entity_id: 'FU-061',
1518
- start_date: '2025-12-24',
1519
- end_date: '2025-12-31'
1520
- });
1521
- const recentEvents = timeline.events.slice(-10); // Last 10 events
1522
-
1523
- // Bad (all events)
1524
- const timeline = await mcpClient.query_entity_timeline({
1525
- entity_id: 'FU-061'
1526
- });
1527
- // Uses all events, not just recent
1528
- ```
1529
-
1530
- ## Integration Checklist
1531
-
1532
- - [ ] MCP client initialized
1533
- - [ ] Neotoma availability check implemented
1534
- - [ ] Graceful degradation to `.cursor/memory/` implemented
1535
- - [ ] Feature Unit storage implemented
1536
- - [ ] Release storage implemented
1537
- - [ ] Decision recording implemented
1538
- - [ ] Session history tracking implemented
1539
- - [ ] Validation result recording implemented
1540
- - [ ] Entity query patterns implemented
1541
- - [ ] Timeline query patterns implemented
1542
- - [ ] Cross-session continuity implemented
1543
- - [ ] Error handling implemented
1544
- - [ ] Timestamps in ISO 8601 format
1545
- - [ ] Context provided in decisions
1546
- - [ ] Entity IDs stable and consistent
1547
-
1548
- ## Testing Integration
1549
-
1550
- ### Unit Tests
1551
-
1552
- ```typescript
1553
- // test/memory_service.test.ts
1554
- describe('Memory Service', () => {
1555
- it('should store Feature Unit in Neotoma when available', async () => {
1556
- mockNeotomaAvailable(true);
1557
-
1558
- const featureUnit = {
1559
- id: 'FU-061',
1560
- description: 'Test FU',
1561
- status: 'planning',
1562
- created_at: new Date().toISOString(),
1563
- updated_at: new Date().toISOString()
1564
- };
1565
-
1566
- const result = await storeFeatureUnit(featureUnit);
1567
-
1568
- expect(result.entity_id).toBeDefined();
1569
- expect(mcpClient.submit_feature_unit).toHaveBeenCalledWith(featureUnit);
1570
- });
1571
-
1572
- it('should fallback to local memory when Neotoma unavailable', async () => {
1573
- mockNeotomaAvailable(false);
1574
-
1575
- const featureUnit = {
1576
- id: 'FU-061',
1577
- description: 'Test FU',
1578
- status: 'planning',
1579
- created_at: new Date().toISOString(),
1580
- updated_at: new Date().toISOString()
1581
- };
1582
-
1583
- const result = await storeFeatureUnit(featureUnit);
1584
-
1585
- expect(writeToLocalMemory).toHaveBeenCalledWith('feature_units', 'FU-061', featureUnit);
1586
- });
1587
- });
1588
- ```
1589
-
1590
- ### Integration Tests
1591
-
1592
- ```typescript
1593
- // test/neotoma_integration.test.ts
1594
- describe('Neotoma Integration', () => {
1595
- it('should store and retrieve Feature Unit', async () => {
1596
- const featureUnit = {
1597
- id: 'FU-TEST-001',
1598
- description: 'Test Feature Unit',
1599
- status: 'planning',
1600
- created_at: new Date().toISOString(),
1601
- updated_at: new Date().toISOString()
1602
- };
1603
-
1604
- // Store
1605
- await storeFeatureUnit(featureUnit);
1606
-
1607
- // Retrieve
1608
- const retrieved = await getFeatureUnit('FU-TEST-001');
1609
-
1610
- expect(retrieved).toBeDefined();
1611
- expect(retrieved.id).toBe('FU-TEST-001');
1612
- expect(retrieved.description).toBe('Test Feature Unit');
1613
- });
1614
-
1615
- it('should generate timeline for Feature Unit', async () => {
1616
- const featureUnit = {
1617
- id: 'FU-TEST-002',
1618
- description: 'Test Feature Unit',
1619
- status: 'planning',
1620
- created_at: new Date().toISOString(),
1621
- updated_at: new Date().toISOString()
1622
- };
1623
-
1624
- // Store
1625
- await storeFeatureUnit(featureUnit);
1626
-
1627
- // Update status
1628
- featureUnit.status = 'completed';
1629
- featureUnit.updated_at = new Date().toISOString();
1630
- await storeFeatureUnit(featureUnit);
1631
-
1632
- // Query timeline
1633
- const timeline = await getFeatureUnitTimeline('FU-TEST-002');
1634
-
1635
- expect(timeline.length).toBeGreaterThan(0);
1636
- expect(timeline.some(e => e.description.includes('created'))).toBe(true);
1637
- expect(timeline.some(e => e.description.includes('completed'))).toBe(true);
1638
- });
1639
- });
1640
- ```
1641
-
1642
- ## Performance Considerations
1643
-
1644
- ### Batch Operations
1645
-
1646
- ```typescript
1647
- // Good (batch queries)
1648
- const featureUnitIds = ['FU-061', 'FU-062', 'FU-063'];
1649
- const result = await mcpClient.query_codebase_entities({
1650
- entity_type: 'feature_unit',
1651
- filters: {
1652
- id: { in: featureUnitIds }
1653
- }
1654
- });
1655
-
1656
- // Bad (individual queries)
1657
- const featureUnits = [];
1658
- for (const id of featureUnitIds) {
1659
- const fu = await getFeatureUnit(id);
1660
- featureUnits.push(fu);
1661
- }
1662
- ```
1663
-
1664
- ### Caching
1665
-
1666
- ```typescript
1667
- // Cache frequently accessed entities
1668
- const entityCache = new Map<string, any>();
1669
-
1670
- async function getCachedFeatureUnit(id: string) {
1671
- if (entityCache.has(id)) {
1672
- return entityCache.get(id);
1673
- }
1674
-
1675
- const featureUnit = await getFeatureUnit(id);
1676
-
1677
- if (featureUnit) {
1678
- entityCache.set(id, featureUnit);
1679
- }
1680
-
1681
- return featureUnit;
1682
- }
1683
- ```
1684
-
1685
- ## Multi-Agent Patterns
1686
-
1687
- **Agent Skills Reference**: [multi-agent-patterns](https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering/blob/main/skills/multi-agent-patterns) skill
1688
-
1689
- ### Overview
1690
-
1691
- Neotoma's unified memory system enables multiple agents to collaborate effectively through shared memory access. Multiple agents can simultaneously read and write to the same memory, with entity resolution ensuring consistency and timeline queries providing coordination context.
1692
-
1693
- This section implements Agent Skills multi-agent patterns: orchestrator (supervisor delegates to specialists), peer-to-peer (agents collaborate as equals), and hierarchical (multi-tier organization).
1694
-
1695
- ### Shared Memory Architecture
1696
-
1697
- ```
1698
- ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
1699
- │ Agent A │ │ Agent B │ │ Agent C │
1700
- │ (Cursor) │ │ (ChatGPT) │ │ (Claude) │
1701
- └──────┬──────┘ └──────┬──────┘ └──────┬──────┘
1702
- │ │ │
1703
- │ MCP Protocol │ MCP Protocol │
1704
- │ │ │
1705
- └────────────────┼────────────────┘
1706
-
1707
-
1708
- ┌──────────────────┐
1709
- │ Neotoma MCP │
1710
- │ Unified Memory │
1711
- └──────────────────┘
1712
- ```
1713
-
1714
- ### Pattern 1: Orchestrator Pattern
1715
-
1716
- **Description**: A supervisor agent delegates tasks to specialist agents, all using Neotoma for coordination.
1717
-
1718
- **Implementation**:
1719
-
1720
- ```typescript
1721
- // Orchestrator agent creates tasks
1722
- async function orchestratorCreateTask(taskDescription: string) {
1723
- // Orchestrator records decision
1724
- const decision = await mcpClient.submit_agent_decision({
1725
- decision: `Delegate task: ${taskDescription}`,
1726
- rationale: 'Task requires specialist expertise',
1727
- context: {
1728
- task: taskDescription,
1729
- orchestrator: 'main-agent',
1730
- specialists_needed: ['specialist-a', 'specialist-b']
1731
- },
1732
- decision_type: 'process',
1733
- timestamp: new Date().toISOString(),
1734
- agent_id: 'orchestrator-agent'
1735
- });
1736
-
1737
- // Orchestrator creates Feature Unit for task
1738
- await mcpClient.submit_feature_unit({
1739
- id: generateFeatureUnitId(),
1740
- description: taskDescription,
1741
- status: 'planning',
1742
- created_at: new Date().toISOString(),
1743
- updated_at: new Date().toISOString()
1744
- });
1745
-
1746
- return decision;
1747
- }
1748
-
1749
- // Specialist agent picks up task
1750
- async function specialistPickUpTask(agentId: string) {
1751
- // Query for tasks needing work
1752
- const tasks = await mcpClient.query_codebase_entities({
1753
- entity_type: 'feature_unit',
1754
- filters: { status: 'planning' },
1755
- limit: 5
1756
- });
1757
-
1758
- // Pick first available task
1759
- const task = tasks.entities[0];
1760
-
1761
- // Record that specialist is starting work
1762
- await mcpClient.submit_feature_unit({
1763
- ...task.snapshot,
1764
- status: 'in_progress',
1765
- updated_at: new Date().toISOString()
1766
- });
1767
-
1768
- // Start session
1769
- const session = await mcpClient.submit_agent_session({
1770
- session_id: generateSessionId(),
1771
- actions: [{
1772
- type: 'start_task',
1773
- result: 'success',
1774
- details: { task_id: task.snapshot.id }
1775
- }],
1776
- started_at: new Date().toISOString()
1777
- });
1778
-
1779
- return { task, session };
1780
- }
1781
-
1782
- // Specialist completes and reports back
1783
- async function specialistCompleteTask(taskId: string, sessionId: string) {
1784
- // Update task status
1785
- await mcpClient.submit_feature_unit({
1786
- id: taskId,
1787
- status: 'completed',
1788
- updated_at: new Date().toISOString()
1789
- });
1790
-
1791
- // Record session completion
1792
- await mcpClient.submit_agent_session({
1793
- session_id: sessionId,
1794
- actions: [
1795
- { type: 'start_task', result: 'success' },
1796
- { type: 'complete_task', result: 'success' }
1797
- ],
1798
- outcomes: [
1799
- { type: 'feature_unit_completed', id: taskId }
1800
- ],
1801
- ended_at: new Date().toISOString()
1802
- });
1803
-
1804
- console.log(`Specialist completed task ${taskId}`);
1805
- }
1806
-
1807
- // Orchestrator monitors progress
1808
- async function orchestratorMonitorProgress() {
1809
- // Query all in-progress tasks
1810
- const inProgress = await mcpClient.query_codebase_entities({
1811
- entity_type: 'feature_unit',
1812
- filters: { status: 'in_progress' }
1813
- });
1814
-
1815
- console.log(`${inProgress.entities.length} tasks in progress`);
1816
-
1817
- // Query recent sessions to see which specialists are active
1818
- const sessions = await mcpClient.query_agent_history({
1819
- limit: 10,
1820
- order_by: 'started_at',
1821
- order: 'desc'
1822
- });
1823
-
1824
- return {
1825
- in_progress: inProgress.entities,
1826
- active_sessions: sessions.sessions
1827
- };
1828
- }
1829
- ```
1830
-
1831
- **Use Case**: Complex feature development with specialized agents (frontend specialist, backend specialist, testing specialist).
1832
-
1833
- ### Pattern 2: Peer-to-Peer Pattern
1834
-
1835
- **Description**: Agents collaborate as equals, sharing information through Neotoma without a central coordinator.
1836
-
1837
- **Implementation**:
1838
-
1839
- ```typescript
1840
- // Agent A shares discovery
1841
- async function agentShareDiscovery(agentId: string, discovery: string) {
1842
- await mcpClient.submit_agent_decision({
1843
- decision: discovery,
1844
- rationale: 'Discovered during investigation',
1845
- context: {
1846
- agent_id: agentId,
1847
- shared_with: 'all-agents',
1848
- discovery_type: 'architectural_insight'
1849
- },
1850
- decision_type: 'technical',
1851
- timestamp: new Date().toISOString(),
1852
- agent_id: agentId
1853
- });
1854
-
1855
- console.log(`Agent ${agentId} shared discovery: ${discovery}`);
1856
- }
1857
-
1858
- // Agent B queries discoveries from peers
1859
- async function agentQueryPeerDiscoveries() {
1860
- const discoveries = await mcpClient.query_codebase_entities({
1861
- entity_type: 'agent_decision',
1862
- filters: {
1863
- 'context.shared_with': 'all-agents'
1864
- },
1865
- order_by: 'timestamp',
1866
- order: 'desc',
1867
- limit: 10
1868
- });
1869
-
1870
- console.log(`Found ${discoveries.entities.length} peer discoveries`);
1871
-
1872
- return discoveries.entities.map(e => ({
1873
- decision: e.snapshot.decision,
1874
- agent: e.snapshot.agent_id,
1875
- timestamp: e.snapshot.timestamp
1876
- }));
1877
- }
1878
-
1879
- // Agent C builds on peer discovery
1880
- async function agentBuildOnPeerDiscovery(priorDecisionId: string, agentId: string) {
1881
- // Query the prior decision
1882
- const priorDecisions = await mcpClient.query_codebase_entities({
1883
- entity_type: 'agent_decision',
1884
- filters: { id: priorDecisionId },
1885
- limit: 1
1886
- });
1887
-
1888
- const priorDecision = priorDecisions.entities[0].snapshot;
1889
-
1890
- // Build on it with new decision
1891
- await mcpClient.submit_agent_decision({
1892
- decision: `Building on: ${priorDecision.decision}`,
1893
- rationale: 'Extending peer discovery with implementation details',
1894
- context: {
1895
- agent_id: agentId,
1896
- builds_on: priorDecisionId,
1897
- prior_agent: priorDecision.agent_id
1898
- },
1899
- decision_type: 'technical',
1900
- timestamp: new Date().toISOString(),
1901
- agent_id: agentId
1902
- });
1903
-
1904
- console.log(`Agent ${agentId} built on discovery from ${priorDecision.agent_id}`);
1905
- }
1906
- ```
1907
-
1908
- **Use Case**: Research tasks where multiple agents explore different approaches and share findings.
1909
-
1910
- ### Pattern 3: Hierarchical Pattern
1911
-
1912
- **Description**: Multi-tier agent organization with supervisors, managers, and workers.
1913
-
1914
- **Implementation**:
1915
-
1916
- ```typescript
1917
- // Supervisor agent creates release plan
1918
- async function supervisorCreateReleasePlan(releaseId: string, featureUnits: string[]) {
1919
- await mcpClient.submit_payload({
1920
- capability_id: "neotoma:store_release:v1",
1921
- body: {
1922
- id: releaseId,
1923
- version: releaseId.replace('v', ''),
1924
- feature_units: featureUnits,
1925
- status: 'planning',
1926
- acceptance_criteria: [
1927
- 'All Feature Units completed',
1928
- 'All validations passing',
1929
- 'Integration tests passing'
1930
- ],
1931
- created_at: new Date().toISOString(),
1932
- updated_at: new Date().toISOString()
1933
- });
1934
-
1935
- // Record decision
1936
- await mcpClient.submit_agent_decision({
1937
- decision: `Create release ${releaseId} with ${featureUnits.length} Feature Units`,
1938
- rationale: 'Release scoped based on dependencies and priority',
1939
- context: {
1940
- role: 'supervisor',
1941
- release_id: releaseId,
1942
- delegation: 'managers will assign to workers'
1943
- },
1944
- decision_type: 'strategic',
1945
- timestamp: new Date().toISOString(),
1946
- agent_id: 'supervisor-agent'
1947
- });
1948
-
1949
- console.log(`Supervisor created release plan: ${releaseId}`);
1950
- }
1951
-
1952
- // Manager agent assigns Feature Units to workers
1953
- async function managerAssignFeatureUnits(managerId: string) {
1954
- // Query unassigned Feature Units
1955
- const unassigned = await mcpClient.query_codebase_entities({
1956
- entity_type: 'feature_unit',
1957
- filters: { status: 'planning' },
1958
- limit: 5
1959
- });
1960
-
1961
- // Assign to workers (record decisions)
1962
- for (const fu of unassigned.entities) {
1963
- await mcpClient.submit_agent_decision({
1964
- decision: `Assign ${fu.snapshot.id} to worker`,
1965
- rationale: 'Worker capacity available',
1966
- context: {
1967
- role: 'manager',
1968
- manager_id: managerId,
1969
- feature_unit: fu.snapshot.id,
1970
- assigned_to: 'worker-1'
1971
- },
1972
- decision_type: 'process',
1973
- timestamp: new Date().toISOString(),
1974
- agent_id: managerId
1975
- });
1976
- }
1977
-
1978
- console.log(`Manager ${managerId} assigned ${unassigned.entities.length} tasks`);
1979
- }
1980
-
1981
- // Worker agent executes Feature Unit
1982
- async function workerExecuteFeatureUnit(workerId: string, featureUnitId: string) {
1983
- // Update status to in_progress
1984
- await mcpClient.submit_feature_unit({
1985
- id: featureUnitId,
1986
- status: 'in_progress',
1987
- updated_at: new Date().toISOString()
1988
- });
1989
-
1990
- // Execute work (placeholder)
1991
- const result = await executeWork(featureUnitId);
1992
-
1993
- // Update status to completed
1994
- await mcpClient.submit_feature_unit({
1995
- id: featureUnitId,
1996
- status: 'completed',
1997
- updated_at: new Date().toISOString()
1998
- });
1999
-
2000
- // Report completion
2001
- await mcpClient.submit_agent_session({
2002
- session_id: generateSessionId(),
2003
- actions: [
2004
- { type: 'execute_feature_unit', result: 'success' }
2005
- ],
2006
- outcomes: [
2007
- { type: 'feature_unit_completed', id: featureUnitId }
2008
- ],
2009
- started_at: result.started_at,
2010
- ended_at: new Date().toISOString()
2011
- });
2012
-
2013
- console.log(`Worker ${workerId} completed ${featureUnitId}`);
2014
- }
2015
-
2016
- // Supervisor monitors overall progress
2017
- async function supervisorMonitorRelease(releaseId: string) {
2018
- // Get release
2019
- const release = await mcpClient.query_codebase_entities({
2020
- entity_type: 'release',
2021
- filters: { id: releaseId },
2022
- limit: 1
2023
- });
2024
-
2025
- const releaseData = release.entities[0].snapshot;
2026
-
2027
- // Check status of all Feature Units
2028
- const featureUnitStatuses = await Promise.all(
2029
- releaseData.feature_units.map(async (fuId: string) => {
2030
- const fu = await getFeatureUnit(fuId);
2031
- return { id: fuId, status: fu?.status };
2032
- })
2033
- );
2034
-
2035
- const completed = featureUnitStatuses.filter(fu => fu.status === 'completed').length;
2036
- const total = featureUnitStatuses.length;
2037
-
2038
- console.log(`Release ${releaseId}: ${completed}/${total} Feature Units completed`);
2039
-
2040
- return {
2041
- release_id: releaseId,
2042
- progress: {
2043
- completed,
2044
- total,
2045
- percentage: (completed / total) * 100
2046
- },
2047
- feature_units: featureUnitStatuses
2048
- };
2049
- }
2050
- ```
2051
-
2052
- **Use Case**: Large release development with supervisor (planning), managers (coordination), workers (execution).
2053
-
2054
- ### Pattern 4: Collaborative Problem-Solving
2055
-
2056
- **Description**: Multiple agents work on the same problem, contributing observations and decisions.
2057
-
2058
- **Implementation**:
2059
-
2060
- ```typescript
2061
- // Multiple agents analyze the same Feature Unit
2062
- async function agentContributeAnalysis(
2063
- agentId: string,
2064
- featureUnitId: string,
2065
- analysis: string
2066
- ) {
2067
- await mcpClient.submit_agent_decision({
2068
- decision: analysis,
2069
- rationale: 'Analysis contribution from agent',
2070
- context: {
2071
- agent_id: agentId,
2072
- feature_unit: featureUnitId,
2073
- contribution_type: 'analysis'
2074
- },
2075
- decision_type: 'technical',
2076
- timestamp: new Date().toISOString(),
2077
- agent_id: agentId
2078
- });
2079
- }
2080
-
2081
- // Aggregate all agent analyses
2082
- async function aggregateAgentAnalyses(featureUnitId: string) {
2083
- const analyses = await mcpClient.query_codebase_entities({
2084
- entity_type: 'agent_decision',
2085
- filters: {
2086
- 'context.feature_unit': featureUnitId,
2087
- 'context.contribution_type': 'analysis'
2088
- },
2089
- order_by: 'timestamp',
2090
- order: 'asc'
2091
- });
2092
-
2093
- return {
2094
- feature_unit_id: featureUnitId,
2095
- total_analyses: analyses.entities.length,
2096
- agents_contributed: new Set(analyses.entities.map(e => e.snapshot.agent_id)).size,
2097
- analyses: analyses.entities.map(e => ({
2098
- agent: e.snapshot.agent_id,
2099
- analysis: e.snapshot.decision,
2100
- timestamp: e.snapshot.timestamp
2101
- }))
2102
- };
2103
- }
2104
- ```
2105
-
2106
- **Use Case**: Complex problem requiring multiple perspectives or expertise areas.
2107
-
2108
- ### Agent Coordination Patterns
2109
-
2110
- #### Pattern: Work Queue
2111
-
2112
- Agents pull tasks from shared queue:
2113
-
2114
- ```typescript
2115
- async function pullNextTask(agentId: string) {
2116
- // Query available tasks
2117
- const tasks = await mcpClient.query_codebase_entities({
2118
- entity_type: 'feature_unit',
2119
- filters: { status: 'planning' },
2120
- limit: 1
2121
- });
2122
-
2123
- if (tasks.entities.length === 0) {
2124
- return null;
2125
- }
2126
-
2127
- const task = tasks.entities[0];
2128
-
2129
- // Claim task by updating status
2130
- await mcpClient.submit_feature_unit({
2131
- ...task.snapshot,
2132
- status: 'in_progress',
2133
- updated_at: new Date().toISOString()
2134
- });
2135
-
2136
- // Record session start
2137
- await mcpClient.submit_agent_session({
2138
- session_id: generateSessionId(),
2139
- actions: [{
2140
- type: 'claim_task',
2141
- result: 'success',
2142
- details: { task_id: task.snapshot.id, agent_id: agentId }
2143
- }],
2144
- started_at: new Date().toISOString()
2145
- });
2146
-
2147
- return task.snapshot;
2148
- }
2149
- ```
2150
-
2151
- #### Pattern: Consensus Building
2152
-
2153
- Multiple agents vote or provide input on decisions:
2154
-
2155
- ```typescript
2156
- async function agentVoteOnDecision(
2157
- agentId: string,
2158
- proposedDecision: string,
2159
- vote: 'approve' | 'reject' | 'abstain',
2160
- reason: string
2161
- ) {
2162
- await mcpClient.submit_agent_decision({
2163
- decision: `Vote: ${vote} on "${proposedDecision}"`,
2164
- rationale: reason,
2165
- context: {
2166
- agent_id: agentId,
2167
- vote_type: vote,
2168
- proposed_decision: proposedDecision
2169
- },
2170
- decision_type: 'process',
2171
- timestamp: new Date().toISOString(),
2172
- agent_id: agentId
2173
- });
2174
- }
2175
-
2176
- async function tallyVotes(proposedDecision: string) {
2177
- const votes = await mcpClient.query_codebase_entities({
2178
- entity_type: 'agent_decision',
2179
- filters: {
2180
- 'context.proposed_decision': proposedDecision
2181
- }
2182
- });
2183
-
2184
- const tally = {
2185
- approve: votes.entities.filter(e => e.snapshot.context?.vote_type === 'approve').length,
2186
- reject: votes.entities.filter(e => e.snapshot.context?.vote_type === 'reject').length,
2187
- abstain: votes.entities.filter(e => e.snapshot.context?.vote_type === 'abstain').length
2188
- };
2189
-
2190
- return {
2191
- proposed_decision: proposedDecision,
2192
- votes: tally,
2193
- total_votes: tally.approve + tally.reject + tally.abstain,
2194
- decision: tally.approve > tally.reject ? 'approved' : 'rejected'
2195
- };
2196
- }
2197
- ```
2198
-
2199
- #### Pattern: Status Broadcasting
2200
-
2201
- Agents broadcast status for coordination:
2202
-
2203
- ```typescript
2204
- async function broadcastAgentStatus(agentId: string, status: string, details: any) {
2205
- await mcpClient.submit_agent_decision({
2206
- decision: `Agent status: ${status}`,
2207
- rationale: 'Status broadcast for coordination',
2208
- context: {
2209
- agent_id: agentId,
2210
- status,
2211
- broadcast_type: 'status_update',
2212
- ...details
2213
- },
2214
- decision_type: 'process',
2215
- timestamp: new Date().toISOString(),
2216
- agent_id: agentId
2217
- });
2218
- }
2219
-
2220
- async function queryAgentStatuses() {
2221
- const statuses = await mcpClient.query_codebase_entities({
2222
- entity_type: 'agent_decision',
2223
- filters: {
2224
- 'context.broadcast_type': 'status_update'
2225
- },
2226
- order_by: 'timestamp',
2227
- order: 'desc',
2228
- limit: 20
2229
- });
2230
-
2231
- return statuses.entities.map(e => ({
2232
- agent: e.snapshot.agent_id,
2233
- status: e.snapshot.context?.status,
2234
- timestamp: e.snapshot.timestamp
2235
- }));
2236
- }
2237
- ```
2238
-
2239
- ### Multi-Agent Best Practices
2240
-
2241
- **DO:**
2242
- - ✅ Use entity resolution for coordination (same entity across agents)
2243
- - ✅ Query before updating to avoid conflicts
2244
- - ✅ Record decisions for transparency
2245
- - ✅ Use agent_id consistently
2246
- - ✅ Leverage timeline queries for coordination context
2247
- - ✅ Use checkpoints for handoffs between agents
2248
-
2249
- **DON'T:**
2250
- - ❌ Update entities without querying first
2251
- - ❌ Assume exclusive access to entities
2252
- - ❌ Skip recording agent decisions
2253
- - ❌ Use inconsistent agent IDs
2254
- - ❌ Ignore context from other agents
2255
-
2256
- ### Conflict Resolution
2257
-
2258
- When multiple agents update the same entity:
2259
-
2260
- ```typescript
2261
- async function updateWithConflictDetection(entityType: string, entityId: string, updates: any) {
2262
- // Query current state
2263
- const current = await mcpClient.query_codebase_entities({
2264
- entity_type: entityType,
2265
- filters: { id: entityId },
2266
- limit: 1
2267
- });
2268
-
2269
- if (current.entities.length === 0) {
2270
- throw new Error(`Entity ${entityId} not found`);
2271
- }
2272
-
2273
- const currentSnapshot = current.entities[0].snapshot;
2274
-
2275
- // Check if entity was updated since we last saw it
2276
- if (currentSnapshot.updated_at !== updates.expected_updated_at) {
2277
- console.warn('Conflict detected: entity was updated by another agent');
2278
-
2279
- // Query who updated it
2280
- const timeline = await mcpClient.list_timeline_events({
2281
- entity_id: entityId,
2282
- start_date: updates.expected_updated_at.split('T')[0],
2283
- end_date: new Date().toISOString().split('T')[0]
2284
- });
2285
-
2286
- console.log('Recent updates:', timeline.events);
2287
-
2288
- // Decision: merge or abort
2289
- // For now, proceed with update (last write wins)
2290
- }
2291
-
2292
- // Submit update
2293
- await mcpClient.submit_feature_unit({
2294
- ...currentSnapshot,
2295
- ...updates,
2296
- updated_at: new Date().toISOString()
2297
- });
2298
- }
2299
- ```
2300
-
2301
- ## Evaluation Patterns
2302
-
2303
- **Agent Skills Reference**: [evaluation](https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering/blob/main/skills/evaluation) and [advanced-evaluation](https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering/blob/main/skills/advanced-evaluation) skills
2304
-
2305
- ### Overview
2306
-
2307
- Neotoma enables comprehensive evaluation of agent performance through structured tracking of:
2308
- - **Agent Performance Metrics**: Task completion rates, validation pass rates, session outcomes
2309
- - **Quality Scoring**: Validation results, test coverage, compliance checks
2310
- - **Benchmark Tasks**: Feature Unit completion, release readiness, acceptance criteria
2311
- - **Historical Analysis**: Agent effectiveness over time, improvement tracking
2312
- - **LLM-as-Judge Patterns**: Agent decisions evaluated against quality criteria
2313
-
2314
- This section implements Agent Skills evaluation principles: test frameworks, performance metrics, quality measurement, and LLM-as-judge techniques (direct scoring, pairwise comparison, rubric generation, bias mitigation).
2315
-
2316
- ### Agent Performance Metrics
2317
-
2318
- #### Task Completion Rate
2319
-
2320
- Track how many tasks agents complete successfully:
2321
-
2322
- ```typescript
2323
- async function calculateTaskCompletionRate(agentId: string, startDate: Date, endDate: Date) {
2324
- // Query all sessions for agent
2325
- const sessions = await mcpClient.query_codebase_entities({
2326
- entity_type: 'agent_session',
2327
- filters: {
2328
- 'actions.agent_id': agentId,
2329
- started_at: {
2330
- gte: startDate.toISOString(),
2331
- lte: endDate.toISOString()
2332
- }
2333
- }
2334
- });
2335
-
2336
- // Calculate completion rate
2337
- const totalTasks = sessions.entities.reduce((sum, s) => sum + s.snapshot.actions.length, 0);
2338
- const successfulTasks = sessions.entities.reduce((sum, s) => {
2339
- return sum + s.snapshot.actions.filter(a => a.result === 'success').length;
2340
- }, 0);
2341
-
2342
- return {
2343
- total_tasks: totalTasks,
2344
- successful_tasks: successfulTasks,
2345
- completion_rate: totalTasks > 0 ? (successfulTasks / totalTasks) * 100 : 0
2346
- };
2347
- }
2348
- ```
2349
-
2350
- #### Validation Pass Rate
2351
-
2352
- Track validation results over time:
2353
-
2354
- ```typescript
2355
- async function calculateValidationPassRate(target: string, startDate: Date, endDate: Date) {
2356
- // Query validation results
2357
- const validations = await mcpClient.query_codebase_entities({
2358
- entity_type: 'validation_result',
2359
- filters: {
2360
- target: target,
2361
- timestamp: {
2362
- gte: startDate.toISOString(),
2363
- lte: endDate.toISOString()
2364
- }
2365
- }
2366
- });
2367
-
2368
- // Calculate pass rate
2369
- const total = validations.entities.length;
2370
- const passed = validations.entities.filter(v => v.snapshot.status === 'passed').length;
2371
- const failed = validations.entities.filter(v => v.snapshot.status === 'failed').length;
2372
-
2373
- return {
2374
- total_validations: total,
2375
- passed: passed,
2376
- failed: failed,
2377
- pass_rate: total > 0 ? (passed / total) * 100 : 0,
2378
- fail_rate: total > 0 ? (failed / total) * 100 : 0
2379
- };
2380
- }
2381
- ```
2382
-
2383
- #### Session Success Metrics
2384
-
2385
- Track session-level outcomes:
2386
-
2387
- ```typescript
2388
- async function calculateSessionMetrics(startDate: Date, endDate: Date) {
2389
- const sessions = await mcpClient.query_codebase_entities({
2390
- entity_type: 'agent_session',
2391
- filters: {
2392
- started_at: {
2393
- gte: startDate.toISOString(),
2394
- lte: endDate.toISOString()
2395
- }
2396
- }
2397
- });
2398
-
2399
- const metrics = {
2400
- total_sessions: sessions.entities.length,
2401
- sessions_with_outcomes: sessions.entities.filter(s =>
2402
- s.snapshot.outcomes && s.snapshot.outcomes.length > 0
2403
- ).length,
2404
- average_duration: sessions.entities.reduce((sum, s) =>
2405
- sum + (s.snapshot.duration || 0), 0
2406
- ) / sessions.entities.length,
2407
- average_actions_per_session: sessions.entities.reduce((sum, s) =>
2408
- sum + s.snapshot.actions.length, 0
2409
- ) / sessions.entities.length,
2410
- checkpoint_usage_rate: sessions.entities.filter(s =>
2411
- s.snapshot.checkpoints && s.snapshot.checkpoints.length > 0
2412
- ).length / sessions.entities.length
2413
- };
2414
-
2415
- return metrics;
2416
- }
2417
- ```
2418
-
2419
- ### Quality Scoring
2420
-
2421
- #### Feature Unit Quality Score
2422
-
2423
- Score Feature Units based on validation results:
2424
-
2425
- ```typescript
2426
- async function calculateFeatureUnitQualityScore(featureUnitId: string) {
2427
- // Get Feature Unit
2428
- const featureUnit = await getFeatureUnit(featureUnitId);
2429
-
2430
- // Get all validation results
2431
- const validations = await mcpClient.query_codebase_entities({
2432
- entity_type: 'validation_result',
2433
- filters: { target: featureUnitId }
2434
- });
2435
-
2436
- // Calculate quality score
2437
- const validationTypes = ['lint', 'test', 'security', 'compliance'];
2438
- const scores = validationTypes.map(type => {
2439
- const typeValidations = validations.entities.filter(v =>
2440
- v.snapshot.validation_type === type
2441
- );
2442
-
2443
- if (typeValidations.length === 0) return null;
2444
-
2445
- const latest = typeValidations.sort((a, b) =>
2446
- new Date(b.snapshot.timestamp).getTime() - new Date(a.snapshot.timestamp).getTime()
2447
- )[0];
2448
-
2449
- return {
2450
- type,
2451
- status: latest.snapshot.status,
2452
- score: latest.snapshot.status === 'passed' ? 100 :
2453
- latest.snapshot.status === 'warning' ? 75 : 0
2454
- };
2455
- }).filter(s => s !== null);
2456
-
2457
- const averageScore = scores.reduce((sum, s) => sum + s.score, 0) / scores.length;
2458
-
2459
- return {
2460
- feature_unit_id: featureUnitId,
2461
- quality_score: averageScore,
2462
- validation_scores: scores,
2463
- status: featureUnit?.status
2464
- };
2465
- }
2466
- ```
2467
-
2468
- #### Release Readiness Score
2469
-
2470
- Score release readiness based on acceptance criteria and Feature Unit quality:
2471
-
2472
- ```typescript
2473
- async function calculateReleaseReadinessScore(releaseId: string) {
2474
- // Get release
2475
- const release = await mcpClient.query_codebase_entities({
2476
- entity_type: 'release',
2477
- filters: { id: releaseId },
2478
- limit: 1
2479
- });
2480
-
2481
- if (release.entities.length === 0) return null;
2482
-
2483
- const releaseData = release.entities[0].snapshot;
2484
-
2485
- // Get Feature Unit quality scores
2486
- const featureUnitScores = await Promise.all(
2487
- releaseData.feature_units.map(async (fuId: string) => {
2488
- return await calculateFeatureUnitQualityScore(fuId);
2489
- })
2490
- );
2491
-
2492
- // Calculate readiness score
2493
- const avgFeatureUnitScore = featureUnitScores.reduce((sum, s) =>
2494
- sum + (s?.quality_score || 0), 0
2495
- ) / featureUnitScores.length;
2496
-
2497
- // Check acceptance criteria validation
2498
- const acceptanceValidations = await mcpClient.query_codebase_entities({
2499
- entity_type: 'validation_result',
2500
- filters: {
2501
- target: releaseId,
2502
- validation_type: 'acceptance_criteria'
2503
- }
2504
- });
2505
-
2506
- const acceptanceScore = acceptanceValidations.entities.length > 0 ?
2507
- acceptanceValidations.entities.filter(v => v.snapshot.status === 'passed').length /
2508
- acceptanceValidations.entities.length * 100 : 0;
2509
-
2510
- return {
2511
- release_id: releaseId,
2512
- readiness_score: (avgFeatureUnitScore * 0.7) + (acceptanceScore * 0.3),
2513
- feature_unit_scores: featureUnitScores,
2514
- acceptance_criteria_score: acceptanceScore,
2515
- status: releaseData.status
2516
- };
2517
- }
2518
- ```
2519
-
2520
- ### Benchmark Tasks
2521
-
2522
- #### Feature Unit Completion Benchmark
2523
-
2524
- Track Feature Unit completion time and quality:
2525
-
2526
- ```typescript
2527
- async function benchmarkFeatureUnitCompletion(featureUnitId: string) {
2528
- // Get Feature Unit timeline
2529
- const timeline = await mcpClient.list_timeline_events({
2530
- entity_id: featureUnitId
2531
- });
2532
-
2533
- // Find key events
2534
- const created = timeline.events.find(e => e.event_type === 'created');
2535
- const completed = timeline.events.find(e =>
2536
- e.description.includes('completed') || e.description.includes('deployed')
2537
- );
2538
-
2539
- if (!created || !completed) return null;
2540
-
2541
- // Calculate duration
2542
- const duration = new Date(completed.timestamp).getTime() -
2543
- new Date(created.timestamp).getTime();
2544
- const durationDays = duration / (1000 * 60 * 60 * 24);
2545
-
2546
- // Get quality score
2547
- const qualityScore = await calculateFeatureUnitQualityScore(featureUnitId);
2548
-
2549
- return {
2550
- feature_unit_id: featureUnitId,
2551
- duration_days: durationDays,
2552
- quality_score: qualityScore?.quality_score || 0,
2553
- status: completed.description,
2554
- benchmark: {
2555
- fast: durationDays < 7,
2556
- high_quality: (qualityScore?.quality_score || 0) >= 90,
2557
- on_time: durationDays <= 14
2558
- }
2559
- };
2560
- }
2561
- ```
2562
-
2563
- #### Agent Decision Quality Benchmark
2564
-
2565
- Evaluate agent decision quality over time:
2566
-
2567
- ```typescript
2568
- async function benchmarkAgentDecisionQuality(agentId: string, days: number = 30) {
2569
- const startDate = new Date();
2570
- startDate.setDate(startDate.getDate() - days);
2571
-
2572
- // Query agent decisions
2573
- const decisions = await mcpClient.query_codebase_entities({
2574
- entity_type: 'agent_decision',
2575
- filters: {
2576
- agent_id: agentId,
2577
- timestamp: {
2578
- gte: startDate.toISOString()
2579
- }
2580
- },
2581
- order_by: 'timestamp',
2582
- order: 'desc'
2583
- });
2584
-
2585
- // Analyze decision quality
2586
- const metrics = {
2587
- total_decisions: decisions.entities.length,
2588
- architectural_decisions: decisions.entities.filter(d =>
2589
- d.snapshot.decision_type === 'architectural'
2590
- ).length,
2591
- technical_decisions: decisions.entities.filter(d =>
2592
- d.snapshot.decision_type === 'technical'
2593
- ).length,
2594
- decisions_with_rationale: decisions.entities.filter(d =>
2595
- d.snapshot.rationale && d.snapshot.rationale.length > 50
2596
- ).length,
2597
- decisions_with_context: decisions.entities.filter(d =>
2598
- d.snapshot.context && Object.keys(d.snapshot.context).length > 0
2599
- ).length
2600
- };
2601
-
2602
- // Calculate quality score
2603
- const qualityScore = (
2604
- (metrics.decisions_with_rationale / metrics.total_decisions) * 0.5 +
2605
- (metrics.decisions_with_context / metrics.total_decisions) * 0.5
2606
- ) * 100;
2607
-
2608
- return {
2609
- agent_id: agentId,
2610
- period_days: days,
2611
- metrics,
2612
- quality_score: qualityScore
2613
- };
2614
- }
2615
- ```
2616
-
2617
- ### Historical Analysis
2618
-
2619
- #### Agent Effectiveness Over Time
2620
-
2621
- Track agent performance trends:
2622
-
2623
- ```typescript
2624
- async function analyzeAgentEffectivenessOverTime(agentId: string, months: number = 3) {
2625
- const startDate = new Date();
2626
- startDate.setMonth(startDate.getMonth() - months);
2627
-
2628
- // Get monthly metrics
2629
- const monthlyMetrics = [];
2630
-
2631
- for (let i = 0; i < months; i++) {
2632
- const monthStart = new Date(startDate);
2633
- monthStart.setMonth(monthStart.getMonth() + i);
2634
- const monthEnd = new Date(monthStart);
2635
- monthEnd.setMonth(monthEnd.getMonth() + 1);
2636
-
2637
- const taskMetrics = await calculateTaskCompletionRate(agentId, monthStart, monthEnd);
2638
- const sessionMetrics = await calculateSessionMetrics(monthStart, monthEnd);
2639
-
2640
- monthlyMetrics.push({
2641
- month: monthStart.toISOString().substring(0, 7),
2642
- task_completion_rate: taskMetrics.completion_rate,
2643
- average_session_duration: sessionMetrics.average_duration,
2644
- actions_per_session: sessionMetrics.average_actions_per_session
2645
- });
2646
- }
2647
-
2648
- // Calculate trends
2649
- const completionTrend = monthlyMetrics.map(m => m.task_completion_rate);
2650
- const improving = completionTrend[completionTrend.length - 1] > completionTrend[0];
2651
-
2652
- return {
2653
- agent_id: agentId,
2654
- period_months: months,
2655
- monthly_metrics: monthlyMetrics,
2656
- trend: {
2657
- improving,
2658
- completion_rate_change: completionTrend[completionTrend.length - 1] - completionTrend[0]
2659
- }
2660
- };
2661
- }
2662
- ```
2663
-
2664
- ### LLM-as-Judge Patterns
2665
-
2666
- #### Decision Evaluation
2667
-
2668
- Use validation results to evaluate agent decisions:
2669
-
2670
- ```typescript
2671
- async function evaluateAgentDecision(decisionId: string) {
2672
- // Get decision
2673
- const decisions = await mcpClient.query_codebase_entities({
2674
- entity_type: 'agent_decision',
2675
- filters: { id: decisionId },
2676
- limit: 1
2677
- });
2678
-
2679
- if (decisions.entities.length === 0) return null;
2680
-
2681
- const decision = decisions.entities[0].snapshot;
2682
-
2683
- // Get related validation results (LLM-as-judge)
2684
- const validations = await mcpClient.query_codebase_entities({
2685
- entity_type: 'validation_result',
2686
- filters: {
2687
- 'details.decision_id': decisionId,
2688
- validation_type: 'custom'
2689
- }
2690
- });
2691
-
2692
- // Evaluate decision quality
2693
- const evaluation = {
2694
- decision_id: decisionId,
2695
- decision: decision.decision,
2696
- has_rationale: decision.rationale && decision.rationale.length > 50,
2697
- has_context: decision.context && Object.keys(decision.context).length > 0,
2698
- has_alternatives: decision.alternatives && decision.alternatives.length > 0,
2699
- llm_judge_score: validations.entities.length > 0 ?
2700
- validations.entities.filter(v => v.snapshot.status === 'passed').length /
2701
- validations.entities.length * 100 : null,
2702
- quality_score: (
2703
- (decision.rationale && decision.rationale.length > 50 ? 1 : 0) * 0.3 +
2704
- (decision.context && Object.keys(decision.context).length > 0 ? 1 : 0) * 0.3 +
2705
- (decision.alternatives && decision.alternatives.length > 0 ? 1 : 0) * 0.4
2706
- ) * 100
2707
- };
2708
-
2709
- return evaluation;
2710
- }
2711
- ```
2712
-
2713
- #### Feature Unit Quality Evaluation
2714
-
2715
- Evaluate Feature Unit quality using multiple criteria:
2716
-
2717
- ```typescript
2718
- async function evaluateFeatureUnitQuality(featureUnitId: string) {
2719
- // Get Feature Unit
2720
- const featureUnit = await getFeatureUnit(featureUnitId);
2721
-
2722
- // Get all related data
2723
- const [validations, decisions, timeline] = await Promise.all([
2724
- mcpClient.query_codebase_entities({
2725
- entity_type: 'validation_result',
2726
- filters: { target: featureUnitId }
2727
- }),
2728
- mcpClient.query_codebase_entities({
2729
- entity_type: 'agent_decision',
2730
- filters: { 'context.feature_unit': featureUnitId }
2731
- }),
2732
- mcpClient.query_entity_timeline({
2733
- entity_id: featureUnitId
2734
- })
2735
- ]);
2736
-
2737
- // Calculate quality metrics
2738
- const validationScore = validations.entities.length > 0 ?
2739
- validations.entities.filter(v => v.snapshot.status === 'passed').length /
2740
- validations.entities.length * 100 : 0;
2741
-
2742
- const decisionQuality = decisions.entities.length > 0 ?
2743
- decisions.entities.filter(d =>
2744
- d.snapshot.rationale && d.snapshot.rationale.length > 50
2745
- ).length / decisions.entities.length * 100 : 0;
2746
-
2747
- const timelineCompleteness = timeline.events.length >= 3 ? 100 :
2748
- (timeline.events.length / 3) * 100;
2749
-
2750
- // Overall quality score
2751
- const overallScore = (
2752
- validationScore * 0.5 +
2753
- decisionQuality * 0.3 +
2754
- timelineCompleteness * 0.2
2755
- );
2756
-
2757
- return {
2758
- feature_unit_id: featureUnitId,
2759
- overall_quality_score: overallScore,
2760
- validation_score: validationScore,
2761
- decision_quality_score: decisionQuality,
2762
- timeline_completeness_score: timelineCompleteness,
2763
- status: featureUnit?.status
2764
- };
2765
- }
2766
- ```
2767
-
2768
- ### Evaluation Dashboard Queries
2769
-
2770
- #### Performance Dashboard
2771
-
2772
- Query all performance metrics for dashboard:
2773
-
2774
- ```typescript
2775
- async function getPerformanceDashboard(startDate: Date, endDate: Date) {
2776
- const [taskMetrics, sessionMetrics, validationMetrics] = await Promise.all([
2777
- calculateTaskCompletionRate('all', startDate, endDate),
2778
- calculateSessionMetrics(startDate, endDate),
2779
- calculateValidationPassRate('all', startDate, endDate)
2780
- ]);
2781
-
2782
- return {
2783
- period: {
2784
- start: startDate.toISOString(),
2785
- end: endDate.toISOString()
2786
- },
2787
- task_completion: taskMetrics,
2788
- session_metrics: sessionMetrics,
2789
- validation_metrics: validationMetrics,
2790
- overall_health: (
2791
- taskMetrics.completion_rate * 0.4 +
2792
- validationMetrics.pass_rate * 0.4 +
2793
- (sessionMetrics.checkpoint_usage_rate * 100) * 0.2
2794
- )
2795
- };
2796
- }
2797
- ```
2798
-
2799
- ### Advanced Evaluation Patterns
2800
-
2801
- #### Pairwise Comparison
2802
-
2803
- **Purpose**: Compare two outputs to determine which is better
2804
-
2805
- **Implementation**:
2806
-
2807
- ```typescript
2808
- async function pairwiseCompareFeatureUnits(fuId1: string, fuId2: string, criteria: string[]) {
2809
- // Get both Feature Units with full context
2810
- const [fu1, fu2] = await Promise.all([
2811
- loadWorkContext(fuId1),
2812
- loadWorkContext(fuId2)
2813
- ]);
2814
-
2815
- // Compare on each criterion
2816
- const comparisons = criteria.map(criterion => {
2817
- let score1 = 0, score2 = 0;
2818
-
2819
- switch (criterion) {
2820
- case 'test_coverage':
2821
- score1 = fu1.validations.filter(v =>
2822
- v.type === 'test' && v.status === 'passed'
2823
- ).length;
2824
- score2 = fu2.validations.filter(v =>
2825
- v.type === 'test' && v.status === 'passed'
2826
- ).length;
2827
- break;
2828
-
2829
- case 'decision_quality':
2830
- score1 = fu1.decisions.filter(d =>
2831
- d.rationale && d.rationale.length > 50
2832
- ).length;
2833
- score2 = fu2.decisions.filter(d =>
2834
- d.rationale && d.rationale.length > 50
2835
- ).length;
2836
- break;
2837
-
2838
- case 'completion_speed':
2839
- score1 = calculateCompletionSpeed(fu1.timeline);
2840
- score2 = calculateCompletionSpeed(fu2.timeline);
2841
- break;
2842
- }
2843
-
2844
- return {
2845
- criterion,
2846
- fu1_score: score1,
2847
- fu2_score: score2,
2848
- winner: score1 > score2 ? fuId1 : score2 > score1 ? fuId2 : 'tie'
2849
- };
2850
- });
2851
-
2852
- // Overall winner (majority vote across criteria)
2853
- const fu1Wins = comparisons.filter(c => c.winner === fuId1).length;
2854
- const fu2Wins = comparisons.filter(c => c.winner === fuId2).length;
2855
-
2856
- return {
2857
- fu1: fuId1,
2858
- fu2: fuId2,
2859
- criteria: comparisons,
2860
- overall_winner: fu1Wins > fu2Wins ? fuId1 : fu2Wins > fu1Wins ? fuId2 : 'tie',
2861
- confidence: Math.abs(fu1Wins - fu2Wins) / criteria.length
2862
- };
2863
- }
2864
-
2865
- // Mitigate position bias with swapped comparison
2866
- async function pairwiseCompareWithBiasMitigation(fuId1: string, fuId2: string, criteria: string[]) {
2867
- // Run comparison in both orders
2868
- const comparison1 = await pairwiseCompareFeatureUnits(fuId1, fuId2, criteria);
2869
- const comparison2 = await pairwiseCompareFeatureUnits(fuId2, fuId1, criteria);
2870
-
2871
- // If results differ, position bias detected
2872
- if (comparison1.overall_winner !== comparison2.overall_winner) {
2873
- console.warn('Position bias detected in pairwise comparison');
2874
- return { overall_winner: 'tie', position_bias_detected: true };
2875
- }
2876
-
2877
- return { ...comparison1, position_bias_detected: false };
2878
- }
2879
- ```
2880
-
2881
- #### Rubric Generation
2882
-
2883
- **Purpose**: Generate domain-specific evaluation rubrics
2884
-
2885
- **Implementation**:
2886
-
2887
- ```typescript
2888
- interface EvaluationRubric {
2889
- name: string;
2890
- criteria: Array<{
2891
- name: string;
2892
- weight: number;
2893
- levels: Array<{
2894
- score: number;
2895
- description: string;
2896
- indicators: string[];
2897
- }>;
2898
- }>;
2899
- }
2900
-
2901
- async function generateFeatureUnitRubric(): Promise<EvaluationRubric> {
2902
- // Analyze historical Feature Units to generate rubric
2903
- const historicalFUs = await mcpClient.query_codebase_entities({
2904
- entity_type: 'feature_unit',
2905
- filters: { status: 'completed' },
2906
- limit: 20
2907
- });
2908
-
2909
- // Analyze patterns
2910
- const avgValidations = historicalFUs.entities.reduce((sum, fu) => {
2911
- // Query validations for this FU
2912
- return sum + 1; // Placeholder
2913
- }, 0) / historicalFUs.entities.length;
2914
-
2915
- // Generate rubric
2916
- return {
2917
- name: 'Feature Unit Quality Rubric',
2918
- criteria: [
2919
- {
2920
- name: 'Test Coverage',
2921
- weight: 0.3,
2922
- levels: [
2923
- {
2924
- score: 100,
2925
- description: 'Comprehensive test coverage',
2926
- indicators: ['All tests passing', 'Unit + integration tests', 'Edge cases covered']
2927
- },
2928
- {
2929
- score: 75,
2930
- description: 'Good test coverage',
2931
- indicators: ['Most tests passing', 'Unit tests present', 'Core functionality tested']
2932
- },
2933
- {
2934
- score: 50,
2935
- description: 'Basic test coverage',
2936
- indicators: ['Some tests passing', 'Basic unit tests only']
2937
- },
2938
- {
2939
- score: 0,
2940
- description: 'No test coverage',
2941
- indicators: ['No tests', 'Tests failing']
2942
- }
2943
- ]
2944
- },
2945
- {
2946
- name: 'Decision Quality',
2947
- weight: 0.3,
2948
- levels: [
2949
- {
2950
- score: 100,
2951
- description: 'Excellent decision documentation',
2952
- indicators: ['Rationale >100 chars', 'Context provided', 'Alternatives considered']
2953
- },
2954
- {
2955
- score: 75,
2956
- description: 'Good decision documentation',
2957
- indicators: ['Rationale >50 chars', 'Context provided']
2958
- },
2959
- {
2960
- score: 50,
2961
- description: 'Basic decision documentation',
2962
- indicators: ['Rationale present', 'Minimal context']
2963
- },
2964
- {
2965
- score: 0,
2966
- description: 'No decision documentation',
2967
- indicators: ['No decisions recorded']
2968
- }
2969
- ]
2970
- },
2971
- {
2972
- name: 'Timeline Completeness',
2973
- weight: 0.2,
2974
- levels: [
2975
- {
2976
- score: 100,
2977
- description: 'Complete timeline',
2978
- indicators: ['Created event', 'Status updates', 'Completion event', '5+ events']
2979
- },
2980
- {
2981
- score: 75,
2982
- description: 'Good timeline',
2983
- indicators: ['Created event', 'Completion event', '3+ events']
2984
- },
2985
- {
2986
- score: 50,
2987
- description: 'Basic timeline',
2988
- indicators: ['Created event', 'Completion event']
2989
- },
2990
- {
2991
- score: 0,
2992
- description: 'Incomplete timeline',
2993
- indicators: ['Missing key events']
2994
- }
2995
- ]
2996
- },
2997
- {
2998
- name: 'Validation Completeness',
2999
- weight: 0.2,
3000
- levels: [
3001
- {
3002
- score: 100,
3003
- description: 'All validation types',
3004
- indicators: ['Lint passed', 'Tests passed', 'Security passed', 'Compliance passed']
3005
- },
3006
- {
3007
- score: 75,
3008
- description: 'Core validations',
3009
- indicators: ['Lint passed', 'Tests passed']
3010
- },
3011
- {
3012
- score: 50,
3013
- description: 'Basic validation',
3014
- indicators: ['Tests passed']
3015
- },
3016
- {
3017
- score: 0,
3018
- description: 'No validation',
3019
- indicators: ['No validations run']
3020
- }
3021
- ]
3022
- }
3023
- ]
3024
- };
3025
- }
3026
-
3027
- // Apply rubric to Feature Unit
3028
- async function evaluateFeatureUnitWithRubric(
3029
- featureUnitId: string,
3030
- rubric: EvaluationRubric
3031
- ): Promise<{ overall_score: number; criterion_scores: any[] }> {
3032
- // Get Feature Unit with full context
3033
- const context = await loadWorkContext(featureUnitId);
3034
-
3035
- // Evaluate each criterion
3036
- const criterionScores = rubric.criteria.map(criterion => {
3037
- let score = 0;
3038
-
3039
- switch (criterion.name) {
3040
- case 'Test Coverage':
3041
- const testValidations = context.validations.filter(v => v.type === 'test');
3042
- const testsPassed = testValidations.filter(v => v.status === 'passed').length;
3043
- score = testsPassed >= 2 ? 100 : testsPassed === 1 ? 75 : 0;
3044
- break;
3045
-
3046
- case 'Decision Quality':
3047
- const qualityDecisions = context.decisions.filter(d =>
3048
- d.rationale && d.rationale.length > 50
3049
- ).length;
3050
- score = qualityDecisions >= 3 ? 100 : qualityDecisions >= 2 ? 75 : qualityDecisions >= 1 ? 50 : 0;
3051
- break;
3052
-
3053
- case 'Timeline Completeness':
3054
- const eventCount = context.timeline.length;
3055
- score = eventCount >= 5 ? 100 : eventCount >= 3 ? 75 : eventCount >= 2 ? 50 : 0;
3056
- break;
3057
-
3058
- case 'Validation Completeness':
3059
- const validationTypes = new Set(context.validations.map(v => v.type));
3060
- score = validationTypes.size >= 4 ? 100 : validationTypes.size >= 2 ? 75 : validationTypes.size >= 1 ? 50 : 0;
3061
- break;
3062
- }
3063
-
3064
- return {
3065
- criterion: criterion.name,
3066
- weight: criterion.weight,
3067
- score,
3068
- weighted_score: score * criterion.weight
3069
- };
3070
- });
3071
-
3072
- // Calculate overall score
3073
- const overallScore = criterionScores.reduce((sum, c) => sum + c.weighted_score, 0);
3074
-
3075
- return {
3076
- overall_score: overallScore,
3077
- criterion_scores: criterionScores
3078
- };
3079
- }
3080
- ```
3081
-
3082
- #### Bias Mitigation
3083
-
3084
- **Purpose**: Reduce bias in evaluation (position bias, verbosity bias, etc.)
3085
-
3086
- **Implementation**:
3087
-
3088
- ```typescript
3089
- // Position Bias Mitigation
3090
- async function evaluateWithPositionBiasMitigation(
3091
- entities: string[],
3092
- evaluationFunction: (entity: string) => Promise<number>
3093
- ) {
3094
- // Evaluate in original order
3095
- const scores1 = [];
3096
- for (const entity of entities) {
3097
- scores1.push(await evaluationFunction(entity));
3098
- }
3099
-
3100
- // Evaluate in reversed order
3101
- const reversed = [...entities].reverse();
3102
- const scores2 = [];
3103
- for (const entity of reversed) {
3104
- scores2.push(await evaluationFunction(entity));
3105
- }
3106
-
3107
- // Average scores from both orders
3108
- const finalScores = entities.map((entity, idx) => {
3109
- const reverseIdx = entities.length - 1 - idx;
3110
- return {
3111
- entity,
3112
- score: (scores1[idx] + scores2[reverseIdx]) / 2,
3113
- position_bias: Math.abs(scores1[idx] - scores2[reverseIdx])
3114
- };
3115
- });
3116
-
3117
- return finalScores;
3118
- }
3119
-
3120
- // Verbosity Bias Mitigation
3121
- async function evaluateWithVerbosityControl(
3122
- decision: any,
3123
- maxRationaleLength: number = 200
3124
- ) {
3125
- // Truncate verbose rationale for fair comparison
3126
- const truncatedRationale = decision.rationale.substring(0, maxRationaleLength);
3127
-
3128
- // Evaluate based on content, not length
3129
- const contentScore = (
3130
- (truncatedRationale.includes('because') ? 1 : 0) * 0.3 +
3131
- (truncatedRationale.includes('enables') || truncatedRationale.includes('provides') ? 1 : 0) * 0.3 +
3132
- (decision.alternatives && decision.alternatives.length > 0 ? 1 : 0) * 0.4
3133
- ) * 100;
3134
-
3135
- return {
3136
- decision_id: decision.id,
3137
- content_score: contentScore,
3138
- verbosity_controlled: decision.rationale.length > maxRationaleLength
3139
- };
3140
- }
3141
-
3142
- // Reference-Based Evaluation
3143
- async function evaluateAgainstReference(
3144
- entityId: string,
3145
- referenceId: string,
3146
- criteria: string[]
3147
- ) {
3148
- // Get entity and reference
3149
- const [entity, reference] = await Promise.all([
3150
- loadWorkContext(entityId),
3151
- loadWorkContext(referenceId)
3152
- ]);
3153
-
3154
- // Compare against reference on each criterion
3155
- const scores = criteria.map(criterion => {
3156
- const entityValue = getCriterionValue(entity, criterion);
3157
- const referenceValue = getCriterionValue(reference, criterion);
3158
-
3159
- // Calculate similarity score
3160
- const similarity = calculateSimilarity(entityValue, referenceValue);
3161
-
3162
- return {
3163
- criterion,
3164
- entity_value: entityValue,
3165
- reference_value: referenceValue,
3166
- similarity_score: similarity
3167
- };
3168
- });
3169
-
3170
- const avgSimilarity = scores.reduce((sum, s) => sum + s.similarity_score, 0) / scores.length;
3171
-
3172
- return {
3173
- entity_id: entityId,
3174
- reference_id: referenceId,
3175
- similarity_to_reference: avgSimilarity,
3176
- criterion_scores: scores
3177
- };
3178
- }
3179
-
3180
- function getCriterionValue(context: any, criterion: string): number {
3181
- switch (criterion) {
3182
- case 'test_coverage':
3183
- return context.validations.filter(v => v.type === 'test' && v.status === 'passed').length;
3184
- case 'decision_quality':
3185
- return context.decisions.filter(d => d.rationale && d.rationale.length > 50).length;
3186
- case 'timeline_completeness':
3187
- return context.timeline.length;
3188
- default:
3189
- return 0;
3190
- }
3191
- }
3192
-
3193
- function calculateSimilarity(value1: number, value2: number): number {
3194
- if (value2 === 0) return value1 === 0 ? 1.0 : 0.0;
3195
- const ratio = Math.min(value1, value2) / Math.max(value1, value2);
3196
- return ratio * 100;
3197
- }
3198
- ```
3199
-
3200
- #### LLM-as-Judge with Rubric
3201
-
3202
- **Purpose**: Use LLM to evaluate against generated rubric
3203
-
3204
- **Implementation**:
3205
-
3206
- ```typescript
3207
- async function llmJudgeWithRubric(
3208
- featureUnitId: string,
3209
- rubric: EvaluationRubric
3210
- ): Promise<any> {
3211
- // Get Feature Unit context
3212
- const context = await loadWorkContext(featureUnitId);
3213
-
3214
- // For each criterion, find matching level
3215
- const evaluations = rubric.criteria.map(criterion => {
3216
- // Get actual values for criterion
3217
- const actualValue = getCriterionValue(context, criterion.name.toLowerCase().replace(' ', '_'));
3218
-
3219
- // Find matching level in rubric
3220
- let matchedLevel = criterion.levels[criterion.levels.length - 1]; // Default to lowest
3221
-
3222
- for (const level of criterion.levels) {
3223
- if (actualValue >= getRequiredValueForLevel(level)) {
3224
- matchedLevel = level;
3225
- break;
3226
- }
3227
- }
3228
-
3229
- return {
3230
- criterion: criterion.name,
3231
- weight: criterion.weight,
3232
- actual_value: actualValue,
3233
- score: matchedLevel.score,
3234
- level_description: matchedLevel.description,
3235
- indicators_met: matchedLevel.indicators,
3236
- weighted_score: matchedLevel.score * criterion.weight
3237
- };
3238
- });
3239
-
3240
- const overallScore = evaluations.reduce((sum, e) => sum + e.weighted_score, 0);
3241
-
3242
- // Store evaluation as validation result
3243
- await mcpClient.submit_payload({
3244
- capability_id: 'neotoma:submit_codebase_metadata:v1',
3245
- body: {
3246
- entity_type: 'validation_result',
3247
- data: {
3248
- validation_type: 'acceptance_criteria',
3249
- status: overallScore >= 80 ? 'passed' : overallScore >= 60 ? 'warning' : 'failed',
3250
- details: {
3251
- overall_score: overallScore,
3252
- criterion_evaluations: evaluations,
3253
- rubric_name: rubric.name
3254
- },
3255
- target: featureUnitId,
3256
- timestamp: new Date().toISOString()
3257
- }
3258
- }
3259
- });
3260
-
3261
- return {
3262
- feature_unit_id: featureUnitId,
3263
- overall_score: overallScore,
3264
- evaluations,
3265
- rubric: rubric.name
3266
- };
3267
- }
3268
-
3269
- function getRequiredValueForLevel(level: any): number {
3270
- // Map level score to required value (simplified)
3271
- return level.score >= 100 ? 3 : level.score >= 75 ? 2 : level.score >= 50 ? 1 : 0;
3272
- }
3273
- ```
3274
-
3275
- #### Multi-Criteria Evaluation with Weights
3276
-
3277
- **Purpose**: Evaluate using multiple weighted criteria
3278
-
3279
- **Implementation**:
3280
-
3281
- ```typescript
3282
- interface WeightedCriteria {
3283
- [key: string]: {
3284
- weight: number;
3285
- threshold: number;
3286
- };
3287
- }
3288
-
3289
- async function multiCriteriaEvaluation(
3290
- featureUnitId: string,
3291
- criteria: WeightedCriteria
3292
- ): Promise<any> {
3293
- const context = await loadWorkContext(featureUnitId);
3294
-
3295
- const scores = Object.entries(criteria).map(([name, config]) => {
3296
- let rawScore = 0;
3297
-
3298
- switch (name) {
3299
- case 'test_coverage':
3300
- const passedTests = context.validations.filter(v =>
3301
- v.type === 'test' && v.status === 'passed'
3302
- ).length;
3303
- rawScore = Math.min(passedTests / 2, 1) * 100; // Normalized to 0-100
3304
- break;
3305
-
3306
- case 'decision_quality':
3307
- const qualityDecisions = context.decisions.filter(d =>
3308
- d.rationale && d.rationale.length > 50
3309
- ).length;
3310
- rawScore = Math.min(qualityDecisions / 3, 1) * 100;
3311
- break;
3312
-
3313
- case 'timeline_completeness':
3314
- rawScore = Math.min(context.timeline.length / 5, 1) * 100;
3315
- break;
3316
-
3317
- case 'validation_completeness':
3318
- const validationTypes = new Set(context.validations.map(v => v.type));
3319
- rawScore = (validationTypes.size / 4) * 100;
3320
- break;
3321
- }
3322
-
3323
- return {
3324
- criterion: name,
3325
- raw_score: rawScore,
3326
- weight: config.weight,
3327
- threshold: config.threshold,
3328
- weighted_score: rawScore * config.weight,
3329
- meets_threshold: rawScore >= config.threshold
3330
- };
3331
- });
3332
-
3333
- const overallScore = scores.reduce((sum, s) => sum + s.weighted_score, 0);
3334
- const allThresholdsMet = scores.every(s => s.meets_threshold);
3335
-
3336
- return {
3337
- feature_unit_id: featureUnitId,
3338
- overall_score: overallScore,
3339
- all_thresholds_met: allThresholdsMet,
3340
- criterion_scores: scores,
3341
- status: allThresholdsMet && overallScore >= 80 ? 'passed' : 'failed'
3342
- };
3343
- }
3344
-
3345
- // Example usage
3346
- const criteria = {
3347
- test_coverage: { weight: 0.3, threshold: 80 },
3348
- decision_quality: { weight: 0.3, threshold: 75 },
3349
- timeline_completeness: { weight: 0.2, threshold: 60 },
3350
- validation_completeness: { weight: 0.2, threshold: 50 }
3351
- };
3352
-
3353
- const evaluation = await multiCriteriaEvaluation('FU-061', criteria);
3354
- console.log(`Overall score: ${evaluation.overall_score}`);
3355
- console.log(`Thresholds met: ${evaluation.all_thresholds_met}`);
3356
- ```
3357
-
3358
- ### Advanced Evaluation Best Practices
3359
-
3360
- **DO:**
3361
- - ✅ Run pairwise comparisons in both orders (position bias mitigation)
3362
- - ✅ Generate rubrics from historical data
3363
- - ✅ Use multi-criteria evaluation with weights
3364
- - ✅ Store evaluation results as validation_result entities
3365
- - ✅ Control for verbosity bias in text comparisons
3366
- - ✅ Use reference entities for baseline comparison
3367
-
3368
- **DON'T:**
3369
- - ❌ Rely on single-order pairwise comparison
3370
- - ❌ Use hardcoded rubrics without domain analysis
3371
- - ❌ Evaluate on single criterion
3372
- - ❌ Ignore position bias
3373
- - ❌ Let verbosity inflate scores
3374
- - ❌ Evaluate without baselines
3375
-
3376
- ### Best Practices for Evaluation
3377
-
3378
- **DO:**
3379
- - ✅ Track validation results for all Feature Units
3380
- - ✅ Record session outcomes consistently
3381
- - ✅ Use timeline queries for historical analysis
3382
- - ✅ Calculate quality scores based on multiple criteria
3383
- - ✅ Benchmark against previous performance
3384
- - ✅ Track trends over time
3385
-
3386
- **DON'T:**
3387
- - ❌ Evaluate without historical context
3388
- - ❌ Use single metric for quality assessment
3389
- - ❌ Ignore validation failures
3390
- - ❌ Skip session outcome tracking
3391
- - ❌ Evaluate without baseline comparison
3392
-
3393
- ## Support
3394
-
3395
- For integration issues:
3396
- - Check Neotoma MCP server is running
3397
- - Review MCP client configuration
3398
- - Test MCP actions manually
3399
- - Consult `docs/releases/v0.2.3/mcp_actions.md`
3400
- - Check migration guide for data migration