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.
- rememberstack-0.1.0/.agents/skills/eval-banana/SKILL.md +226 -0
- rememberstack-0.1.0/.agents/skills/eval-banana/references/config.md +109 -0
- rememberstack-0.1.0/.agents/skills/eval-banana/references/examples.md +170 -0
- rememberstack-0.1.0/.agents/skills/eval-banana/references/yaml-schema.md +146 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/LICENSE.txt +202 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/SKILL.md +485 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/agents/comparator.md +202 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/agents/grader.md +223 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/references/schemas.md +430 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- rememberstack-0.1.0/.agents/skills/skill-creator/scripts/utils.py +47 -0
- rememberstack-0.1.0/.dockerignore +15 -0
- rememberstack-0.1.0/.env.example +16 -0
- rememberstack-0.1.0/.eval-banana/config.toml +21 -0
- rememberstack-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- rememberstack-0.1.0/.github/compose/upgrade-gate.yaml +7 -0
- rememberstack-0.1.0/.github/workflows/ci.yml +235 -0
- rememberstack-0.1.0/.github/workflows/cla.yml +45 -0
- rememberstack-0.1.0/.github/workflows/docs-deploy.yml +66 -0
- rememberstack-0.1.0/.github/workflows/release.yml +142 -0
- rememberstack-0.1.0/.gitignore +22 -0
- rememberstack-0.1.0/.import_linter_cache/.gitignore +2 -0
- rememberstack-0.1.0/.import_linter_cache/CACHEDIR.TAG +3 -0
- rememberstack-0.1.0/.import_linter_cache/a648b11ef837d8c15b0babaed6ae538cbaea36cf.data.json +1 -0
- rememberstack-0.1.0/.import_linter_cache/rememberstack.meta.json +1 -0
- rememberstack-0.1.0/.importlinter +64 -0
- rememberstack-0.1.0/.loopy_loop/prompting_guides/README.md +27 -0
- rememberstack-0.1.0/.loopy_loop/prompting_guides/anthropic/claude-prompting-best-practices.md +110 -0
- rememberstack-0.1.0/.loopy_loop/prompting_guides/openai/gpt-5.6-prompting-guidance.md +94 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/contract.yaml +51 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/eval_reviewer/config.yaml +12 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/eval_reviewer/prompt.txt +78 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/eval_runner/config.yaml +12 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/eval_runner/prompt.txt +104 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/inner/config.yaml +8 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/inner/prompt.txt +71 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/outer/config.yaml +8 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/inner_outer_eval/workflows/outer/prompt.txt +125 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/contract.yaml +50 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/workflows/dispatcher/config.yaml +8 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/workflows/dispatcher/prompt.txt +96 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/workflows/planner/config.yaml +9 -0
- rememberstack-0.1.0/.loopy_loop/workflow_sets/pm_planner_dispatcher/workflows/planner/prompt.txt +138 -0
- rememberstack-0.1.0/.team-harness/config.toml +8 -0
- rememberstack-0.1.0/CLA.md +197 -0
- rememberstack-0.1.0/CLAUDE.md +85 -0
- rememberstack-0.1.0/CONTRIBUTING.md +55 -0
- rememberstack-0.1.0/Dockerfile +28 -0
- rememberstack-0.1.0/LICENSE +201 -0
- rememberstack-0.1.0/Makefile +33 -0
- rememberstack-0.1.0/PKG-INFO +213 -0
- rememberstack-0.1.0/README.md +171 -0
- rememberstack-0.1.0/RELEASING.md +98 -0
- rememberstack-0.1.0/TRADEMARKS.md +54 -0
- rememberstack-0.1.0/_claude_prompts/appendix.md +5 -0
- rememberstack-0.1.0/alembic.ini +38 -0
- rememberstack-0.1.0/compose.yaml +98 -0
- rememberstack-0.1.0/decisions.md +2630 -0
- rememberstack-0.1.0/implementation_core_values.md +43 -0
- rememberstack-0.1.0/loopy_loop_config.yaml +147 -0
- rememberstack-0.1.0/loopy_loop_goal.txt +114 -0
- rememberstack-0.1.0/loopy_loop_runbook.md +160 -0
- rememberstack-0.1.0/open_questions_from_author.md +118 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/SYNTHESIS.md +462 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/external_agents/codex_decontext_grounding.md +196 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/external_agents/prompt_agy.txt +41 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/external_agents/prompt_codex.txt +48 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/questions/C1_claimify_method_spec.md +395 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/questions/C2_decontextualization_design_space.md +355 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/questions/C3_current_extractor_diagnosis.md +314 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/questions/C4_claim_level_selection.md +170 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/questions/C5_context_provisioning.md +344 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/questions/C6_grounding_without_quotes.md +293 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/questions/C7_comparative_systems.md +207 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/questions/C8_integration_and_codefix.md +534 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/repo_findings/claimify_impls.md +393 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/repo_findings/graphiti_letta.md +231 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/repo_findings/graphrag_lightrag_hipporag.md +307 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/repo_findings/mem0_cognee.md +81 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/verify/completeness.md +413 -0
- rememberstack-0.1.0/plan/analysis/claimify_research/verify/facts.md +176 -0
- rememberstack-0.1.0/plan/analysis/concepts.md +234 -0
- rememberstack-0.1.0/plan/analysis/czech_slice_spike.md +33 -0
- rememberstack-0.1.0/plan/analysis/design_review_2026_07.md +338 -0
- rememberstack-0.1.0/plan/analysis/entity_registry.md +200 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/SYNTHESIS.md +450 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/_workflow.js +93 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/external_agents/codex_arch.err +27 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/external_agents/codex_arch.md +344 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/external_agents/prompt_agy_landscape.txt +27 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/external_agents/prompt_codex_arch.txt +25 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY1_when_where.md +237 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY2_mention_vs_entity.md +232 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY3_typing_cascade.md +306 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY4_retyping_versioning_order.md +319 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/questions/TY5_ambiguity_subtype_dumping.md +285 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/repo_findings/graphiti_cognee.md +226 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/repo_findings/lightrag_graphrag_gliner.md +227 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/verify/completeness.md +250 -0
- rememberstack-0.1.0/plan/analysis/entity_typing_research/verify/facts.md +92 -0
- rememberstack-0.1.0/plan/analysis/evidence_lifecycle/SYNTHESIS.md +152 -0
- rememberstack-0.1.0/plan/analysis/evidence_lifecycle/external_agents/codex.md +891 -0
- rememberstack-0.1.0/plan/analysis/evidence_lifecycle/external_agents/codex_review_pr31.md +42 -0
- rememberstack-0.1.0/plan/analysis/evidence_lifecycle/internal_analysis.md +310 -0
- rememberstack-0.1.0/plan/analysis/evidence_lifecycle/stress_test_amendments.md +169 -0
- rememberstack-0.1.0/plan/analysis/ladybug_capabilities.md +121 -0
- rememberstack-0.1.0/plan/analysis/ladybug_query_semantics.md +180 -0
- rememberstack-0.1.0/plan/analysis/ladybug_translation_research/SYNTHESIS.md +409 -0
- rememberstack-0.1.0/plan/analysis/ladybug_translation_research/external_agents/antigravity.md +260 -0
- rememberstack-0.1.0/plan/analysis/ladybug_translation_research/external_agents/codex.md +443 -0
- rememberstack-0.1.0/plan/analysis/lance_indexing_maintenance.md +190 -0
- rememberstack-0.1.0/plan/analysis/media_handling/BINDING_RECONCILIATION.md +29 -0
- rememberstack-0.1.0/plan/analysis/media_handling/SYNTHESIS.md +139 -0
- rememberstack-0.1.0/plan/analysis/media_handling/external_agents/codex.md +745 -0
- rememberstack-0.1.0/plan/analysis/media_handling/external_agents/codex_binding_review.md +74 -0
- rememberstack-0.1.0/plan/analysis/media_handling/internal_analysis.md +198 -0
- rememberstack-0.1.0/plan/analysis/nonrelational_conflict_research/SYNTHESIS.md +198 -0
- rememberstack-0.1.0/plan/analysis/nonrelational_conflict_research/external_agents/codex.md +729 -0
- rememberstack-0.1.0/plan/analysis/nonrelational_conflict_research/internal_analysis.md +189 -0
- rememberstack-0.1.0/plan/analysis/objections.md +206 -0
- rememberstack-0.1.0/plan/analysis/p2_spike_battery.md +119 -0
- rememberstack-0.1.0/plan/analysis/p3_agent_navigation.md +177 -0
- rememberstack-0.1.0/plan/analysis/registry_research/SYNTHESIS.md +431 -0
- rememberstack-0.1.0/plan/analysis/registry_research/_workflow.js +135 -0
- rememberstack-0.1.0/plan/analysis/registry_research/external_agents/_FAILED_README.md +15 -0
- rememberstack-0.1.0/plan/analysis/registry_research/external_agents/prompt_agy_R5.txt +20 -0
- rememberstack-0.1.0/plan/analysis/registry_research/external_agents/prompt_agy_R8.txt +22 -0
- rememberstack-0.1.0/plan/analysis/registry_research/external_agents/prompt_codex_R2.txt +26 -0
- rememberstack-0.1.0/plan/analysis/registry_research/external_agents/prompt_codex_R6.txt +26 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R10_review_tooling.md +344 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R1_coref_necessity.md +117 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R2_er_cascade_numbers.md +373 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R3_multilingual_inflected.md +324 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R4_external_authorities.md +366 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R5_ontology_core_validation.md +300 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R6_constrained_extraction.md +145 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R7_golden_set_active_learning.md +271 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R8_incremental_clustering.md +314 -0
- rememberstack-0.1.0/plan/analysis/registry_research/questions/R9_scale_math.md +302 -0
- rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/cognee.md +292 -0
- rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/coref.md +181 -0
- rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/graphiti.md +221 -0
- rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/letta_hipporag.md +331 -0
- rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/lightrag_graphrag.md +287 -0
- rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/mem0.md +306 -0
- rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/splink_dedupe.md +286 -0
- rememberstack-0.1.0/plan/analysis/registry_research/repo_findings/zingg.md +283 -0
- rememberstack-0.1.0/plan/analysis/registry_research/verify/completeness.md +233 -0
- rememberstack-0.1.0/plan/analysis/registry_research/verify/coref_clustering.md +96 -0
- rememberstack-0.1.0/plan/analysis/registry_research/verify/external_facts.md +55 -0
- rememberstack-0.1.0/plan/analysis/registry_research/verify/numbers.md +106 -0
- rememberstack-0.1.0/plan/analysis/registry_research/verify/ontology_extraction.md +112 -0
- rememberstack-0.1.0/plan/analysis/retrieval_review/external_agents/codex.md +28 -0
- rememberstack-0.1.0/plan/analysis/retrieval_scenarios.md +359 -0
- rememberstack-0.1.0/plan/analysis/retrieval_spike_battery.md +79 -0
- rememberstack-0.1.0/plan/analysis/reuse_hit_rate_spike.md +66 -0
- rememberstack-0.1.0/plan/analysis/unmerge_supersession_ripple_spike.md +64 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/SYNTHESIS.md +450 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/_workflow.js +95 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/agy_V3_lazy_extraction.md +466 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/codex_V2.err +26 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/codex_V2_gating.md +101 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/prompt_agy_V3.txt +19 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/external_agents/prompt_codex_V2.txt +24 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V1_junk_rate_evidence.md +245 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V2_gating_signals_mechanisms.md +293 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V3_lazy_deferred_extraction.md +360 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V4_how_systems_gate.md +224 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V5_recall_safeguards.md +285 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/questions/V6_pipeline_integration.md +429 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/repo_findings/graphrag_lightrag_hipporag.md +164 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/repo_findings/mem0_cognee.md +166 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/verify/completeness.md +89 -0
- rememberstack-0.1.0/plan/analysis/value_gate_research/verify/facts.md +90 -0
- rememberstack-0.1.0/plan/analysis/workers.md +472 -0
- rememberstack-0.1.0/plan/designs/docs_site_design.md +109 -0
- rememberstack-0.1.0/plan/designs/e0_files_design.md +467 -0
- rememberstack-0.1.0/plan/designs/e1_chunks_design.md +387 -0
- rememberstack-0.1.0/plan/designs/e2_e3_claims_relations_design.md +261 -0
- rememberstack-0.1.0/plan/designs/evidence_lifecycle_design.md +445 -0
- rememberstack-0.1.0/plan/designs/hard_forget_design.md +268 -0
- rememberstack-0.1.0/plan/designs/k_layers_design.md +818 -0
- rememberstack-0.1.0/plan/designs/media_design.md +394 -0
- rememberstack-0.1.0/plan/designs/observations_design.md +354 -0
- rememberstack-0.1.0/plan/designs/orchestration_design.md +237 -0
- rememberstack-0.1.0/plan/designs/overall_design.md +252 -0
- rememberstack-0.1.0/plan/designs/p2_graph_design.md +435 -0
- rememberstack-0.1.0/plan/designs/packaging_distribution_design.md +281 -0
- rememberstack-0.1.0/plan/designs/postgres_schema_design.md +2687 -0
- rememberstack-0.1.0/plan/designs/registries_design.md +780 -0
- rememberstack-0.1.0/plan/designs/retrieval_design.md +509 -0
- rememberstack-0.1.0/plan/implementation_evals/README.md +128 -0
- rememberstack-0.1.0/plan/implementation_evals/codex_review.md +238 -0
- rememberstack-0.1.0/plan/implementation_evals/codex_review_2.md +366 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/boundary_correctness_in_library_d60.yaml +35 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/boundary_extension_points_no_bypass_d60.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/boundary_no_human_control_plane_d60.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/boundary_provider_ports_d61.yaml +36 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/code_architecture_enforced_d62.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/code_config_via_pydantic_settings.yaml +31 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/code_exceptions_never_buried.yaml +46 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/code_tooling_and_migrations.yaml +27 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/delivery_artifacts_and_task_shells_d62.yaml +41 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/delivery_docs_site.yaml +41 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_blockizer_owns_identity.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_content_addressed_reuse.yaml +38 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_converter_router_versioned.yaml +31 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_lineage_version_schema.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_living_mode_retraction.yaml +34 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_origin_stamped_at_ingest.yaml +28 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_postgres_holds_no_bodies.yaml +29 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_raw_immutable_id_addressed.yaml +31 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_structure_contract_unconditional.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e0_subworker_chain_crossrefs_d36.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e1_chunks_whole_blocks_no_overlap.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e1_multigranularity_retrieval.yaml +29 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_asserted_validity_immutable.yaml +34 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_claims_immutable_append_only.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_context_bundle_two_calls.yaml +35 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_grounding_layered_dual_field.yaml +38 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_no_pre_extraction_gate.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_selection_ledger_replay.yaml +31 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_selection_recall_envelope.yaml +31 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_stance_kept_as_observation.yaml +35 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e2_testimony_currency_counting.yaml +41 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_blocking_cheap_first_cascade.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_observations_untyped_adjudicated.yaml +40 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_predicate_registry_governed.yaml +38 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_relations_evidence_collapse.yaml +34 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/e3_supersession_fact_level_bitemporal.yaml +37 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/embedding_model_port_config_d63.yaml +34 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/er_continuous_health_metrics.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/er_merges_reversible.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/er_resolution_cascade_t0_t4.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/er_review_queue_cli.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/eval_golden_sets_d22.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_citations_binding.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_compiled_vs_authored_ownership.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_eval_canaries_faithfulness.yaml +31 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_hard_forget_git_history.yaml +36 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_one_mechanism_n_scopes.yaml +38 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_planner_writer_driver.yaml +38 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_trigger_surface_acyclic.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/k_writer_runtime_two_band.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_converter_routes_bound.yaml +53 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_derivation_disclosure.yaml +54 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_lifecycle_representation_basis.yaml +53 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_p1_media_segments.yaml +48 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/media_source_locators.yaml +56 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_deletion_cascade_grains.yaml +50 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_execution_classes_bound.yaml +39 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_idempotency_dlq.yaml +36 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_metering_budgets_enforced.yaml +31 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_operational_correctness_surfaces.yaml +36 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_orchestration_topology.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_producer_checker_families.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ops_versioned_replay_from_storage.yaml +28 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/p1_lance_estate_rebuildable.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/p2_asof_and_communities.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/p2_no_vectors_in_graph.yaml +29 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/p2_projection_contract_views.yaml +38 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/p2_rebuild_first_snapshots.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/p3_corpus_fs_projection.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/p_projections_hold_no_authority.yaml +32 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/registry_scale_partitioning_d23.yaml +37 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_claims_never_answer_now.yaml +31 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_contradiction_completeness.yaml +28 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_freshness_stamps.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_grain_discipline.yaml +29 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_negative_taxonomy.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_envelope_truncation_markers.yaml +27 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_filesystem_first_mounts_skill.yaml +34 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_hydration_reverifies.yaml +34 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_primitives_recipes_registry.yaml +35 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_skill_s58_acceptance.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/ret_trust_boundary_no_content_auth.yaml +30 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/scope_views_share_graph_d16.yaml +33 -0
- rememberstack-0.1.0/plan/implementation_evals/eval_checks/source_of_truth_split_d1_d46.yaml +30 -0
- rememberstack-0.1.0/plan/plans/.gitkeep +0 -0
- rememberstack-0.1.0/plan/plans/phase-0-foundations.md +148 -0
- rememberstack-0.1.0/plan/plans/phase-1-walking-skeleton.md +31 -0
- rememberstack-0.1.0/plan/plans/phase-2-truth-machinery.md +30 -0
- rememberstack-0.1.0/plan/plans/phase-3-evidence-lifecycle.md +29 -0
- rememberstack-0.1.0/plan/plans/phase-4-projections.md +28 -0
- rememberstack-0.1.0/plan/plans/phase-5-retrieval-complete.md +19 -0
- rememberstack-0.1.0/plan/plans/phase-6-plane-k.md +19 -0
- rememberstack-0.1.0/plan/plans/phase-7-scale-ops.md +192 -0
- rememberstack-0.1.0/plan/plans/phase-8-benchmarks.md +22 -0
- rememberstack-0.1.0/plan/plans/roadmap.md +175 -0
- rememberstack-0.1.0/plan/requirements/requirements_v3.md +244 -0
- rememberstack-0.1.0/pyproject.toml +158 -0
- rememberstack-0.1.0/questions.md +242 -0
- rememberstack-0.1.0/scripts/check_release_contract.py +78 -0
- rememberstack-0.1.0/skills-lock.json +18 -0
- rememberstack-0.1.0/src/rememberstack/__init__.py +9 -0
- rememberstack-0.1.0/src/rememberstack/adapters/__init__.py +42 -0
- rememberstack-0.1.0/src/rememberstack/adapters/codex_writer.py +221 -0
- rememberstack-0.1.0/src/rememberstack/adapters/markitdown_converter.py +42 -0
- rememberstack-0.1.0/src/rememberstack/adapters/openrouter.py +136 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/__init__.py +54 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/forget.py +66 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/git.py +374 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/lance.py +328 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/minio.py +279 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/mounts.py +249 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/object_store.py +130 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/projection.py +80 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/queue.py +137 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/telemetry.py +45 -0
- rememberstack-0.1.0/src/rememberstack/adapters/selfhost/watcher.py +70 -0
- rememberstack-0.1.0/src/rememberstack/adapters/testing/__init__.py +15 -0
- rememberstack-0.1.0/src/rememberstack/adapters/testing/cost_meter.py +13 -0
- rememberstack-0.1.0/src/rememberstack/adapters/testing/model_provider.py +83 -0
- rememberstack-0.1.0/src/rememberstack/adapters/testing/queue.py +43 -0
- rememberstack-0.1.0/src/rememberstack/adapters/testing/telemetry.py +22 -0
- rememberstack-0.1.0/src/rememberstack/client.py +19 -0
- rememberstack-0.1.0/src/rememberstack/core/__init__.py +127 -0
- rememberstack-0.1.0/src/rememberstack/core/blockizer.py +189 -0
- rememberstack-0.1.0/src/rememberstack/core/chunker.py +216 -0
- rememberstack-0.1.0/src/rememberstack/core/consumption_skill.py +275 -0
- rememberstack-0.1.0/src/rememberstack/core/conversion.py +76 -0
- rememberstack-0.1.0/src/rememberstack/core/core_manifest.py +598 -0
- rememberstack-0.1.0/src/rememberstack/core/extension_packs.py +124 -0
- rememberstack-0.1.0/src/rememberstack/core/forget.py +17 -0
- rememberstack-0.1.0/src/rememberstack/core/knowledge_authored.py +276 -0
- rememberstack-0.1.0/src/rememberstack/core/knowledge_compile.py +215 -0
- rememberstack-0.1.0/src/rememberstack/core/knowledge_fact_sheet.py +210 -0
- rememberstack-0.1.0/src/rememberstack/core/knowledge_hashing.py +68 -0
- rememberstack-0.1.0/src/rememberstack/core/knowledge_planner.py +64 -0
- rememberstack-0.1.0/src/rememberstack/core/knowledge_writer.py +175 -0
- rememberstack-0.1.0/src/rememberstack/core/ranking.py +200 -0
- rememberstack-0.1.0/src/rememberstack/core/recipe_linter.py +149 -0
- rememberstack-0.1.0/src/rememberstack/core/section_snap.py +209 -0
- rememberstack-0.1.0/src/rememberstack/core/storage_routing.py +27 -0
- rememberstack-0.1.0/src/rememberstack/eval/__init__.py +53 -0
- rememberstack-0.1.0/src/rememberstack/eval/consumption.py +141 -0
- rememberstack-0.1.0/src/rememberstack/eval/contradiction.py +184 -0
- rememberstack-0.1.0/src/rememberstack/eval/harness.py +136 -0
- rememberstack-0.1.0/src/rememberstack/eval/lifecycle.py +400 -0
- rememberstack-0.1.0/src/rememberstack/eval/operational_scale.py +49 -0
- rememberstack-0.1.0/src/rememberstack/eval/resolution.py +255 -0
- rememberstack-0.1.0/src/rememberstack/eval/retrieval_spikes.py +50 -0
- rememberstack-0.1.0/src/rememberstack/eval/skeleton.py +231 -0
- rememberstack-0.1.0/src/rememberstack/llm/__init__.py +1 -0
- rememberstack-0.1.0/src/rememberstack/model/__init__.py +589 -0
- rememberstack-0.1.0/src/rememberstack/model/adjudication.py +100 -0
- rememberstack-0.1.0/src/rememberstack/model/auth.py +27 -0
- rememberstack-0.1.0/src/rememberstack/model/blocks.py +30 -0
- rememberstack-0.1.0/src/rememberstack/model/chunks.py +190 -0
- rememberstack-0.1.0/src/rememberstack/model/claims.py +162 -0
- rememberstack-0.1.0/src/rememberstack/model/client.py +98 -0
- rememberstack-0.1.0/src/rememberstack/model/clustering.py +54 -0
- rememberstack-0.1.0/src/rememberstack/model/component_version.py +124 -0
- rememberstack-0.1.0/src/rememberstack/model/consumption.py +88 -0
- rememberstack-0.1.0/src/rememberstack/model/conversion.py +31 -0
- rememberstack-0.1.0/src/rememberstack/model/deployment.py +53 -0
- rememberstack-0.1.0/src/rememberstack/model/documents.py +168 -0
- rememberstack-0.1.0/src/rememberstack/model/envelope.py +513 -0
- rememberstack-0.1.0/src/rememberstack/model/evaluation.py +72 -0
- rememberstack-0.1.0/src/rememberstack/model/forget.py +143 -0
- rememberstack-0.1.0/src/rememberstack/model/git.py +13 -0
- rememberstack-0.1.0/src/rememberstack/model/knowledge.py +840 -0
- rememberstack-0.1.0/src/rememberstack/model/knowledge_authored.py +325 -0
- rememberstack-0.1.0/src/rememberstack/model/knowledge_planner.py +431 -0
- rememberstack-0.1.0/src/rememberstack/model/lifecycle.py +42 -0
- rememberstack-0.1.0/src/rememberstack/model/model_provider.py +78 -0
- rememberstack-0.1.0/src/rememberstack/model/mounts.py +24 -0
- rememberstack-0.1.0/src/rememberstack/model/object_store.py +21 -0
- rememberstack-0.1.0/src/rememberstack/model/operational_scale.py +59 -0
- rememberstack-0.1.0/src/rememberstack/model/operations.py +153 -0
- rememberstack-0.1.0/src/rememberstack/model/processing.py +228 -0
- rememberstack-0.1.0/src/rememberstack/model/queue.py +73 -0
- rememberstack-0.1.0/src/rememberstack/model/recipes.py +83 -0
- rememberstack-0.1.0/src/rememberstack/model/relations.py +79 -0
- rememberstack-0.1.0/src/rememberstack/model/resolution.py +83 -0
- rememberstack-0.1.0/src/rememberstack/model/retrieval_spikes.py +62 -0
- rememberstack-0.1.0/src/rememberstack/model/sections.py +120 -0
- rememberstack-0.1.0/src/rememberstack/model/telemetry.py +30 -0
- rememberstack-0.1.0/src/rememberstack/ports/__init__.py +29 -0
- rememberstack-0.1.0/src/rememberstack/ports/auth.py +16 -0
- rememberstack-0.1.0/src/rememberstack/ports/connector.py +23 -0
- rememberstack-0.1.0/src/rememberstack/ports/cost_meter.py +17 -0
- rememberstack-0.1.0/src/rememberstack/ports/forget.py +20 -0
- rememberstack-0.1.0/src/rememberstack/ports/git.py +20 -0
- rememberstack-0.1.0/src/rememberstack/ports/model_provider.py +28 -0
- rememberstack-0.1.0/src/rememberstack/ports/mounts.py +16 -0
- rememberstack-0.1.0/src/rememberstack/ports/object_store.py +27 -0
- rememberstack-0.1.0/src/rememberstack/ports/p1_index.py +92 -0
- rememberstack-0.1.0/src/rememberstack/ports/purge.py +93 -0
- rememberstack-0.1.0/src/rememberstack/ports/queue.py +23 -0
- rememberstack-0.1.0/src/rememberstack/ports/telemetry.py +21 -0
- rememberstack-0.1.0/src/rememberstack/profiles/__init__.py +22 -0
- rememberstack-0.1.0/src/rememberstack/profiles/selfhost.py +324 -0
- rememberstack-0.1.0/src/rememberstack/profiles/selfhost_forget.py +158 -0
- rememberstack-0.1.0/src/rememberstack/profiles/selfhost_operations.py +95 -0
- rememberstack-0.1.0/src/rememberstack/py.typed +1 -0
- rememberstack-0.1.0/src/rememberstack/spine/__init__.py +93 -0
- rememberstack-0.1.0/src/rememberstack/spine/admission.py +26 -0
- rememberstack-0.1.0/src/rememberstack/spine/backfill.py +168 -0
- rememberstack-0.1.0/src/rememberstack/spine/catalog_contract.py +742 -0
- rememberstack-0.1.0/src/rememberstack/spine/chunk_catalog.py +237 -0
- rememberstack-0.1.0/src/rememberstack/spine/claim_catalog.py +298 -0
- rememberstack-0.1.0/src/rememberstack/spine/clustering.py +740 -0
- rememberstack-0.1.0/src/rememberstack/spine/component_versions.py +208 -0
- rememberstack-0.1.0/src/rememberstack/spine/consumption.py +81 -0
- rememberstack-0.1.0/src/rememberstack/spine/deployment_bootstrap.py +445 -0
- rememberstack-0.1.0/src/rememberstack/spine/document_catalog.py +621 -0
- rememberstack-0.1.0/src/rememberstack/spine/entity_registry.py +205 -0
- rememberstack-0.1.0/src/rememberstack/spine/extension_packs.py +220 -0
- rememberstack-0.1.0/src/rememberstack/spine/fact_catalog.py +571 -0
- rememberstack-0.1.0/src/rememberstack/spine/forget.py +1753 -0
- rememberstack-0.1.0/src/rememberstack/spine/knowledge.py +5467 -0
- rememberstack-0.1.0/src/rememberstack/spine/lifecycle.py +1071 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/__init__.py +1 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/_helpers.py +153 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/env.py +58 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/script.py.mako +27 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/__init__.py +1 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0001_extensions_enums.py +189 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0002_infrastructure_registries.py +321 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0003_entities_evaluation_e0_e1.py +631 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0004_claims_facts_evidence.py +411 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0005_projection_knowledge_retrieval.py +391 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p0_02_0006_partitions_views.py +158 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p2_06_0007_invalidated_outcome.py +26 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p3_01_0008_document_version_target.py +58 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p3_05_0009_reconcile_stage.py +27 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p3_07_0010_lifecycle_eval_suite.py +25 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p4_01_0011_survivor_view_rewrite.py +57 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p6_02_0012_knowledge_compile_recovery.py +58 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p6_04_0013_knowledge_writer_ledger.py +46 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p6_05_0014_knowledge_planner_runtime.py +217 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p6_06_0015_authored_dispatch_runtime.py +38 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p7_02_0016_operational_eval_suite.py +19 -0
- rememberstack-0.1.0/src/rememberstack/spine/migrations/versions/p7_05_0017_hard_forget.py +55 -0
- rememberstack-0.1.0/src/rememberstack/spine/observation_adjudication.py +778 -0
- rememberstack-0.1.0/src/rememberstack/spine/operations.py +298 -0
- rememberstack-0.1.0/src/rememberstack/spine/projection.py +662 -0
- rememberstack-0.1.0/src/rememberstack/spine/recipes.py +276 -0
- rememberstack-0.1.0/src/rememberstack/spine/resolver.py +763 -0
- rememberstack-0.1.0/src/rememberstack/spine/review.py +650 -0
- rememberstack-0.1.0/src/rememberstack/spine/settings.py +22 -0
- rememberstack-0.1.0/src/rememberstack/spine/supersession.py +510 -0
- rememberstack-0.1.0/src/rememberstack/spine/sync.py +128 -0
- rememberstack-0.1.0/src/rememberstack/spine/work_ledger.py +816 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/__init__.py +110 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/cli.py +447 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/consumption_skill.py +87 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/graph_queries.py +698 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/http_api.py +377 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/mcp.py +67 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/query_engine.py +1591 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/recipe_executor.py +185 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/recipe_surface.py +219 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/remote_mcp.py +133 -0
- rememberstack-0.1.0/src/rememberstack/surfaces/sdk.py +324 -0
- rememberstack-0.1.0/src/rememberstack/workers/__init__.py +155 -0
- rememberstack-0.1.0/src/rememberstack/workers/base.py +312 -0
- rememberstack-0.1.0/src/rememberstack/workers/e0.py +577 -0
- rememberstack-0.1.0/src/rememberstack/workers/e1.py +425 -0
- rememberstack-0.1.0/src/rememberstack/workers/e2.py +525 -0
- rememberstack-0.1.0/src/rememberstack/workers/e3.py +434 -0
- rememberstack-0.1.0/src/rememberstack/workers/forget.py +299 -0
- rememberstack-0.1.0/src/rememberstack/workers/knowledge_authored.py +146 -0
- rememberstack-0.1.0/src/rememberstack/workers/knowledge_driver.py +735 -0
- rememberstack-0.1.0/src/rememberstack/workers/knowledge_fact_sheet.py +123 -0
- rememberstack-0.1.0/src/rememberstack/workers/knowledge_planner.py +325 -0
- rememberstack-0.1.0/src/rememberstack/workers/knowledge_writer.py +393 -0
- rememberstack-0.1.0/src/rememberstack/workers/operations.py +42 -0
- rememberstack-0.1.0/src/rememberstack/workers/p1.py +234 -0
- rememberstack-0.1.0/src/rememberstack/workers/p2.py +513 -0
- rememberstack-0.1.0/src/rememberstack/workers/p2_analytics.py +276 -0
- rememberstack-0.1.0/src/rememberstack/workers/p3.py +673 -0
- rememberstack-0.1.0/src/rememberstack/workers/reconcile.py +485 -0
- rememberstack-0.1.0/src/rememberstack/workers/sync.py +168 -0
- rememberstack-0.1.0/src/tests/adapters/test_codex_writer.py +150 -0
- rememberstack-0.1.0/src/tests/adapters/test_minio_store.py +159 -0
- rememberstack-0.1.0/src/tests/adapters/test_mount_provisioning.py +258 -0
- rememberstack-0.1.0/src/tests/adapters/test_openrouter.py +42 -0
- rememberstack-0.1.0/src/tests/adapters/test_selfhost_forget.py +92 -0
- rememberstack-0.1.0/src/tests/adapters/test_selfhost_git.py +204 -0
- rememberstack-0.1.0/src/tests/adapters/test_selfhost_purge.py +233 -0
- rememberstack-0.1.0/src/tests/adapters/test_selfhost_queue.py +237 -0
- rememberstack-0.1.0/src/tests/adapters/test_selfhost_stores.py +56 -0
- rememberstack-0.1.0/src/tests/adapters/test_telemetry.py +48 -0
- rememberstack-0.1.0/src/tests/blockizer_corpus/expected_hashes.json +51 -0
- rememberstack-0.1.0/src/tests/blockizer_corpus/seed_mixed.md +24 -0
- rememberstack-0.1.0/src/tests/core/test_blockizer_corpus.py +79 -0
- rememberstack-0.1.0/src/tests/core/test_chunker.py +234 -0
- rememberstack-0.1.0/src/tests/core/test_consumption_skill.py +135 -0
- rememberstack-0.1.0/src/tests/core/test_conversion.py +39 -0
- rememberstack-0.1.0/src/tests/core/test_core_manifest.py +65 -0
- rememberstack-0.1.0/src/tests/core/test_forget_identity.py +29 -0
- rememberstack-0.1.0/src/tests/core/test_knowledge_authored.py +91 -0
- rememberstack-0.1.0/src/tests/core/test_knowledge_compile.py +247 -0
- rememberstack-0.1.0/src/tests/core/test_knowledge_fact_sheet.py +192 -0
- rememberstack-0.1.0/src/tests/core/test_knowledge_hashing.py +241 -0
- rememberstack-0.1.0/src/tests/core/test_knowledge_planner.py +162 -0
- rememberstack-0.1.0/src/tests/core/test_knowledge_writer.py +199 -0
- rememberstack-0.1.0/src/tests/core/test_section_snap.py +286 -0
- rememberstack-0.1.0/src/tests/eval/test_harness_skeleton.py +156 -0
- rememberstack-0.1.0/src/tests/eval/test_s55_hard_forget.py +271 -0
- rememberstack-0.1.0/src/tests/eval/test_s55_selfhost_restore.py +396 -0
- rememberstack-0.1.0/src/tests/eval/test_s58_consumption.py +297 -0
- rememberstack-0.1.0/src/tests/model/test_component_version.py +189 -0
- rememberstack-0.1.0/src/tests/model/test_deployment.py +100 -0
- rememberstack-0.1.0/src/tests/model/test_forget.py +118 -0
- rememberstack-0.1.0/src/tests/packaging/test_client_wheel.py +198 -0
- rememberstack-0.1.0/src/tests/packaging/test_release_contract.py +59 -0
- rememberstack-0.1.0/src/tests/spikes/test_operational_scale.py +675 -0
- rememberstack-0.1.0/src/tests/spikes/test_p2_engine_spikes.py +834 -0
- rememberstack-0.1.0/src/tests/spikes/test_retrieval_spikes.py +885 -0
- rememberstack-0.1.0/src/tests/spine/test_backfill.py +253 -0
- rememberstack-0.1.0/src/tests/spine/test_catalog_lanes.py +19 -0
- rememberstack-0.1.0/src/tests/spine/test_clustering.py +371 -0
- rememberstack-0.1.0/src/tests/spine/test_component_versions.py +476 -0
- rememberstack-0.1.0/src/tests/spine/test_deployment_bootstrap.py +600 -0
- rememberstack-0.1.0/src/tests/spine/test_forget_catalog.py +1103 -0
- rememberstack-0.1.0/src/tests/spine/test_governance.py +287 -0
- rememberstack-0.1.0/src/tests/spine/test_knowledge_commit_driver.py +876 -0
- rememberstack-0.1.0/src/tests/spine/test_knowledge_control_plane.py +2634 -0
- rememberstack-0.1.0/src/tests/spine/test_migrations.py +266 -0
- rememberstack-0.1.0/src/tests/spine/test_observation_adjudication.py +546 -0
- rememberstack-0.1.0/src/tests/spine/test_operations.py +510 -0
- rememberstack-0.1.0/src/tests/spine/test_resolver.py +367 -0
- rememberstack-0.1.0/src/tests/spine/test_review_queue.py +468 -0
- rememberstack-0.1.0/src/tests/spine/test_supersession.py +414 -0
- rememberstack-0.1.0/src/tests/spine/test_unmerge_ripple.py +340 -0
- rememberstack-0.1.0/src/tests/spine/test_work_ledger.py +680 -0
- rememberstack-0.1.0/src/tests/surfaces/test_client_sdk.py +419 -0
- rememberstack-0.1.0/src/tests/surfaces/test_envelope_contract.py +482 -0
- rememberstack-0.1.0/src/tests/surfaces/test_forget_admission.py +40 -0
- rememberstack-0.1.0/src/tests/surfaces/test_graph_queries.py +534 -0
- rememberstack-0.1.0/src/tests/surfaces/test_ops_cli.py +100 -0
- rememberstack-0.1.0/src/tests/surfaces/test_recipe_registry.py +465 -0
- rememberstack-0.1.0/src/tests/surfaces/test_retrieval_api.py +786 -0
- rememberstack-0.1.0/src/tests/surfaces/test_retrieval_primitives.py +990 -0
- rememberstack-0.1.0/src/tests/surfaces/test_surfaces_parity.py +430 -0
- rememberstack-0.1.0/src/tests/test_forget_port_contract.py +140 -0
- rememberstack-0.1.0/src/tests/test_port_inventory_and_conformance.py +319 -0
- rememberstack-0.1.0/src/tests/test_port_model_values.py +88 -0
- rememberstack-0.1.0/src/tests/test_queue_port_contract.py +165 -0
- rememberstack-0.1.0/src/tests/test_smoke.py +14 -0
- rememberstack-0.1.0/src/tests/workers/test_e0_chain.py +666 -0
- rememberstack-0.1.0/src/tests/workers/test_e1_chain.py +366 -0
- rememberstack-0.1.0/src/tests/workers/test_e2_chain.py +458 -0
- rememberstack-0.1.0/src/tests/workers/test_e3_chain.py +638 -0
- rememberstack-0.1.0/src/tests/workers/test_hard_forget_handler.py +371 -0
- rememberstack-0.1.0/src/tests/workers/test_hard_forget_service.py +249 -0
- rememberstack-0.1.0/src/tests/workers/test_ingest_admission.py +75 -0
- rememberstack-0.1.0/src/tests/workers/test_lifecycle_reconciliation.py +1005 -0
- rememberstack-0.1.0/src/tests/workers/test_p2_analytics.py +405 -0
- rememberstack-0.1.0/src/tests/workers/test_p2_rebuild.py +427 -0
- rememberstack-0.1.0/src/tests/workers/test_p3_corpusfs.py +444 -0
- rememberstack-0.1.0/src/tests/workers/test_reuse_lifecycle.py +431 -0
- rememberstack-0.1.0/src/tests/workers/test_watch_loop.py +492 -0
- rememberstack-0.1.0/uv.lock +1459 -0
- rememberstack-0.1.0/website/.gitignore +25 -0
- rememberstack-0.1.0/website/README.md +114 -0
- rememberstack-0.1.0/website/mdx-components.tsx +36 -0
- rememberstack-0.1.0/website/next.config.ts +26 -0
- rememberstack-0.1.0/website/package-lock.json +4779 -0
- rememberstack-0.1.0/website/package.json +41 -0
- rememberstack-0.1.0/website/postcss.config.mjs +8 -0
- rememberstack-0.1.0/website/public/.nojekyll +0 -0
- rememberstack-0.1.0/website/public/CNAME +1 -0
- rememberstack-0.1.0/website/src/app/docs/architecture/page.mdx +57 -0
- rememberstack-0.1.0/website/src/app/docs/concepts/page.mdx +50 -0
- rememberstack-0.1.0/website/src/app/docs/deployment/page.mdx +94 -0
- rememberstack-0.1.0/website/src/app/docs/layout.tsx +46 -0
- rememberstack-0.1.0/website/src/app/docs/mounts/page.mdx +109 -0
- rememberstack-0.1.0/website/src/app/docs/page.mdx +43 -0
- rememberstack-0.1.0/website/src/app/docs/project-status/page.mdx +50 -0
- rememberstack-0.1.0/website/src/app/docs/reference/api/page.mdx +178 -0
- rememberstack-0.1.0/website/src/app/docs/reference/cli/page.mdx +216 -0
- rememberstack-0.1.0/website/src/app/docs/reference/mcp/page.mdx +78 -0
- rememberstack-0.1.0/website/src/app/globals.css +166 -0
- rememberstack-0.1.0/website/src/app/layout.tsx +46 -0
- rememberstack-0.1.0/website/src/app/page.tsx +52 -0
- rememberstack-0.1.0/website/src/components/docs/DocsPageNavigation.tsx +42 -0
- rememberstack-0.1.0/website/src/components/docs/DocsSidebar.tsx +62 -0
- rememberstack-0.1.0/website/src/components/docs/DocsTableOfContents.tsx +81 -0
- rememberstack-0.1.0/website/src/components/docs/MobileDocsSidebar.tsx +54 -0
- rememberstack-0.1.0/website/src/components/search/SearchCommand.tsx +181 -0
- rememberstack-0.1.0/website/src/components/site/SiteHeader.tsx +38 -0
- rememberstack-0.1.0/website/src/lib/docs/navigation.ts +61 -0
- rememberstack-0.1.0/website/src/lib/search/pagefind.ts +86 -0
- rememberstack-0.1.0/website/src/lib/utils.ts +7 -0
- 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 |
|