rememberstack 0.1.0__tar.gz

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 (600) hide show
  1. rememberstack-0.1.0/.agents/skills/eval-banana/SKILL.md +226 -0
  2. rememberstack-0.1.0/.agents/skills/eval-banana/references/config.md +109 -0
  3. rememberstack-0.1.0/.agents/skills/eval-banana/references/examples.md +170 -0
  4. rememberstack-0.1.0/.agents/skills/eval-banana/references/yaml-schema.md +146 -0
  5. rememberstack-0.1.0/.agents/skills/skill-creator/LICENSE.txt +202 -0
  6. rememberstack-0.1.0/.agents/skills/skill-creator/SKILL.md +485 -0
  7. rememberstack-0.1.0/.agents/skills/skill-creator/agents/analyzer.md +274 -0
  8. rememberstack-0.1.0/.agents/skills/skill-creator/agents/comparator.md +202 -0
  9. rememberstack-0.1.0/.agents/skills/skill-creator/agents/grader.md +223 -0
  10. rememberstack-0.1.0/.agents/skills/skill-creator/assets/eval_review.html +146 -0
  11. rememberstack-0.1.0/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  12. rememberstack-0.1.0/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  13. rememberstack-0.1.0/.agents/skills/skill-creator/references/schemas.md +430 -0
  14. rememberstack-0.1.0/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  15. rememberstack-0.1.0/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  16. rememberstack-0.1.0/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
  17. rememberstack-0.1.0/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
  18. rememberstack-0.1.0/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
  19. rememberstack-0.1.0/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
  20. rememberstack-0.1.0/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
  21. rememberstack-0.1.0/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
  22. rememberstack-0.1.0/.agents/skills/skill-creator/scripts/utils.py +47 -0
  23. rememberstack-0.1.0/.dockerignore +15 -0
  24. rememberstack-0.1.0/.env.example +16 -0
  25. rememberstack-0.1.0/.eval-banana/config.toml +21 -0
  26. rememberstack-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  27. rememberstack-0.1.0/.github/compose/upgrade-gate.yaml +7 -0
  28. rememberstack-0.1.0/.github/workflows/ci.yml +235 -0
  29. rememberstack-0.1.0/.github/workflows/cla.yml +45 -0
  30. rememberstack-0.1.0/.github/workflows/docs-deploy.yml +66 -0
  31. rememberstack-0.1.0/.github/workflows/release.yml +142 -0
  32. rememberstack-0.1.0/.gitignore +22 -0
  33. rememberstack-0.1.0/.import_linter_cache/.gitignore +2 -0
  34. rememberstack-0.1.0/.import_linter_cache/CACHEDIR.TAG +3 -0
  35. rememberstack-0.1.0/.import_linter_cache/a648b11ef837d8c15b0babaed6ae538cbaea36cf.data.json +1 -0
  36. rememberstack-0.1.0/.import_linter_cache/rememberstack.meta.json +1 -0
  37. rememberstack-0.1.0/.importlinter +64 -0
  38. rememberstack-0.1.0/.loopy_loop/prompting_guides/README.md +27 -0
  39. rememberstack-0.1.0/.loopy_loop/prompting_guides/anthropic/claude-prompting-best-practices.md +110 -0
  40. rememberstack-0.1.0/.loopy_loop/prompting_guides/openai/gpt-5.6-prompting-guidance.md +94 -0
  41. rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/contract.yaml +51 -0
  42. rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/eval_reviewer/config.yaml +12 -0
  43. rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/eval_reviewer/prompt.txt +78 -0
  44. rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/eval_runner/config.yaml +12 -0
  45. rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/eval_runner/prompt.txt +104 -0
  46. rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/inner/config.yaml +8 -0
  47. rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/inner/prompt.txt +71 -0
  48. rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/outer/config.yaml +8 -0
  49. rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/outer/prompt.txt +125 -0
  50. rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/contract.yaml +50 -0
  51. rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/workflows/dispatcher/config.yaml +8 -0
  52. rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/workflows/dispatcher/prompt.txt +96 -0
  53. rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/workflows/planner/config.yaml +9 -0
  54. rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/workflows/planner/prompt.txt +138 -0
  55. rememberstack-0.1.0/.team-harness/config.toml +8 -0
  56. rememberstack-0.1.0/CLA.md +197 -0
  57. rememberstack-0.1.0/CLAUDE.md +85 -0
  58. rememberstack-0.1.0/CONTRIBUTING.md +55 -0
  59. rememberstack-0.1.0/Dockerfile +28 -0
  60. rememberstack-0.1.0/LICENSE +201 -0
  61. rememberstack-0.1.0/Makefile +33 -0
  62. rememberstack-0.1.0/PKG-INFO +213 -0
  63. rememberstack-0.1.0/README.md +171 -0
  64. rememberstack-0.1.0/RELEASING.md +98 -0
  65. rememberstack-0.1.0/TRADEMARKS.md +54 -0
  66. rememberstack-0.1.0/_claude_prompts/appendix.md +5 -0
  67. rememberstack-0.1.0/alembic.ini +38 -0
  68. rememberstack-0.1.0/compose.yaml +98 -0
  69. rememberstack-0.1.0/decisions.md +2630 -0
  70. rememberstack-0.1.0/implementation_core_values.md +43 -0
  71. rememberstack-0.1.0/loopy_loop_config.yaml +147 -0
  72. rememberstack-0.1.0/loopy_loop_goal.txt +114 -0
  73. rememberstack-0.1.0/loopy_loop_runbook.md +160 -0
  74. rememberstack-0.1.0/open_questions_from_author.md +118 -0
  75. rememberstack-0.1.0/plan/analysis/claimify_research/SYNTHESIS.md +462 -0
  76. rememberstack-0.1.0/plan/analysis/claimify_research/external_agents/codex_decontext_grounding.md +196 -0
  77. rememberstack-0.1.0/plan/analysis/claimify_research/external_agents/prompt_agy.txt +41 -0
  78. rememberstack-0.1.0/plan/analysis/claimify_research/external_agents/prompt_codex.txt +48 -0
  79. rememberstack-0.1.0/plan/analysis/claimify_research/questions/C1_claimify_method_spec.md +395 -0
  80. rememberstack-0.1.0/plan/analysis/claimify_research/questions/C2_decontextualization_design_space.md +355 -0
  81. rememberstack-0.1.0/plan/analysis/claimify_research/questions/C3_current_extractor_diagnosis.md +314 -0
  82. rememberstack-0.1.0/plan/analysis/claimify_research/questions/C4_claim_level_selection.md +170 -0
  83. rememberstack-0.1.0/plan/analysis/claimify_research/questions/C5_context_provisioning.md +344 -0
  84. rememberstack-0.1.0/plan/analysis/claimify_research/questions/C6_grounding_without_quotes.md +293 -0
  85. rememberstack-0.1.0/plan/analysis/claimify_research/questions/C7_comparative_systems.md +207 -0
  86. rememberstack-0.1.0/plan/analysis/claimify_research/questions/C8_integration_and_codefix.md +534 -0
  87. rememberstack-0.1.0/plan/analysis/claimify_research/repo_findings/claimify_impls.md +393 -0
  88. rememberstack-0.1.0/plan/analysis/claimify_research/repo_findings/graphiti_letta.md +231 -0
  89. rememberstack-0.1.0/plan/analysis/claimify_research/repo_findings/graphrag_lightrag_hipporag.md +307 -0
  90. rememberstack-0.1.0/plan/analysis/claimify_research/repo_findings/mem0_cognee.md +81 -0
  91. rememberstack-0.1.0/plan/analysis/claimify_research/verify/completeness.md +413 -0
  92. rememberstack-0.1.0/plan/analysis/claimify_research/verify/facts.md +176 -0
  93. rememberstack-0.1.0/plan/analysis/concepts.md +234 -0
  94. rememberstack-0.1.0/plan/analysis/czech_slice_spike.md +33 -0
  95. rememberstack-0.1.0/plan/analysis/design_review_2026_07.md +338 -0
  96. rememberstack-0.1.0/plan/analysis/entity_registry.md +200 -0
  97. rememberstack-0.1.0/plan/analysis/entity_typing_research/SYNTHESIS.md +450 -0
  98. rememberstack-0.1.0/plan/analysis/entity_typing_research/_workflow.js +93 -0
  99. rememberstack-0.1.0/plan/analysis/entity_typing_research/external_agents/codex_arch.err +27 -0
  100. rememberstack-0.1.0/plan/analysis/entity_typing_research/external_agents/codex_arch.md +344 -0
  101. rememberstack-0.1.0/plan/analysis/entity_typing_research/external_agents/prompt_agy_landscape.txt +27 -0
  102. rememberstack-0.1.0/plan/analysis/entity_typing_research/external_agents/prompt_codex_arch.txt +25 -0
  103. rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY1_when_where.md +237 -0
  104. rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY2_mention_vs_entity.md +232 -0
  105. rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY3_typing_cascade.md +306 -0
  106. rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY4_retyping_versioning_order.md +319 -0
  107. rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY5_ambiguity_subtype_dumping.md +285 -0
  108. rememberstack-0.1.0/plan/analysis/entity_typing_research/repo_findings/graphiti_cognee.md +226 -0
  109. rememberstack-0.1.0/plan/analysis/entity_typing_research/repo_findings/lightrag_graphrag_gliner.md +227 -0
  110. rememberstack-0.1.0/plan/analysis/entity_typing_research/verify/completeness.md +250 -0
  111. rememberstack-0.1.0/plan/analysis/entity_typing_research/verify/facts.md +92 -0
  112. rememberstack-0.1.0/plan/analysis/evidence_lifecycle/SYNTHESIS.md +152 -0
  113. rememberstack-0.1.0/plan/analysis/evidence_lifecycle/external_agents/codex.md +891 -0
  114. rememberstack-0.1.0/plan/analysis/evidence_lifecycle/external_agents/codex_review_pr31.md +42 -0
  115. rememberstack-0.1.0/plan/analysis/evidence_lifecycle/internal_analysis.md +310 -0
  116. rememberstack-0.1.0/plan/analysis/evidence_lifecycle/stress_test_amendments.md +169 -0
  117. rememberstack-0.1.0/plan/analysis/ladybug_capabilities.md +121 -0
  118. rememberstack-0.1.0/plan/analysis/ladybug_query_semantics.md +180 -0
  119. rememberstack-0.1.0/plan/analysis/ladybug_translation_research/SYNTHESIS.md +409 -0
  120. rememberstack-0.1.0/plan/analysis/ladybug_translation_research/external_agents/antigravity.md +260 -0
  121. rememberstack-0.1.0/plan/analysis/ladybug_translation_research/external_agents/codex.md +443 -0
  122. rememberstack-0.1.0/plan/analysis/lance_indexing_maintenance.md +190 -0
  123. rememberstack-0.1.0/plan/analysis/media_handling/BINDING_RECONCILIATION.md +29 -0
  124. rememberstack-0.1.0/plan/analysis/media_handling/SYNTHESIS.md +139 -0
  125. rememberstack-0.1.0/plan/analysis/media_handling/external_agents/codex.md +745 -0
  126. rememberstack-0.1.0/plan/analysis/media_handling/external_agents/codex_binding_review.md +74 -0
  127. rememberstack-0.1.0/plan/analysis/media_handling/internal_analysis.md +198 -0
  128. rememberstack-0.1.0/plan/analysis/nonrelational_conflict_research/SYNTHESIS.md +198 -0
  129. rememberstack-0.1.0/plan/analysis/nonrelational_conflict_research/external_agents/codex.md +729 -0
  130. rememberstack-0.1.0/plan/analysis/nonrelational_conflict_research/internal_analysis.md +189 -0
  131. rememberstack-0.1.0/plan/analysis/objections.md +206 -0
  132. rememberstack-0.1.0/plan/analysis/p2_spike_battery.md +119 -0
  133. rememberstack-0.1.0/plan/analysis/p3_agent_navigation.md +177 -0
  134. rememberstack-0.1.0/plan/analysis/registry_research/SYNTHESIS.md +431 -0
  135. rememberstack-0.1.0/plan/analysis/registry_research/_workflow.js +135 -0
  136. rememberstack-0.1.0/plan/analysis/registry_research/external_agents/_FAILED_README.md +15 -0
  137. rememberstack-0.1.0/plan/analysis/registry_research/external_agents/prompt_agy_R5.txt +20 -0
  138. rememberstack-0.1.0/plan/analysis/registry_research/external_agents/prompt_agy_R8.txt +22 -0
  139. rememberstack-0.1.0/plan/analysis/registry_research/external_agents/prompt_codex_R2.txt +26 -0
  140. rememberstack-0.1.0/plan/analysis/registry_research/external_agents/prompt_codex_R6.txt +26 -0
  141. rememberstack-0.1.0/plan/analysis/registry_research/questions/R10_review_tooling.md +344 -0
  142. rememberstack-0.1.0/plan/analysis/registry_research/questions/R1_coref_necessity.md +117 -0
  143. rememberstack-0.1.0/plan/analysis/registry_research/questions/R2_er_cascade_numbers.md +373 -0
  144. rememberstack-0.1.0/plan/analysis/registry_research/questions/R3_multilingual_inflected.md +324 -0
  145. rememberstack-0.1.0/plan/analysis/registry_research/questions/R4_external_authorities.md +366 -0
  146. rememberstack-0.1.0/plan/analysis/registry_research/questions/R5_ontology_core_validation.md +300 -0
  147. rememberstack-0.1.0/plan/analysis/registry_research/questions/R6_constrained_extraction.md +145 -0
  148. rememberstack-0.1.0/plan/analysis/registry_research/questions/R7_golden_set_active_learning.md +271 -0
  149. rememberstack-0.1.0/plan/analysis/registry_research/questions/R8_incremental_clustering.md +314 -0
  150. rememberstack-0.1.0/plan/analysis/registry_research/questions/R9_scale_math.md +302 -0
  151. rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/cognee.md +292 -0
  152. rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/coref.md +181 -0
  153. rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/graphiti.md +221 -0
  154. rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/letta_hipporag.md +331 -0
  155. rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/lightrag_graphrag.md +287 -0
  156. rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/mem0.md +306 -0
  157. rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/splink_dedupe.md +286 -0
  158. rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/zingg.md +283 -0
  159. rememberstack-0.1.0/plan/analysis/registry_research/verify/completeness.md +233 -0
  160. rememberstack-0.1.0/plan/analysis/registry_research/verify/coref_clustering.md +96 -0
  161. rememberstack-0.1.0/plan/analysis/registry_research/verify/external_facts.md +55 -0
  162. rememberstack-0.1.0/plan/analysis/registry_research/verify/numbers.md +106 -0
  163. rememberstack-0.1.0/plan/analysis/registry_research/verify/ontology_extraction.md +112 -0
  164. rememberstack-0.1.0/plan/analysis/retrieval_review/external_agents/codex.md +28 -0
  165. rememberstack-0.1.0/plan/analysis/retrieval_scenarios.md +359 -0
  166. rememberstack-0.1.0/plan/analysis/retrieval_spike_battery.md +79 -0
  167. rememberstack-0.1.0/plan/analysis/reuse_hit_rate_spike.md +66 -0
  168. rememberstack-0.1.0/plan/analysis/unmerge_supersession_ripple_spike.md +64 -0
  169. rememberstack-0.1.0/plan/analysis/value_gate_research/SYNTHESIS.md +450 -0
  170. rememberstack-0.1.0/plan/analysis/value_gate_research/_workflow.js +95 -0
  171. rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/agy_V3_lazy_extraction.md +466 -0
  172. rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/codex_V2.err +26 -0
  173. rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/codex_V2_gating.md +101 -0
  174. rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/prompt_agy_V3.txt +19 -0
  175. rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/prompt_codex_V2.txt +24 -0
  176. rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V1_junk_rate_evidence.md +245 -0
  177. rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V2_gating_signals_mechanisms.md +293 -0
  178. rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V3_lazy_deferred_extraction.md +360 -0
  179. rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V4_how_systems_gate.md +224 -0
  180. rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V5_recall_safeguards.md +285 -0
  181. rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V6_pipeline_integration.md +429 -0
  182. rememberstack-0.1.0/plan/analysis/value_gate_research/repo_findings/graphrag_lightrag_hipporag.md +164 -0
  183. rememberstack-0.1.0/plan/analysis/value_gate_research/repo_findings/mem0_cognee.md +166 -0
  184. rememberstack-0.1.0/plan/analysis/value_gate_research/verify/completeness.md +89 -0
  185. rememberstack-0.1.0/plan/analysis/value_gate_research/verify/facts.md +90 -0
  186. rememberstack-0.1.0/plan/analysis/workers.md +472 -0
  187. rememberstack-0.1.0/plan/designs/docs_site_design.md +109 -0
  188. rememberstack-0.1.0/plan/designs/e0_files_design.md +467 -0
  189. rememberstack-0.1.0/plan/designs/e1_chunks_design.md +387 -0
  190. rememberstack-0.1.0/plan/designs/e2_e3_claims_relations_design.md +261 -0
  191. rememberstack-0.1.0/plan/designs/evidence_lifecycle_design.md +445 -0
  192. rememberstack-0.1.0/plan/designs/hard_forget_design.md +268 -0
  193. rememberstack-0.1.0/plan/designs/k_layers_design.md +818 -0
  194. rememberstack-0.1.0/plan/designs/media_design.md +394 -0
  195. rememberstack-0.1.0/plan/designs/observations_design.md +354 -0
  196. rememberstack-0.1.0/plan/designs/orchestration_design.md +237 -0
  197. rememberstack-0.1.0/plan/designs/overall_design.md +252 -0
  198. rememberstack-0.1.0/plan/designs/p2_graph_design.md +435 -0
  199. rememberstack-0.1.0/plan/designs/packaging_distribution_design.md +281 -0
  200. rememberstack-0.1.0/plan/designs/postgres_schema_design.md +2687 -0
  201. rememberstack-0.1.0/plan/designs/registries_design.md +780 -0
  202. rememberstack-0.1.0/plan/designs/retrieval_design.md +509 -0
  203. rememberstack-0.1.0/plan/implementation_evals/README.md +128 -0
  204. rememberstack-0.1.0/plan/implementation_evals/codex_review.md +238 -0
  205. rememberstack-0.1.0/plan/implementation_evals/codex_review_2.md +366 -0
  206. rememberstack-0.1.0/plan/implementation_evals/eval_checks/boundary_correctness_in_library_d60.yaml +35 -0
  207. rememberstack-0.1.0/plan/implementation_evals/eval_checks/boundary_extension_points_no_bypass_d60.yaml +30 -0
  208. rememberstack-0.1.0/plan/implementation_evals/eval_checks/boundary_no_human_control_plane_d60.yaml +30 -0
  209. rememberstack-0.1.0/plan/implementation_evals/eval_checks/boundary_provider_ports_d61.yaml +36 -0
  210. rememberstack-0.1.0/plan/implementation_evals/eval_checks/code_architecture_enforced_d62.yaml +30 -0
  211. rememberstack-0.1.0/plan/implementation_evals/eval_checks/code_config_via_pydantic_settings.yaml +31 -0
  212. rememberstack-0.1.0/plan/implementation_evals/eval_checks/code_exceptions_never_buried.yaml +46 -0
  213. rememberstack-0.1.0/plan/implementation_evals/eval_checks/code_tooling_and_migrations.yaml +27 -0
  214. rememberstack-0.1.0/plan/implementation_evals/eval_checks/delivery_artifacts_and_task_shells_d62.yaml +41 -0
  215. rememberstack-0.1.0/plan/implementation_evals/eval_checks/delivery_docs_site.yaml +41 -0
  216. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_blockizer_owns_identity.yaml +33 -0
  217. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_content_addressed_reuse.yaml +38 -0
  218. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_converter_router_versioned.yaml +31 -0
  219. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_lineage_version_schema.yaml +33 -0
  220. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_living_mode_retraction.yaml +34 -0
  221. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_origin_stamped_at_ingest.yaml +28 -0
  222. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_postgres_holds_no_bodies.yaml +29 -0
  223. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_raw_immutable_id_addressed.yaml +31 -0
  224. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_structure_contract_unconditional.yaml +32 -0
  225. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_subworker_chain_crossrefs_d36.yaml +30 -0
  226. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e1_chunks_whole_blocks_no_overlap.yaml +33 -0
  227. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e1_multigranularity_retrieval.yaml +29 -0
  228. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_asserted_validity_immutable.yaml +34 -0
  229. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_claims_immutable_append_only.yaml +32 -0
  230. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_context_bundle_two_calls.yaml +35 -0
  231. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_grounding_layered_dual_field.yaml +38 -0
  232. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_no_pre_extraction_gate.yaml +33 -0
  233. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_selection_ledger_replay.yaml +31 -0
  234. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_selection_recall_envelope.yaml +31 -0
  235. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_stance_kept_as_observation.yaml +35 -0
  236. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_testimony_currency_counting.yaml +41 -0
  237. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_blocking_cheap_first_cascade.yaml +30 -0
  238. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_observations_untyped_adjudicated.yaml +40 -0
  239. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_predicate_registry_governed.yaml +38 -0
  240. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_relations_evidence_collapse.yaml +34 -0
  241. rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_supersession_fact_level_bitemporal.yaml +37 -0
  242. rememberstack-0.1.0/plan/implementation_evals/eval_checks/embedding_model_port_config_d63.yaml +34 -0
  243. rememberstack-0.1.0/plan/implementation_evals/eval_checks/er_continuous_health_metrics.yaml +30 -0
  244. rememberstack-0.1.0/plan/implementation_evals/eval_checks/er_merges_reversible.yaml +32 -0
  245. rememberstack-0.1.0/plan/implementation_evals/eval_checks/er_resolution_cascade_t0_t4.yaml +33 -0
  246. rememberstack-0.1.0/plan/implementation_evals/eval_checks/er_review_queue_cli.yaml +33 -0
  247. rememberstack-0.1.0/plan/implementation_evals/eval_checks/eval_golden_sets_d22.yaml +33 -0
  248. rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_citations_binding.yaml +32 -0
  249. rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_compiled_vs_authored_ownership.yaml +32 -0
  250. rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_eval_canaries_faithfulness.yaml +31 -0
  251. rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_hard_forget_git_history.yaml +36 -0
  252. rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_one_mechanism_n_scopes.yaml +38 -0
  253. rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_planner_writer_driver.yaml +38 -0
  254. rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_trigger_surface_acyclic.yaml +32 -0
  255. rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_writer_runtime_two_band.yaml +32 -0
  256. rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_converter_routes_bound.yaml +53 -0
  257. rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_derivation_disclosure.yaml +54 -0
  258. rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_lifecycle_representation_basis.yaml +53 -0
  259. rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_p1_media_segments.yaml +48 -0
  260. rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_source_locators.yaml +56 -0
  261. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_deletion_cascade_grains.yaml +50 -0
  262. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_execution_classes_bound.yaml +39 -0
  263. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_idempotency_dlq.yaml +36 -0
  264. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_metering_budgets_enforced.yaml +31 -0
  265. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_operational_correctness_surfaces.yaml +36 -0
  266. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_orchestration_topology.yaml +33 -0
  267. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_producer_checker_families.yaml +32 -0
  268. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_versioned_replay_from_storage.yaml +28 -0
  269. rememberstack-0.1.0/plan/implementation_evals/eval_checks/p1_lance_estate_rebuildable.yaml +32 -0
  270. rememberstack-0.1.0/plan/implementation_evals/eval_checks/p2_asof_and_communities.yaml +30 -0
  271. rememberstack-0.1.0/plan/implementation_evals/eval_checks/p2_no_vectors_in_graph.yaml +29 -0
  272. rememberstack-0.1.0/plan/implementation_evals/eval_checks/p2_projection_contract_views.yaml +38 -0
  273. rememberstack-0.1.0/plan/implementation_evals/eval_checks/p2_rebuild_first_snapshots.yaml +32 -0
  274. rememberstack-0.1.0/plan/implementation_evals/eval_checks/p3_corpus_fs_projection.yaml +33 -0
  275. rememberstack-0.1.0/plan/implementation_evals/eval_checks/p_projections_hold_no_authority.yaml +32 -0
  276. rememberstack-0.1.0/plan/implementation_evals/eval_checks/registry_scale_partitioning_d23.yaml +37 -0
  277. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_claims_never_answer_now.yaml +31 -0
  278. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_contradiction_completeness.yaml +28 -0
  279. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_freshness_stamps.yaml +30 -0
  280. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_grain_discipline.yaml +29 -0
  281. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_negative_taxonomy.yaml +30 -0
  282. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_truncation_markers.yaml +27 -0
  283. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_filesystem_first_mounts_skill.yaml +34 -0
  284. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_hydration_reverifies.yaml +34 -0
  285. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_primitives_recipes_registry.yaml +35 -0
  286. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_skill_s58_acceptance.yaml +30 -0
  287. rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_trust_boundary_no_content_auth.yaml +30 -0
  288. rememberstack-0.1.0/plan/implementation_evals/eval_checks/scope_views_share_graph_d16.yaml +33 -0
  289. rememberstack-0.1.0/plan/implementation_evals/eval_checks/source_of_truth_split_d1_d46.yaml +30 -0
  290. rememberstack-0.1.0/plan/plans/.gitkeep +0 -0
  291. rememberstack-0.1.0/plan/plans/phase-0-foundations.md +148 -0
  292. rememberstack-0.1.0/plan/plans/phase-1-walking-skeleton.md +31 -0
  293. rememberstack-0.1.0/plan/plans/phase-2-truth-machinery.md +30 -0
  294. rememberstack-0.1.0/plan/plans/phase-3-evidence-lifecycle.md +29 -0
  295. rememberstack-0.1.0/plan/plans/phase-4-projections.md +28 -0
  296. rememberstack-0.1.0/plan/plans/phase-5-retrieval-complete.md +19 -0
  297. rememberstack-0.1.0/plan/plans/phase-6-plane-k.md +19 -0
  298. rememberstack-0.1.0/plan/plans/phase-7-scale-ops.md +192 -0
  299. rememberstack-0.1.0/plan/plans/phase-8-benchmarks.md +22 -0
  300. rememberstack-0.1.0/plan/plans/roadmap.md +175 -0
  301. rememberstack-0.1.0/plan/requirements/requirements_v3.md +244 -0
  302. rememberstack-0.1.0/pyproject.toml +158 -0
  303. rememberstack-0.1.0/questions.md +242 -0
  304. rememberstack-0.1.0/scripts/check_release_contract.py +78 -0
  305. rememberstack-0.1.0/skills-lock.json +18 -0
  306. rememberstack-0.1.0/src/rememberstack/__init__.py +9 -0
  307. rememberstack-0.1.0/src/rememberstack/adapters/__init__.py +42 -0
  308. rememberstack-0.1.0/src/rememberstack/adapters/codex_writer.py +221 -0
  309. rememberstack-0.1.0/src/rememberstack/adapters/markitdown_converter.py +42 -0
  310. rememberstack-0.1.0/src/rememberstack/adapters/openrouter.py +136 -0
  311. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/__init__.py +54 -0
  312. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/forget.py +66 -0
  313. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/git.py +374 -0
  314. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/lance.py +328 -0
  315. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/minio.py +279 -0
  316. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/mounts.py +249 -0
  317. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/object_store.py +130 -0
  318. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/projection.py +80 -0
  319. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/queue.py +137 -0
  320. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/telemetry.py +45 -0
  321. rememberstack-0.1.0/src/rememberstack/adapters/selfhost/watcher.py +70 -0
  322. rememberstack-0.1.0/src/rememberstack/adapters/testing/__init__.py +15 -0
  323. rememberstack-0.1.0/src/rememberstack/adapters/testing/cost_meter.py +13 -0
  324. rememberstack-0.1.0/src/rememberstack/adapters/testing/model_provider.py +83 -0
  325. rememberstack-0.1.0/src/rememberstack/adapters/testing/queue.py +43 -0
  326. rememberstack-0.1.0/src/rememberstack/adapters/testing/telemetry.py +22 -0
  327. rememberstack-0.1.0/src/rememberstack/client.py +19 -0
  328. rememberstack-0.1.0/src/rememberstack/core/__init__.py +127 -0
  329. rememberstack-0.1.0/src/rememberstack/core/blockizer.py +189 -0
  330. rememberstack-0.1.0/src/rememberstack/core/chunker.py +216 -0
  331. rememberstack-0.1.0/src/rememberstack/core/consumption_skill.py +275 -0
  332. rememberstack-0.1.0/src/rememberstack/core/conversion.py +76 -0
  333. rememberstack-0.1.0/src/rememberstack/core/core_manifest.py +598 -0
  334. rememberstack-0.1.0/src/rememberstack/core/extension_packs.py +124 -0
  335. rememberstack-0.1.0/src/rememberstack/core/forget.py +17 -0
  336. rememberstack-0.1.0/src/rememberstack/core/knowledge_authored.py +276 -0
  337. rememberstack-0.1.0/src/rememberstack/core/knowledge_compile.py +215 -0
  338. rememberstack-0.1.0/src/rememberstack/core/knowledge_fact_sheet.py +210 -0
  339. rememberstack-0.1.0/src/rememberstack/core/knowledge_hashing.py +68 -0
  340. rememberstack-0.1.0/src/rememberstack/core/knowledge_planner.py +64 -0
  341. rememberstack-0.1.0/src/rememberstack/core/knowledge_writer.py +175 -0
  342. rememberstack-0.1.0/src/rememberstack/core/ranking.py +200 -0
  343. rememberstack-0.1.0/src/rememberstack/core/recipe_linter.py +149 -0
  344. rememberstack-0.1.0/src/rememberstack/core/section_snap.py +209 -0
  345. rememberstack-0.1.0/src/rememberstack/core/storage_routing.py +27 -0
  346. rememberstack-0.1.0/src/rememberstack/eval/__init__.py +53 -0
  347. rememberstack-0.1.0/src/rememberstack/eval/consumption.py +141 -0
  348. rememberstack-0.1.0/src/rememberstack/eval/contradiction.py +184 -0
  349. rememberstack-0.1.0/src/rememberstack/eval/harness.py +136 -0
  350. rememberstack-0.1.0/src/rememberstack/eval/lifecycle.py +400 -0
  351. rememberstack-0.1.0/src/rememberstack/eval/operational_scale.py +49 -0
  352. rememberstack-0.1.0/src/rememberstack/eval/resolution.py +255 -0
  353. rememberstack-0.1.0/src/rememberstack/eval/retrieval_spikes.py +50 -0
  354. rememberstack-0.1.0/src/rememberstack/eval/skeleton.py +231 -0
  355. rememberstack-0.1.0/src/rememberstack/llm/__init__.py +1 -0
  356. rememberstack-0.1.0/src/rememberstack/model/__init__.py +589 -0
  357. rememberstack-0.1.0/src/rememberstack/model/adjudication.py +100 -0
  358. rememberstack-0.1.0/src/rememberstack/model/auth.py +27 -0
  359. rememberstack-0.1.0/src/rememberstack/model/blocks.py +30 -0
  360. rememberstack-0.1.0/src/rememberstack/model/chunks.py +190 -0
  361. rememberstack-0.1.0/src/rememberstack/model/claims.py +162 -0
  362. rememberstack-0.1.0/src/rememberstack/model/client.py +98 -0
  363. rememberstack-0.1.0/src/rememberstack/model/clustering.py +54 -0
  364. rememberstack-0.1.0/src/rememberstack/model/component_version.py +124 -0
  365. rememberstack-0.1.0/src/rememberstack/model/consumption.py +88 -0
  366. rememberstack-0.1.0/src/rememberstack/model/conversion.py +31 -0
  367. rememberstack-0.1.0/src/rememberstack/model/deployment.py +53 -0
  368. rememberstack-0.1.0/src/rememberstack/model/documents.py +168 -0
  369. rememberstack-0.1.0/src/rememberstack/model/envelope.py +513 -0
  370. rememberstack-0.1.0/src/rememberstack/model/evaluation.py +72 -0
  371. rememberstack-0.1.0/src/rememberstack/model/forget.py +143 -0
  372. rememberstack-0.1.0/src/rememberstack/model/git.py +13 -0
  373. rememberstack-0.1.0/src/rememberstack/model/knowledge.py +840 -0
  374. rememberstack-0.1.0/src/rememberstack/model/knowledge_authored.py +325 -0
  375. rememberstack-0.1.0/src/rememberstack/model/knowledge_planner.py +431 -0
  376. rememberstack-0.1.0/src/rememberstack/model/lifecycle.py +42 -0
  377. rememberstack-0.1.0/src/rememberstack/model/model_provider.py +78 -0
  378. rememberstack-0.1.0/src/rememberstack/model/mounts.py +24 -0
  379. rememberstack-0.1.0/src/rememberstack/model/object_store.py +21 -0
  380. rememberstack-0.1.0/src/rememberstack/model/operational_scale.py +59 -0
  381. rememberstack-0.1.0/src/rememberstack/model/operations.py +153 -0
  382. rememberstack-0.1.0/src/rememberstack/model/processing.py +228 -0
  383. rememberstack-0.1.0/src/rememberstack/model/queue.py +73 -0
  384. rememberstack-0.1.0/src/rememberstack/model/recipes.py +83 -0
  385. rememberstack-0.1.0/src/rememberstack/model/relations.py +79 -0
  386. rememberstack-0.1.0/src/rememberstack/model/resolution.py +83 -0
  387. rememberstack-0.1.0/src/rememberstack/model/retrieval_spikes.py +62 -0
  388. rememberstack-0.1.0/src/rememberstack/model/sections.py +120 -0
  389. rememberstack-0.1.0/src/rememberstack/model/telemetry.py +30 -0
  390. rememberstack-0.1.0/src/rememberstack/ports/__init__.py +29 -0
  391. rememberstack-0.1.0/src/rememberstack/ports/auth.py +16 -0
  392. rememberstack-0.1.0/src/rememberstack/ports/connector.py +23 -0
  393. rememberstack-0.1.0/src/rememberstack/ports/cost_meter.py +17 -0
  394. rememberstack-0.1.0/src/rememberstack/ports/forget.py +20 -0
  395. rememberstack-0.1.0/src/rememberstack/ports/git.py +20 -0
  396. rememberstack-0.1.0/src/rememberstack/ports/model_provider.py +28 -0
  397. rememberstack-0.1.0/src/rememberstack/ports/mounts.py +16 -0
  398. rememberstack-0.1.0/src/rememberstack/ports/object_store.py +27 -0
  399. rememberstack-0.1.0/src/rememberstack/ports/p1_index.py +92 -0
  400. rememberstack-0.1.0/src/rememberstack/ports/purge.py +93 -0
  401. rememberstack-0.1.0/src/rememberstack/ports/queue.py +23 -0
  402. rememberstack-0.1.0/src/rememberstack/ports/telemetry.py +21 -0
  403. rememberstack-0.1.0/src/rememberstack/profiles/__init__.py +22 -0
  404. rememberstack-0.1.0/src/rememberstack/profiles/selfhost.py +324 -0
  405. rememberstack-0.1.0/src/rememberstack/profiles/selfhost_forget.py +158 -0
  406. rememberstack-0.1.0/src/rememberstack/profiles/selfhost_operations.py +95 -0
  407. rememberstack-0.1.0/src/rememberstack/py.typed +1 -0
  408. rememberstack-0.1.0/src/rememberstack/spine/__init__.py +93 -0
  409. rememberstack-0.1.0/src/rememberstack/spine/admission.py +26 -0
  410. rememberstack-0.1.0/src/rememberstack/spine/backfill.py +168 -0
  411. rememberstack-0.1.0/src/rememberstack/spine/catalog_contract.py +742 -0
  412. rememberstack-0.1.0/src/rememberstack/spine/chunk_catalog.py +237 -0
  413. rememberstack-0.1.0/src/rememberstack/spine/claim_catalog.py +298 -0
  414. rememberstack-0.1.0/src/rememberstack/spine/clustering.py +740 -0
  415. rememberstack-0.1.0/src/rememberstack/spine/component_versions.py +208 -0
  416. rememberstack-0.1.0/src/rememberstack/spine/consumption.py +81 -0
  417. rememberstack-0.1.0/src/rememberstack/spine/deployment_bootstrap.py +445 -0
  418. rememberstack-0.1.0/src/rememberstack/spine/document_catalog.py +621 -0
  419. rememberstack-0.1.0/src/rememberstack/spine/entity_registry.py +205 -0
  420. rememberstack-0.1.0/src/rememberstack/spine/extension_packs.py +220 -0
  421. rememberstack-0.1.0/src/rememberstack/spine/fact_catalog.py +571 -0
  422. rememberstack-0.1.0/src/rememberstack/spine/forget.py +1753 -0
  423. rememberstack-0.1.0/src/rememberstack/spine/knowledge.py +5467 -0
  424. rememberstack-0.1.0/src/rememberstack/spine/lifecycle.py +1071 -0
  425. rememberstack-0.1.0/src/rememberstack/spine/migrations/__init__.py +1 -0
  426. rememberstack-0.1.0/src/rememberstack/spine/migrations/_helpers.py +153 -0
  427. rememberstack-0.1.0/src/rememberstack/spine/migrations/env.py +58 -0
  428. rememberstack-0.1.0/src/rememberstack/spine/migrations/script.py.mako +27 -0
  429. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/__init__.py +1 -0
  430. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0001_extensions_enums.py +189 -0
  431. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0002_infrastructure_registries.py +321 -0
  432. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0003_entities_evaluation_e0_e1.py +631 -0
  433. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0004_claims_facts_evidence.py +411 -0
  434. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0005_projection_knowledge_retrieval.py +391 -0
  435. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0006_partitions_views.py +158 -0
  436. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p2_06_0007_invalidated_outcome.py +26 -0
  437. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p3_01_0008_document_version_target.py +58 -0
  438. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p3_05_0009_reconcile_stage.py +27 -0
  439. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p3_07_0010_lifecycle_eval_suite.py +25 -0
  440. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p4_01_0011_survivor_view_rewrite.py +57 -0
  441. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p6_02_0012_knowledge_compile_recovery.py +58 -0
  442. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p6_04_0013_knowledge_writer_ledger.py +46 -0
  443. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p6_05_0014_knowledge_planner_runtime.py +217 -0
  444. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p6_06_0015_authored_dispatch_runtime.py +38 -0
  445. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p7_02_0016_operational_eval_suite.py +19 -0
  446. rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p7_05_0017_hard_forget.py +55 -0
  447. rememberstack-0.1.0/src/rememberstack/spine/observation_adjudication.py +778 -0
  448. rememberstack-0.1.0/src/rememberstack/spine/operations.py +298 -0
  449. rememberstack-0.1.0/src/rememberstack/spine/projection.py +662 -0
  450. rememberstack-0.1.0/src/rememberstack/spine/recipes.py +276 -0
  451. rememberstack-0.1.0/src/rememberstack/spine/resolver.py +763 -0
  452. rememberstack-0.1.0/src/rememberstack/spine/review.py +650 -0
  453. rememberstack-0.1.0/src/rememberstack/spine/settings.py +22 -0
  454. rememberstack-0.1.0/src/rememberstack/spine/supersession.py +510 -0
  455. rememberstack-0.1.0/src/rememberstack/spine/sync.py +128 -0
  456. rememberstack-0.1.0/src/rememberstack/spine/work_ledger.py +816 -0
  457. rememberstack-0.1.0/src/rememberstack/surfaces/__init__.py +110 -0
  458. rememberstack-0.1.0/src/rememberstack/surfaces/cli.py +447 -0
  459. rememberstack-0.1.0/src/rememberstack/surfaces/consumption_skill.py +87 -0
  460. rememberstack-0.1.0/src/rememberstack/surfaces/graph_queries.py +698 -0
  461. rememberstack-0.1.0/src/rememberstack/surfaces/http_api.py +377 -0
  462. rememberstack-0.1.0/src/rememberstack/surfaces/mcp.py +67 -0
  463. rememberstack-0.1.0/src/rememberstack/surfaces/query_engine.py +1591 -0
  464. rememberstack-0.1.0/src/rememberstack/surfaces/recipe_executor.py +185 -0
  465. rememberstack-0.1.0/src/rememberstack/surfaces/recipe_surface.py +219 -0
  466. rememberstack-0.1.0/src/rememberstack/surfaces/remote_mcp.py +133 -0
  467. rememberstack-0.1.0/src/rememberstack/surfaces/sdk.py +324 -0
  468. rememberstack-0.1.0/src/rememberstack/workers/__init__.py +155 -0
  469. rememberstack-0.1.0/src/rememberstack/workers/base.py +312 -0
  470. rememberstack-0.1.0/src/rememberstack/workers/e0.py +577 -0
  471. rememberstack-0.1.0/src/rememberstack/workers/e1.py +425 -0
  472. rememberstack-0.1.0/src/rememberstack/workers/e2.py +525 -0
  473. rememberstack-0.1.0/src/rememberstack/workers/e3.py +434 -0
  474. rememberstack-0.1.0/src/rememberstack/workers/forget.py +299 -0
  475. rememberstack-0.1.0/src/rememberstack/workers/knowledge_authored.py +146 -0
  476. rememberstack-0.1.0/src/rememberstack/workers/knowledge_driver.py +735 -0
  477. rememberstack-0.1.0/src/rememberstack/workers/knowledge_fact_sheet.py +123 -0
  478. rememberstack-0.1.0/src/rememberstack/workers/knowledge_planner.py +325 -0
  479. rememberstack-0.1.0/src/rememberstack/workers/knowledge_writer.py +393 -0
  480. rememberstack-0.1.0/src/rememberstack/workers/operations.py +42 -0
  481. rememberstack-0.1.0/src/rememberstack/workers/p1.py +234 -0
  482. rememberstack-0.1.0/src/rememberstack/workers/p2.py +513 -0
  483. rememberstack-0.1.0/src/rememberstack/workers/p2_analytics.py +276 -0
  484. rememberstack-0.1.0/src/rememberstack/workers/p3.py +673 -0
  485. rememberstack-0.1.0/src/rememberstack/workers/reconcile.py +485 -0
  486. rememberstack-0.1.0/src/rememberstack/workers/sync.py +168 -0
  487. rememberstack-0.1.0/src/tests/adapters/test_codex_writer.py +150 -0
  488. rememberstack-0.1.0/src/tests/adapters/test_minio_store.py +159 -0
  489. rememberstack-0.1.0/src/tests/adapters/test_mount_provisioning.py +258 -0
  490. rememberstack-0.1.0/src/tests/adapters/test_openrouter.py +42 -0
  491. rememberstack-0.1.0/src/tests/adapters/test_selfhost_forget.py +92 -0
  492. rememberstack-0.1.0/src/tests/adapters/test_selfhost_git.py +204 -0
  493. rememberstack-0.1.0/src/tests/adapters/test_selfhost_purge.py +233 -0
  494. rememberstack-0.1.0/src/tests/adapters/test_selfhost_queue.py +237 -0
  495. rememberstack-0.1.0/src/tests/adapters/test_selfhost_stores.py +56 -0
  496. rememberstack-0.1.0/src/tests/adapters/test_telemetry.py +48 -0
  497. rememberstack-0.1.0/src/tests/blockizer_corpus/expected_hashes.json +51 -0
  498. rememberstack-0.1.0/src/tests/blockizer_corpus/seed_mixed.md +24 -0
  499. rememberstack-0.1.0/src/tests/core/test_blockizer_corpus.py +79 -0
  500. rememberstack-0.1.0/src/tests/core/test_chunker.py +234 -0
  501. rememberstack-0.1.0/src/tests/core/test_consumption_skill.py +135 -0
  502. rememberstack-0.1.0/src/tests/core/test_conversion.py +39 -0
  503. rememberstack-0.1.0/src/tests/core/test_core_manifest.py +65 -0
  504. rememberstack-0.1.0/src/tests/core/test_forget_identity.py +29 -0
  505. rememberstack-0.1.0/src/tests/core/test_knowledge_authored.py +91 -0
  506. rememberstack-0.1.0/src/tests/core/test_knowledge_compile.py +247 -0
  507. rememberstack-0.1.0/src/tests/core/test_knowledge_fact_sheet.py +192 -0
  508. rememberstack-0.1.0/src/tests/core/test_knowledge_hashing.py +241 -0
  509. rememberstack-0.1.0/src/tests/core/test_knowledge_planner.py +162 -0
  510. rememberstack-0.1.0/src/tests/core/test_knowledge_writer.py +199 -0
  511. rememberstack-0.1.0/src/tests/core/test_section_snap.py +286 -0
  512. rememberstack-0.1.0/src/tests/eval/test_harness_skeleton.py +156 -0
  513. rememberstack-0.1.0/src/tests/eval/test_s55_hard_forget.py +271 -0
  514. rememberstack-0.1.0/src/tests/eval/test_s55_selfhost_restore.py +396 -0
  515. rememberstack-0.1.0/src/tests/eval/test_s58_consumption.py +297 -0
  516. rememberstack-0.1.0/src/tests/model/test_component_version.py +189 -0
  517. rememberstack-0.1.0/src/tests/model/test_deployment.py +100 -0
  518. rememberstack-0.1.0/src/tests/model/test_forget.py +118 -0
  519. rememberstack-0.1.0/src/tests/packaging/test_client_wheel.py +198 -0
  520. rememberstack-0.1.0/src/tests/packaging/test_release_contract.py +59 -0
  521. rememberstack-0.1.0/src/tests/spikes/test_operational_scale.py +675 -0
  522. rememberstack-0.1.0/src/tests/spikes/test_p2_engine_spikes.py +834 -0
  523. rememberstack-0.1.0/src/tests/spikes/test_retrieval_spikes.py +885 -0
  524. rememberstack-0.1.0/src/tests/spine/test_backfill.py +253 -0
  525. rememberstack-0.1.0/src/tests/spine/test_catalog_lanes.py +19 -0
  526. rememberstack-0.1.0/src/tests/spine/test_clustering.py +371 -0
  527. rememberstack-0.1.0/src/tests/spine/test_component_versions.py +476 -0
  528. rememberstack-0.1.0/src/tests/spine/test_deployment_bootstrap.py +600 -0
  529. rememberstack-0.1.0/src/tests/spine/test_forget_catalog.py +1103 -0
  530. rememberstack-0.1.0/src/tests/spine/test_governance.py +287 -0
  531. rememberstack-0.1.0/src/tests/spine/test_knowledge_commit_driver.py +876 -0
  532. rememberstack-0.1.0/src/tests/spine/test_knowledge_control_plane.py +2634 -0
  533. rememberstack-0.1.0/src/tests/spine/test_migrations.py +266 -0
  534. rememberstack-0.1.0/src/tests/spine/test_observation_adjudication.py +546 -0
  535. rememberstack-0.1.0/src/tests/spine/test_operations.py +510 -0
  536. rememberstack-0.1.0/src/tests/spine/test_resolver.py +367 -0
  537. rememberstack-0.1.0/src/tests/spine/test_review_queue.py +468 -0
  538. rememberstack-0.1.0/src/tests/spine/test_supersession.py +414 -0
  539. rememberstack-0.1.0/src/tests/spine/test_unmerge_ripple.py +340 -0
  540. rememberstack-0.1.0/src/tests/spine/test_work_ledger.py +680 -0
  541. rememberstack-0.1.0/src/tests/surfaces/test_client_sdk.py +419 -0
  542. rememberstack-0.1.0/src/tests/surfaces/test_envelope_contract.py +482 -0
  543. rememberstack-0.1.0/src/tests/surfaces/test_forget_admission.py +40 -0
  544. rememberstack-0.1.0/src/tests/surfaces/test_graph_queries.py +534 -0
  545. rememberstack-0.1.0/src/tests/surfaces/test_ops_cli.py +100 -0
  546. rememberstack-0.1.0/src/tests/surfaces/test_recipe_registry.py +465 -0
  547. rememberstack-0.1.0/src/tests/surfaces/test_retrieval_api.py +786 -0
  548. rememberstack-0.1.0/src/tests/surfaces/test_retrieval_primitives.py +990 -0
  549. rememberstack-0.1.0/src/tests/surfaces/test_surfaces_parity.py +430 -0
  550. rememberstack-0.1.0/src/tests/test_forget_port_contract.py +140 -0
  551. rememberstack-0.1.0/src/tests/test_port_inventory_and_conformance.py +319 -0
  552. rememberstack-0.1.0/src/tests/test_port_model_values.py +88 -0
  553. rememberstack-0.1.0/src/tests/test_queue_port_contract.py +165 -0
  554. rememberstack-0.1.0/src/tests/test_smoke.py +14 -0
  555. rememberstack-0.1.0/src/tests/workers/test_e0_chain.py +666 -0
  556. rememberstack-0.1.0/src/tests/workers/test_e1_chain.py +366 -0
  557. rememberstack-0.1.0/src/tests/workers/test_e2_chain.py +458 -0
  558. rememberstack-0.1.0/src/tests/workers/test_e3_chain.py +638 -0
  559. rememberstack-0.1.0/src/tests/workers/test_hard_forget_handler.py +371 -0
  560. rememberstack-0.1.0/src/tests/workers/test_hard_forget_service.py +249 -0
  561. rememberstack-0.1.0/src/tests/workers/test_ingest_admission.py +75 -0
  562. rememberstack-0.1.0/src/tests/workers/test_lifecycle_reconciliation.py +1005 -0
  563. rememberstack-0.1.0/src/tests/workers/test_p2_analytics.py +405 -0
  564. rememberstack-0.1.0/src/tests/workers/test_p2_rebuild.py +427 -0
  565. rememberstack-0.1.0/src/tests/workers/test_p3_corpusfs.py +444 -0
  566. rememberstack-0.1.0/src/tests/workers/test_reuse_lifecycle.py +431 -0
  567. rememberstack-0.1.0/src/tests/workers/test_watch_loop.py +492 -0
  568. rememberstack-0.1.0/uv.lock +1459 -0
  569. rememberstack-0.1.0/website/.gitignore +25 -0
  570. rememberstack-0.1.0/website/README.md +114 -0
  571. rememberstack-0.1.0/website/mdx-components.tsx +36 -0
  572. rememberstack-0.1.0/website/next.config.ts +26 -0
  573. rememberstack-0.1.0/website/package-lock.json +4779 -0
  574. rememberstack-0.1.0/website/package.json +41 -0
  575. rememberstack-0.1.0/website/postcss.config.mjs +8 -0
  576. rememberstack-0.1.0/website/public/.nojekyll +0 -0
  577. rememberstack-0.1.0/website/public/CNAME +1 -0
  578. rememberstack-0.1.0/website/src/app/docs/architecture/page.mdx +57 -0
  579. rememberstack-0.1.0/website/src/app/docs/concepts/page.mdx +50 -0
  580. rememberstack-0.1.0/website/src/app/docs/deployment/page.mdx +94 -0
  581. rememberstack-0.1.0/website/src/app/docs/layout.tsx +46 -0
  582. rememberstack-0.1.0/website/src/app/docs/mounts/page.mdx +109 -0
  583. rememberstack-0.1.0/website/src/app/docs/page.mdx +43 -0
  584. rememberstack-0.1.0/website/src/app/docs/project-status/page.mdx +50 -0
  585. rememberstack-0.1.0/website/src/app/docs/reference/api/page.mdx +178 -0
  586. rememberstack-0.1.0/website/src/app/docs/reference/cli/page.mdx +216 -0
  587. rememberstack-0.1.0/website/src/app/docs/reference/mcp/page.mdx +78 -0
  588. rememberstack-0.1.0/website/src/app/globals.css +166 -0
  589. rememberstack-0.1.0/website/src/app/layout.tsx +46 -0
  590. rememberstack-0.1.0/website/src/app/page.tsx +52 -0
  591. rememberstack-0.1.0/website/src/components/docs/DocsPageNavigation.tsx +42 -0
  592. rememberstack-0.1.0/website/src/components/docs/DocsSidebar.tsx +62 -0
  593. rememberstack-0.1.0/website/src/components/docs/DocsTableOfContents.tsx +81 -0
  594. rememberstack-0.1.0/website/src/components/docs/MobileDocsSidebar.tsx +54 -0
  595. rememberstack-0.1.0/website/src/components/search/SearchCommand.tsx +181 -0
  596. rememberstack-0.1.0/website/src/components/site/SiteHeader.tsx +38 -0
  597. rememberstack-0.1.0/website/src/lib/docs/navigation.ts +61 -0
  598. rememberstack-0.1.0/website/src/lib/search/pagefind.ts +86 -0
  599. rememberstack-0.1.0/website/src/lib/utils.ts +7 -0
  600. rememberstack-0.1.0/website/tsconfig.json +42 -0
@@ -0,0 +1,226 @@
1
+ ---
2
+ name: eval-banana
3
+ description: Guide for using eval-banana, a lightweight aspect-based evaluation framework with YAML check definitions. Use when the user is working in a project with `eval_checks/` directories, wants to write or debug YAML eval definitions, needs to score LLM outputs or workflow behavior with pass/fail checks, is running `eval-banana` / `eb` CLI commands, or is setting up eval-banana in a new project. Covers deterministic checks, harness_judge checks, auto-discovery rules, context.json contract, config precedence, and report interpretation.
4
+ ---
5
+
6
+ # eval-banana
7
+
8
+ ## Overview
9
+
10
+ eval-banana is a lightweight evaluation framework. Check definitions live in YAML files under `eval_checks/` directories and are auto-discovered. Each check scores 0 or 1 (pass/fail) with equal weight. Two check types cover most needs. One YAML file per check — there is no suite wrapper.
11
+
12
+ ## The two check types
13
+
14
+ | Type | Use when | Mechanism |
15
+ |---|---|---|
16
+ | `deterministic` | Asserting file content, structure, or values objectively | Python script via subprocess; exit 0 = pass, non-zero = fail |
17
+ | `harness_judge` | Evaluating qualitative properties (coherence, tone, factuality) | Harness agent returns `{"score": 0\|1, "reason": "..."}` |
18
+
19
+ **Default to `deterministic`** when the condition can be checked with code — it's the cheapest, most reliable, and requires no credentials.
20
+
21
+ ## Core workflow
22
+
23
+ 1. **Install** (once per machine): `uv tool install git+https://github.com/writeitai/eval-banana.git`
24
+ 2. **Initialize in project**: `eval-banana init` — creates `.eval-banana/config.toml`
25
+ 3. **Write checks**: add `*.yaml` files to any `eval_checks/` directory (they are auto-discovered from the project root)
26
+ 4. **Run**: `eval-banana run`
27
+ 5. **Read the report**: look under `.eval-banana/results/<run_id>/`
28
+
29
+ ## Common YAML fields
30
+
31
+ Every check file starts with these fields regardless of type:
32
+
33
+ ```yaml
34
+ schema_version: 1 # Always 1. Required. No default.
35
+ id: my_check_id # Unique across the project. Pattern: [a-zA-Z0-9_-]+
36
+ type: deterministic # One of: deterministic, harness_judge
37
+ description: Human-readable # Required. Non-empty.
38
+ tags: [fast, critical] # Optional list of free-form tags.
39
+ ```
40
+
41
+ Plus type-specific fields below.
42
+
43
+ ## Writing a `deterministic` check
44
+
45
+ Runs a Python script via subprocess. Exit code 0 = pass, non-zero = fail. Infrastructure problems (missing script file, OS execution failure) = error.
46
+
47
+ ```yaml
48
+ schema_version: 1
49
+ id: output_has_result_key
50
+ type: deterministic
51
+ description: output.json exists and contains a 'result' key.
52
+ script: |
53
+ import json, sys
54
+ from pathlib import Path
55
+
56
+ ctx = json.loads(Path(sys.argv[1]).read_text())
57
+ project_root = Path(ctx["project_root"])
58
+ output = project_root / "output.json"
59
+ if not output.exists():
60
+ sys.exit(1)
61
+ data = json.loads(output.read_text())
62
+ if "result" not in data:
63
+ sys.exit(1)
64
+ ```
65
+
66
+ Use `script: |` for inline Python, or `script_path: my_script.py` for an external script. The path is resolved **relative to the YAML file's directory**. Exactly one of `script` or `script_path` must be set.
67
+
68
+ ### The `context.json` contract (critical!)
69
+
70
+ The script is invoked as `python <script> <context.json>`. Read `sys.argv[1]` to get the context path. It always has this exact shape:
71
+
72
+ ```json
73
+ {
74
+ "check_id": "output_has_result_key",
75
+ "description": "output.json exists and contains a 'result' key.",
76
+ "project_root": "/abs/path/to/project",
77
+ "source_path": "/abs/path/to/project/eval_checks/my_check.yaml",
78
+ "output_dir": "/abs/path/.../.eval-banana/results/<run_id>/checks/output_has_result_key-<sha256-of-exact-id>"
79
+ }
80
+ ```
81
+
82
+ Key points:
83
+ - `project_root` is absolute — use it to locate any file in the project.
84
+ - The subprocess runs with `cwd = project_root`, so relative paths in the script also resolve from there.
85
+ - `output_dir` is the durable directory for evidence produced by this check.
86
+ Its final component is the same safe stem used for result, prompt, stdout,
87
+ and stderr artifacts: a readable label of at most 40 characters plus the
88
+ full SHA-256 of the exact check ID. Never reconstruct it from `check_id`.
89
+
90
+ ### Deterministic failure mapping
91
+
92
+ - `sys.exit(0)` or falling off the end → passed
93
+ - `sys.exit(1)` or any non-zero exit → failed
94
+ - `AssertionError` or any uncaught exception → failed (non-zero exit)
95
+ - `FileNotFoundError` on the script itself → error
96
+
97
+ ## Writing a `harness_judge` check
98
+
99
+ Invokes the configured harness agent with instructions. The agent can read files on its own. It must eventually emit JSON: `{"score": 0|1, "reason": "one sentence"}`.
100
+
101
+ ```yaml
102
+ schema_version: 1
103
+ id: readme_explains_install
104
+ type: harness_judge
105
+ description: README gives a new user enough info to install the package.
106
+ instructions: |
107
+ Read README.md. Does it give a new user enough information to
108
+ install and run the package locally (environment setup, install
109
+ command, and how to invoke it)? Score 1 if yes, 0 if anything
110
+ critical is missing.
111
+ ```
112
+
113
+ Guidelines for good instructions:
114
+ - State the exact condition for score 1 and score 0.
115
+ - Be binary — avoid "mostly", "partially", etc.
116
+ - Reference concrete things to look for.
117
+ - Tell the agent which files to read.
118
+ - Keep it short. Long instructions confuse the judge.
119
+ - Do not ask for scores outside {0, 1} — the parser rejects anything else as `error`.
120
+
121
+ Optional fields:
122
+ - `model: gpt-5.6-sol` — override the default harness model for this one check
123
+ (codex tiers: `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`).
124
+
125
+ ## Auto-discovery rules
126
+
127
+ - eval-banana walks from the project root (the directory containing `.eval-banana/`).
128
+ - It finds every directory named exactly `eval_checks/`.
129
+ - Inside each, it loads every `*.yaml` and `*.yml` file.
130
+ - Check IDs must be unique across all discovered files. Duplicates are a **fatal load error**.
131
+ - These directories are skipped by default: `.git`, `.hg`, `.svn`, `.venv`, `venv`, `node_modules`, `__pycache__`, `dist`, `build`.
132
+ - Symlinked directories are not followed.
133
+
134
+ Co-locate checks with the code they verify:
135
+
136
+ ```
137
+ project/
138
+ ├── eval_checks/ # Top-level checks
139
+ │ └── overall_quality.yaml
140
+ ├── src/api/
141
+ │ └── eval_checks/ # API-specific checks
142
+ │ └── response_schema.yaml
143
+ └── frontend/
144
+ └── eval_checks/ # Frontend E2E checks
145
+ └── login_flow.yaml
146
+ ```
147
+
148
+ ## Running checks
149
+
150
+ ```bash
151
+ eval-banana run # Run everything
152
+ eval-banana run --check-id my_check # Run one check; relaxed validation of siblings
153
+ eval-banana run --check-dir path/ # Only scan this directory
154
+ eval-banana run --verbose # Debug logging
155
+ eval-banana run --pass-threshold 0.8 # Override pass ratio
156
+ eval-banana list # Discover + print checks without running
157
+ eval-banana validate # Validate YAML without executing anything
158
+ eval-banana init [--force] # Create project config
159
+ ```
160
+
161
+ **`--check-id` is the debug escape hatch.** It uses relaxed validation — broken YAML in other files does NOT block a single targeted check. Use it when iterating on one check in a repo with incomplete checks elsewhere.
162
+
163
+ ## Reading results
164
+
165
+ Each run writes to `.eval-banana/results/<run_id>/`:
166
+
167
+ ```
168
+ <run_id>/
169
+ ├── report.json # Machine-readable, full EvalReport
170
+ ├── report.md # Human-readable summary
171
+ └── checks/
172
+ ├── <safe_check_id_stem>/ # Deterministic-check evidence directory
173
+ ├── <safe_check_id_stem>.json # Per-check CheckResult
174
+ ├── <safe_check_id_stem>.prompt.txt # Exact harness-judge input
175
+ ├── <safe_check_id_stem>.stdout.txt # Captured stdout (only if non-empty)
176
+ └── <safe_check_id_stem>.stderr.txt # Captured stderr (only if non-empty)
177
+ ```
178
+
179
+ `<safe_check_id_stem>` is a bounded readable label plus the full SHA-256 of the
180
+ exact check ID. All artifacts for one check share it, while IDs that differ only
181
+ by case or normalization remain distinct. The evidence directory is created for
182
+ deterministic checks; the prompt file is created for harness-judge checks.
183
+
184
+ The console output shows:
185
+ - Run ID
186
+ - `points_earned/total_points` and percentage
187
+ - PASS or FAIL verdict
188
+ - Per-check list with reason (for failed) or error (for errored)
189
+
190
+ **Pass criteria**: `run_passed = (points_earned / total_points) >= pass_threshold AND errored_checks == 0`. A single erroring check means the whole run fails, even if every other check passed.
191
+
192
+ Exit code: 0 on `run_passed`, 1 otherwise. Usable directly in CI.
193
+
194
+ ## When to use which check type
195
+
196
+ - **`deterministic`** — the condition is objective and testable with code:
197
+ - "file X exists and is non-empty"
198
+ - "the JSON has field Y"
199
+ - "no TODO comments in src/"
200
+ - "the CSV has N rows with these columns"
201
+
202
+ - **`harness_judge`** — the condition is subjective or needs language understanding:
203
+ - "the error message is helpful to end users"
204
+ - "the generated summary captures the key points"
205
+ - "the tone is professional and friendly"
206
+ - "the docs explain the concept clearly"
207
+
208
+ **If in doubt, prefer `deterministic`** — cheapest, most reliable, no credentials needed.
209
+
210
+ ## Common gotchas
211
+
212
+ - **Forgetting `schema_version: 1`** — it has no default and omitting it is a validation error.
213
+ - **Using `script:` AND `script_path:`** — exactly one must be set, never both.
214
+ - **Putting a shell string in `command:`** — must be a list, e.g. `["pytest", "-q"]`, never `"pytest -q"`.
215
+ - **Duplicate IDs across files** — fatal. Grep for the ID before adding a new check.
216
+ - **Expecting judge checks to work without a harness** — configure `[harness] agent` or pass `--harness-agent`.
217
+ - **Assuming `cwd` is where you invoked `eval-banana`** — deterministic scripts run with `cwd = project_root`.
218
+ - **LLM judge returns prose instead of JSON** — the runner requires strict `{"score": 0|1, "reason": "..."}`. Tell the LLM to respond with JSON only.
219
+
220
+ ## References
221
+
222
+ For deeper detail, read these as needed:
223
+
224
+ - **`references/yaml-schema.md`** — Every field for every check type, validation rules, and edge cases. Read when writing a check with unusual requirements or debugging a validation error.
225
+ - **`references/examples.md`** — Gallery of real-world check patterns (JSON validation, test runners, linters, LLM tone checks, UI flows). Read when looking for a template matching the current use case.
226
+ - **`references/config.md`** — Full TOML config reference, precedence rules, harness settings, and environment variable list. Read when configuring eval-banana for a new project.
@@ -0,0 +1,109 @@
1
+ # Configuration reference
2
+
3
+ Complete reference for eval-banana configuration: TOML layout, precedence rules, environment variables, and harness_judge setup.
4
+
5
+ ## Table of contents
6
+
7
+ - File locations
8
+ - Config sections
9
+ - Precedence rules
10
+ - Environment variables
11
+ - Harness setup
12
+ - Common config mistakes
13
+
14
+ ## File location
15
+
16
+ Config lives at `.eval-banana/config.toml` in the project directory. It is found by walking upward from the current directory, so `eval-banana` works from any subdirectory.
17
+
18
+ ```bash
19
+ eval-banana init # Create project config
20
+ eval-banana init --force # Overwrite existing
21
+ ```
22
+
23
+ ## Config sections
24
+
25
+ ### `[core]` section
26
+
27
+ | Key | Default | Description |
28
+ |---|---|---|
29
+ | `output_dir` | `.eval-banana/results` | Where run artifacts are written (relative to project root) |
30
+ | `pass_threshold` | `1.0` | Minimum `points/total` ratio for the run to pass (0.0-1.0) |
31
+ | `llm_max_input_chars` | `0` (disabled) | Max characters sent to `harness_judge` per target file; 0 = no limit |
32
+
33
+ ### `[harness]` section
34
+
35
+ | Key | Default | Description |
36
+ |---|---|---|
37
+ | `agent` | unset | Built-in agent name such as `codex`, `claude`, or `gemini` |
38
+ | `model` | unset | Override the template default model |
39
+ | `reasoning_effort` | unset | Override the template reasoning effort |
40
+
41
+ ### `[discovery]` section
42
+
43
+ | Key | Default | Description |
44
+ |---|---|---|
45
+ | `exclude_dirs` | `[".git", ".hg", ".svn", ".venv", "venv", "node_modules", "__pycache__", "dist", "build"]` | Directories to skip when walking for `eval_checks/` |
46
+
47
+ Setting `exclude_dirs` replaces the built-in default list entirely, it does not append.
48
+
49
+ ## Precedence rules
50
+
51
+ Config values are resolved in this order (highest priority first):
52
+
53
+ 1. **CLI arguments** (`--output-dir`, `--harness-model`, etc.)
54
+ 2. **`EVAL_BANANA_*` environment variables**
55
+ 3. **Project config** (`.eval-banana/config.toml`)
56
+ 4. **Built-in defaults**
57
+
58
+ ## Environment variables
59
+
60
+ | Variable | Maps to |
61
+ |---|---|
62
+ | `EVAL_BANANA_OUTPUT_DIR` | `core.output_dir` |
63
+ | `EVAL_BANANA_PASS_THRESHOLD` | `core.pass_threshold` |
64
+ | `EVAL_BANANA_LLM_MAX_INPUT_CHARS` | `core.llm_max_input_chars` |
65
+ | `EVAL_BANANA_HARNESS_AGENT` | `harness.agent` |
66
+ | `EVAL_BANANA_HARNESS_MODEL` | `harness.model` |
67
+ | `EVAL_BANANA_HARNESS_REASONING_EFFORT` | `harness.reasoning_effort` |
68
+
69
+ ## Harness setup
70
+
71
+ Configure a harness agent when your project uses `harness_judge` checks.
72
+
73
+ ```toml
74
+ [harness]
75
+ agent = "codex"
76
+ # codex GPT-5.6 tiers: gpt-5.6-sol (flagship, default), gpt-5.6-terra, gpt-5.6-luna
77
+ model = "gpt-5.6-sol"
78
+ reasoning_effort = "high"
79
+ ```
80
+
81
+ If a project still contains a legacy `[llm]` section, eval-banana exits with a migration error instructing you to delete it and use `[harness]` / `[agents.*]`.
82
+
83
+ ## Generated config template
84
+
85
+ Created by `eval-banana init` at `.eval-banana/config.toml`:
86
+
87
+ ```toml
88
+ # Project-level eval-banana configuration.
89
+
90
+ [core]
91
+ output_dir = ".eval-banana/results"
92
+ pass_threshold = 1.0
93
+ llm_max_input_chars = 0
94
+
95
+ [harness]
96
+ agent = "codex"
97
+
98
+ [discovery]
99
+ exclude_dirs = [".git", ".hg", ".svn", ".venv", "venv", "node_modules", "__pycache__", "dist", "build"]
100
+ ```
101
+
102
+ ## Common config mistakes
103
+
104
+ | Mistake | Symptom | Fix |
105
+ |---|---|---|
106
+ | `pass_threshold: 80` (integer) | All runs fail | Use `pass_threshold = 0.8` (float, 0.0-1.0) |
107
+ | Relative `output_dir` resolved from wrong cwd | Results appear in unexpected locations | eval-banana always resolves from `project_root`, not `pwd` |
108
+ | Leaving a stale `[llm]` section in config | eval-banana exits before loading config | Delete `[llm]` and configure `[harness]` / `[agents.*]` instead |
109
+ | Replacing `exclude_dirs` with an incomplete list | `.git`, `.venv` get scanned | Lists replace, not merge — include all default entries |
@@ -0,0 +1,170 @@
1
+ # Example check patterns
2
+
3
+ Gallery of real-world eval-banana check patterns. Copy and adapt.
4
+
5
+ ## Table of contents
6
+
7
+ - Deterministic: file existence and content
8
+ - Deterministic: JSON schema validation
9
+ - Deterministic: no forbidden tokens in source
10
+ - Deterministic: counting records
11
+ - Harness judge: README quality
12
+ - Harness judge: tone / professionalism
13
+ - Harness judge: factual consistency
14
+ - Harness judge: multi-file comparison
15
+
16
+ ## Deterministic: file existence and content
17
+
18
+ ```yaml
19
+ schema_version: 1
20
+ id: changelog_exists_and_nonempty
21
+ type: deterministic
22
+ description: CHANGELOG.md exists and is at least 200 chars.
23
+ script: |
24
+ import sys
25
+ from pathlib import Path
26
+
27
+ ctx_path = Path(sys.argv[1])
28
+ import json
29
+ ctx = json.loads(ctx_path.read_text())
30
+ changelog = Path(ctx["project_root"]) / "CHANGELOG.md"
31
+ if not changelog.exists():
32
+ print(f"missing: CHANGELOG.md", file=sys.stderr)
33
+ sys.exit(1)
34
+ content = changelog.read_text(encoding="utf-8")
35
+ if len(content) < 200:
36
+ print(f"only {len(content)} chars", file=sys.stderr)
37
+ sys.exit(1)
38
+ ```
39
+
40
+ ## Deterministic: JSON schema validation
41
+
42
+ ```yaml
43
+ schema_version: 1
44
+ id: output_matches_schema
45
+ type: deterministic
46
+ description: output.json has required top-level keys and correct types.
47
+ script: |
48
+ import json, sys
49
+ from pathlib import Path
50
+
51
+ ctx = json.loads(Path(sys.argv[1]).read_text())
52
+ data = json.loads((Path(ctx["project_root"]) / "output.json").read_text())
53
+
54
+ required = {"id": str, "created_at": str, "items": list}
55
+ for key, expected_type in required.items():
56
+ if key not in data:
57
+ print(f"missing key: {key}", file=sys.stderr)
58
+ sys.exit(1)
59
+ if not isinstance(data[key], expected_type):
60
+ print(f"{key} should be {expected_type.__name__}", file=sys.stderr)
61
+ sys.exit(1)
62
+ if not data["items"]:
63
+ print("items is empty", file=sys.stderr)
64
+ sys.exit(1)
65
+ ```
66
+
67
+ ## Deterministic: no forbidden tokens in source
68
+
69
+ ```yaml
70
+ schema_version: 1
71
+ id: no_print_statements_in_src
72
+ type: deterministic
73
+ description: No print() calls in src/ (should use logging).
74
+ script: |
75
+ import json, re, sys
76
+ from pathlib import Path
77
+
78
+ ctx = json.loads(Path(sys.argv[1]).read_text())
79
+ src_dir = Path(ctx["project_root"]) / "src"
80
+ pattern = re.compile(r"\bprint\(")
81
+ offenders = []
82
+ for py_file in src_dir.rglob("*.py"):
83
+ text = py_file.read_text(encoding="utf-8")
84
+ for line_no, line in enumerate(text.splitlines(), 1):
85
+ if line.strip().startswith("#"):
86
+ continue
87
+ if pattern.search(line):
88
+ offenders.append(f"{py_file}:{line_no}")
89
+ if offenders:
90
+ print("\n".join(offenders[:10]), file=sys.stderr)
91
+ sys.exit(1)
92
+ ```
93
+
94
+ ## Deterministic: counting records
95
+
96
+ ```yaml
97
+ schema_version: 1
98
+ id: users_csv_has_enough_rows
99
+ type: deterministic
100
+ description: users.csv has at least 100 rows (excluding header).
101
+ script: |
102
+ import csv, json, sys
103
+ from pathlib import Path
104
+
105
+ ctx = json.loads(Path(sys.argv[1]).read_text())
106
+ path = Path(ctx["project_root"]) / "data" / "users.csv"
107
+ with path.open() as f:
108
+ reader = csv.reader(f)
109
+ next(reader, None) # Skip header
110
+ row_count = sum(1 for _ in reader)
111
+ if row_count < 100:
112
+ print(f"only {row_count} rows", file=sys.stderr)
113
+ sys.exit(1)
114
+ ```
115
+
116
+ ## Harness judge: README quality
117
+
118
+ ```yaml
119
+ schema_version: 1
120
+ id: readme_has_quickstart
121
+ type: harness_judge
122
+ description: README contains a quickstart that a new user can follow in under 5 minutes.
123
+ instructions: |
124
+ Read README.md. Look for a "Quick start" or "Getting started" section.
125
+ Score 1 ONLY if it contains: (1) an install command, (2) a minimum
126
+ config step if required, and (3) at least one example command to run.
127
+ Score 0 if any of these are missing or unclear.
128
+ ```
129
+
130
+ ## Harness judge: tone / professionalism
131
+
132
+ ```yaml
133
+ schema_version: 1
134
+ id: error_messages_are_helpful
135
+ type: harness_judge
136
+ description: Error messages in errors.log are helpful and professional.
137
+ instructions: |
138
+ Read errors.log. Score 1 if the error messages: (a) explain what
139
+ went wrong in plain language, (b) suggest what to do next, and (c) do
140
+ NOT expose stack traces or internal paths to end users. Score 0 if
141
+ any message is cryptic, blames the user, or leaks internals.
142
+ ```
143
+
144
+ ## Harness judge: factual consistency
145
+
146
+ ```yaml
147
+ schema_version: 1
148
+ id: summary_matches_source
149
+ type: harness_judge
150
+ description: The generated summary accurately reflects the source data.
151
+ instructions: |
152
+ Read summary.md and source_data.json. Compare the claims in the summary
153
+ against the facts in the source data. Score 1 if every numeric claim,
154
+ name, and date in the summary can be verified from the source data.
155
+ Score 0 if ANY claim is fabricated, hallucinated, or contradicts the source.
156
+ ```
157
+
158
+ ## Harness judge: multi-file comparison
159
+
160
+ ```yaml
161
+ schema_version: 1
162
+ id: docs_consistent_with_code
163
+ type: harness_judge
164
+ description: API docs describe the actual endpoints implemented in routes.py.
165
+ instructions: |
166
+ Read docs/api.md and src/routes.py. For each endpoint documented in the
167
+ API docs, check if it exists in routes.py. Score 1 if every documented
168
+ endpoint is implemented AND every public endpoint in routes.py is
169
+ documented. Score 0 if there is any drift between the two files.
170
+ ```
@@ -0,0 +1,146 @@
1
+ # YAML schema reference
2
+
3
+ Complete field reference for eval-banana check definitions. Each check file defines a single check — there is no suite wrapper.
4
+
5
+ ## Table of contents
6
+
7
+ - Common fields (all check types)
8
+ - `deterministic` fields
9
+ - `harness_judge` fields
10
+ - Validation rules
11
+ - Error messages and what they mean
12
+
13
+ ## Common fields
14
+
15
+ | Field | Type | Required | Constraints | Notes |
16
+ |---|---|---|---|---|
17
+ | `schema_version` | int | **Yes** | Must equal `1` | No default. Omitting → validation error. |
18
+ | `id` | string | **Yes** | Pattern `^[a-zA-Z0-9_-]+$`, non-empty after stripping | Must be unique across ALL discovered check files |
19
+ | `type` | string | **Yes** | One of `deterministic`, `harness_judge` | Discriminator for the Pydantic union |
20
+ | `description` | string | **Yes** | Non-empty after stripping | Human-readable, shown in reports |
21
+ | `tags` | list[string] | No | — | Free-form metadata. Not yet used for filtering but allowed. |
22
+
23
+ `extra="forbid"` is enabled — any unknown field fails validation.
24
+
25
+ ## `deterministic` check
26
+
27
+ Type-specific fields:
28
+
29
+ | Field | Type | Required | Notes |
30
+ |---|---|---|---|
31
+ | `script` | string | **One of** | Inline Python source code (use `script: \|` block scalar) |
32
+ | `script_path` | string | **One of** | Path to external Python file, **relative to the YAML file's directory** |
33
+
34
+ **Exactly one** of `script` or `script_path` must be set. Setting both is a validation error. Setting neither is a validation error.
35
+
36
+ ### Subprocess contract
37
+
38
+ - Command: `python <script> <context_path>`
39
+ - `cwd`: `project_root`
40
+ - Environment: full parent env (no additional injection)
41
+
42
+ ### `context.json` shape
43
+
44
+ Passed as `sys.argv[1]`. Always this exact shape:
45
+
46
+ ```json
47
+ {
48
+ "check_id": "string",
49
+ "description": "string",
50
+ "project_root": "/abs/path",
51
+ "source_path": "/abs/path/to/check.yaml",
52
+ "output_dir": "/abs/path/to/checks/<safe_check_id_stem>"
53
+ }
54
+ ```
55
+
56
+ `output_dir` is an absolute, durable directory where the deterministic script
57
+ may write evidence. `<safe_check_id_stem>` is a readable label of at most 40
58
+ characters followed by the full SHA-256 of the exact check ID. Use the supplied
59
+ path directly rather than deriving a directory from `check_id`; the same stem
60
+ binds the check's evidence, result, prompt, stdout, and stderr artifacts while
61
+ keeping case-only, normalized-label, and long IDs distinct.
62
+
63
+ ### Result mapping
64
+
65
+ | Outcome | Status | Score |
66
+ |---|---|---|
67
+ | Exit 0 | `passed` | 1 |
68
+ | Exit non-zero (includes `AssertionError`, uncaught exceptions, `sys.exit(1)`) | `failed` | 0 |
69
+ | `FileNotFoundError` on script itself, `OSError` | `error` | 0 |
70
+
71
+ `stdout` and `stderr` are captured on the `CheckResult` and written to
72
+ `<run_output_dir>/checks/<safe_check_id_stem>.stdout.txt` and `.stderr.txt`
73
+ (only if non-empty). The per-check result is
74
+ `<safe_check_id_stem>.json`.
75
+
76
+ ## `harness_judge` check
77
+
78
+ Type-specific fields:
79
+
80
+ | Field | Type | Required | Notes |
81
+ |---|---|---|---|
82
+ | `instructions` | string | **Yes** | Non-empty. The evaluation prompt sent to the harness agent. |
83
+ | `model` | string | No | Override `harness.model` for this check only |
84
+
85
+ ### Prompt shape
86
+
87
+ The runner builds a prompt with:
88
+ 1. A fixed instruction asking for `{"score": 0|1, "reason": "..."}` JSON output
89
+ 2. The `description` as context
90
+ 3. The `instructions` as the evaluation criterion
91
+
92
+ The harness agent can read project files on its own — tell it which files to check in the `instructions` field.
93
+
94
+ The exact prompt is retained as
95
+ `<run_output_dir>/checks/<safe_check_id_stem>.prompt.txt`. It shares its stem
96
+ with the check result and any captured stdout or stderr.
97
+
98
+ ### Required LLM response format
99
+
100
+ ```json
101
+ {"score": 0, "reason": "one sentence explanation"}
102
+ ```
103
+
104
+ - `score` MUST be exactly `0` or `1`. Any other value → `error` result.
105
+ - `reason` is optional but recommended. If present, must be a string.
106
+ - Response must be valid JSON. Prose or malformed JSON → `error` result.
107
+
108
+ ### Result mapping
109
+
110
+ | Outcome | Status | Score |
111
+ |---|---|---|
112
+ | Valid JSON, `score == 1` | `passed` | 1 |
113
+ | Valid JSON, `score == 0` | `failed` | 0 |
114
+ | Malformed JSON or score outside {0,1} | `error` | 0 |
115
+ | Harness subprocess spawn/timeout error | `error` | 0 |
116
+
117
+ ## Validation rules summary
118
+
119
+ The loader raises a `ValueError` naming the file path for any of these:
120
+
121
+ - YAML parse error
122
+ - Top-level YAML is not a dict
123
+ - Any required field missing
124
+ - `id` doesn't match `^[a-zA-Z0-9_-]+$`
125
+ - `description` empty or whitespace-only
126
+ - Unknown top-level field (blocked by `extra="forbid"`)
127
+ - `type` not one of the allowed values
128
+ - `script` AND `script_path` both set, or neither set (deterministic)
129
+ - `instructions` empty (harness_judge)
130
+
131
+ The runner raises `SystemExit` for:
132
+ - Duplicate check IDs across files (shows both file paths)
133
+ - No checks found after discovery + filtering
134
+ - `--check-id` matches multiple files (also shows paths)
135
+
136
+ ## Common validation errors
137
+
138
+ | Error text | Cause | Fix |
139
+ |---|---|---|
140
+ | `Field required [type=missing]` on `schema_version` | Forgot the field | Add `schema_version: 1` |
141
+ | `Extra inputs are not permitted` | Unknown field | Remove or check spelling |
142
+ | `script and script_path are mutually exclusive` | Both set | Remove one |
143
+ | `deterministic check must have script or script_path` | Neither set | Add one |
144
+ | `instructions must be non-empty` | Empty or missing on harness_judge | Add instructions |
145
+ | `id does not match pattern` | Invalid chars (dots, spaces, etc.) | Use only `[a-zA-Z0-9_-]` |
146
+ | `Duplicate check id 'X' found in: ...` | Same id in 2+ files | Rename one |