Skip to content

Post-#1002 structure campaign: collapse single-impl Protocol seams and dict-shaped boundaries #1053

Description

@phernandez

The adversarial review of #1002 produced ~40 design findings that were deliberately deferred from the merge (the review itself rated them non-blocking). The correctness work is done; this tracks the structural cleanup as one campaign so it doesn't dissolve into drive-by refactors.

Categories (per-finding detail in the review artifact / PR threads):

  • Over-abstraction (~16): single-implementation Protocol + Default dataclass + build_default factory towers (accepted-note repositories, read-repair capability lattice ~20 Protocols, note-content reconciler chain, ProjectDeleteRepositories, index-file metadata source tower). ~211 Protocol classes remain; the interim collapse waves removed ~15.
  • Type honesty (~10): object-typed protocol properties re-validated with isinstance/str() at consumers; residual cast(AcceptedNoteMutationChange, ...) sites; int | str | None project ids.
  • Boundary validation (~6): dict[str, object] HTTP payloads hand-serialized where Pydantic models exist (directory-delete response, project-delete acceptance, read-repair response).
  • Control flow (3): six repositories or build_default_...() hidden fallbacks in accepted_note_write_runner; move-eligibility rule duplicated between change_planning and the snapshot; 175-line apply_project_index_move_batch without section headers.
  • Layering (2): repository→indexing and models→runtime upward imports; runtime/indexing/index three-way split with duplicated module basenames.
  • Helper sprawl (2): _session_scope re-implemented in five services with divergent semantics.

Several are interlocking (fixing the object-typed properties shrinks three others; collapsing the repository towers kills much of the Protocol count) — worth sequencing rather than parallelizing.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions