Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
92856c3
📝 Carry the v0.1.6 embedded vector recall draft onto the planning branch
ebigunso Sep 2, 2026
9828e03
📝 v0.1.6 embedded vector recall: decisions ADR-I-0023..0026, phase do…
ebigunso Sep 2, 2026
f225b25
📝 Review fixes: ADR-I-0023 adds a mode and supersedes nothing; schema…
ebigunso Sep 2, 2026
6b0b32d
📝 Remove the untracked orchestrator handoff note that a broad add swe…
ebigunso Sep 2, 2026
f72f527
📝 Review fixes round 2: query normalised once before dot-product scor…
ebigunso Sep 2, 2026
55ade14
📝 Review fixes round 3: not-requested verdict for a zero limit; zero-…
ebigunso Sep 2, 2026
4557d9f
📝 Review fixes round 4: zero-norm rejection owned by the read-contrac…
ebigunso Sep 2, 2026
e7639ef
📝 Evaluation-harness work leaves the library records: plan drops the …
ebigunso Sep 2, 2026
f72fab4
📝 Review fixes round 6: library-only scope and completion clauses; da…
ebigunso Sep 2, 2026
9a29b78
📝 Review fixes round 7: collection-name path-confinement contract; au…
ebigunso Sep 2, 2026
bbde39e
📝 Review fixes round 8: path-confinement and blocking-worker scan in …
ebigunso Sep 2, 2026
cd52fa0
📝 Review fixes round 9: portable lowercase collection-name allowlist …
ebigunso Sep 2, 2026
fdf375c
📝 Technology ruling: the embedded vector store is Qdrant Edge; ADR-I-…
ebigunso Sep 2, 2026
8ecd1e6
📝 Review fixes round 10: empty scope reports the not-requested verdic…
ebigunso Sep 2, 2026
4aeb63a
📝 Review fixes round 11: cross-repository coordination gate for exhau…
ebigunso Sep 2, 2026
9fd1cf3
📝 Review fixes round 12: explicit shard close on a blocking worker; m…
ebigunso Sep 2, 2026
61dd723
📝 Review fixes round 13: empty-scope change named as intended whereve…
ebigunso Sep 2, 2026
ff92faf
📝 Review fixes round 14: verdict enum wire shape recorded (internally…
ebigunso Sep 2, 2026
8c847b7
📝 Review fixes round 15: keyword indexes on object id and object type…
ebigunso Sep 2, 2026
8b45659
📝 Review fixes round 16: dedicated blocking owner holds the shard and…
ebigunso Sep 2, 2026
8e7f3e0
📝 Review fixes round 17: non-blocking drop made safe by write-ahead d…
ebigunso Sep 2, 2026
e838bdd
📝 Review fixes round 18: exhaustive verdict means full scoring and a …
ebigunso Sep 2, 2026
5e7dee8
📝 Review fixes round 19: boundary verdicts describe the index's retur…
ebigunso Sep 2, 2026
6dc7b65
📝 Review fixes round 20: evaluation-facing wording distinguishes exha…
ebigunso Sep 2, 2026
9fac10e
📝 Review fixes round 21: exhaustive verdict requires an unindexed sha…
ebigunso Sep 2, 2026
ee2d48f
📝 Review fixes round 22: the embedded adapter flushes after every wri…
ebigunso Sep 2, 2026
ac81ce1
📝 Review fixes round 23: shard open/load with lock backoff, payload i…
ebigunso Sep 2, 2026
d756c5d
📝 Decide the embedded default in ADR-I-0023, split engine discipline …
ebigunso Sep 3, 2026
12497f7
📝 Review fixes round 24: Task_2 extracts the tie-closure loop into a …
ebigunso Sep 3, 2026
83bd885
📝 Review fixes round 25: plan metadata date, ADR-I-0003 relationship …
ebigunso Sep 3, 2026
df11e00
📝 Make the five v0.1.6 decision records read the same at any time: ch…
ebigunso Sep 3, 2026
22d5a5a
📝 Decision log: the phase merges as one change; waves land against th…
ebigunso Sep 3, 2026
514bea5
📝 Review fixes round 26: canary pins pre-flush non-persistence in the…
ebigunso Sep 3, 2026
013a6d9
📝 Review fixes round 27: zero-norm rules restored to ADR-I-0024 and c…
ebigunso Sep 3, 2026
7b5d9ed
📝 Plan approved for implementation; wave PRs target the planning branch
ebigunso Sep 3, 2026
586374b
📝 Decision records: authoring rules ruled during the v0.1.6 review
ebigunso Sep 3, 2026
677dd74
📝 Rule: PR titles state the outcome, contents go in the body
ebigunso Sep 3, 2026
af5c89f
📝 Rule: wave PRs are registered as a GitHub stack on the planning PR
ebigunso Sep 3, 2026
e1a8a7d
📝 Progress log: wave 1 approved and stacked; wave 2 dispatched
ebigunso Sep 3, 2026
6ac2bef
📝 Lesson: reconcile the companion pin before filing cross-repository …
ebigunso Sep 3, 2026
55dca32
📝 Progress log: wave 2 approved and stacked
ebigunso Sep 3, 2026
c398739
📝 Lesson: PR watchers must not depend on tools absent from the monito…
ebigunso Sep 3, 2026
67aef4e
📝 Merge shape: the whole stack merges in one go at phase end
ebigunso Sep 3, 2026
106b3c0
📝 Lessons: absolute worktree paths; broad suites only after the live …
ebigunso Sep 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions docs/coding-agent/lessons.md
Original file line number Diff line number Diff line change
Expand Up @@ -454,3 +454,69 @@ Prevention:
## Purge note (2026-07-23)

Eleven entries purged per the user-directed low-value/invalid sweep (Codex purge map, agmsg 2026-07-23T12:28Z): ten PURGE-LOW-VALUE (restatements of now-mandatory harness/rule content — plan-format task records, PR monitoring, canonical-byte verification, compatibility policy, module layout, evidenced-scope rulebook default, parallel dispatch — plus two cheaply rediscovered one-off quirks and one unstructured batch-notes bundle) and one PURGE-INVALID (the phase-bounded v0.1 compatibility ruling, superseded by the repo-wide Compatibility Policy). Full entries recoverable from git history at 4997bdc.

## 2026-09-03 — Reconcile The Companion Pin Before Filing Cross-Repository Breakage [tags: review, scope, cross-repo, assumptions]

Context:
- Plan: `docs/coding-agent/plans/active/v0-1-6-embedded-vector-recall-plan.md`
- Task/Wave: Task_3 / Wave 2
- Roles involved: Reviewer | Orchestrator

Symptom:
- The reviewer filed a preliminary HIGH because a new variant in the closed error vocabulary would not compile in the evaluation repository's exhaustive match once that repository re-pins.

Root cause:
- The finding treated the companion repository's current main as if it were already pinned to the change under review, although the companion stays pinned at an older library commit until its own migration plan runs; ADR-I-0023's impact section names that conversion as the companion's re-pin prerequisite.

Fix applied:
- The orchestrator ruled the item out of scope; the reviewer recorded it as the already-tracked re-pin obligation and completed the review on the in-PR acceptance bullets.

Prevention:
- Before filing cross-repository breakage, reconcile the companion's pin and the plan that owns its migration; when the companion intentionally remains pinned until its own migration, record an obligation, not an in-PR defect.

Evidence:
- Reviewer messages of 2026-09-03 (preliminary HIGH, ruling acknowledgement, final REVIEW3_DONE) on Task_3 at 773d65e.

## 2026-09-04 — PR Watchers Must Not Depend On Tools Absent From The Monitor Shell [tags: workflow, monitoring, tooling, orchestrator]

Context:
- Plan: `docs/coding-agent/plans/active/v0-1-6-embedded-vector-recall-plan.md`
- Task/Wave: Wave 1–2 PR monitoring
- Roles involved: Orchestrator

Symptom:
- Copilot reviews on the wave PRs and on the evaluation repository's PR arrived without any watcher notification; the decider noticed the review before the orchestrator did.

Root cause:
- The watcher scripts piped GitHub API output through `jq`, which is not on the PATH of the background monitor shell; every poll failed on stderr, which the monitor does not surface, so the watchers stayed silent while appearing armed.

Fix applied:
- Watchers re-armed using only `gh api --jq` (no external `jq`), one loop covering the whole stack, printing on any change in review count, review-comment count, or merge state.

Prevention:
- A watcher script uses only tools proven available in the monitor shell (`gh --jq`, POSIX sh); before trusting a new watcher, read its output file once to confirm it produced a first sample rather than errors.

Evidence:
- Monitor output file for the PR #77 watcher on 2026-09-04: eighteen consecutive `jq: command not found` lines and no events, while Copilot's "approval recommended" review was already posted.

## 2026-09-04 — Edit Only Through Absolute Worktree Paths, And Run Broad Suites Only After The Live Window Is Granted [tags: workflow, worktrees, live-mutex, worker]

Context:
- Plan: `docs/coding-agent/plans/active/v0-1-6-embedded-vector-recall-plan.md`
- Task/Wave: Task_4 / Wave 3
- Roles involved: Worker | Orchestrator

Symptom:
- A relative-path patch briefly modified files in the shared main checkout instead of the task worktree before being reverted; and a full test suite started before the exclusive service window was confirmed, so service-backed tests could have collided with another agent's run.

Root cause:
- Relative paths resolve against whatever the current directory happens to be, and several checkouts of the same repository share identical relative paths; the live-window protocol grants exclusivity only on the explicit `WINDOW_YOURS` reply, not on sending `LIVE_START`.

Fix applied:
- The stray edits were reverted and verified clean; the suite was re-run inside the granted window.

Prevention:
- Every edit and every git command names an absolute path inside the task worktree, and the current directory is checked before each edit; a suite that may reach a shared service starts only after `WINDOW_YOURS` is observed, otherwise run the service-free command.

Evidence:
- Worker Task_4 report of 2026-09-03 (commit d232830) and the orchestrator's clean `git status` check on the main checkout.
270 changes: 270 additions & 0 deletions docs/coding-agent/plans/active/v0-1-6-embedded-vector-recall-plan.md

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion docs/coding-agent/rules/common.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
rule_schema_version: 2
suite_id: "rules-cm-20260719"
rule_file: "common"
last_updated: "2026-07-24"
last_updated: "2026-09-02"
---

# Common Repository Rules
Expand All @@ -15,6 +15,7 @@ last_updated: "2026-07-24"

- Committed artifacts in this repository must not contain machine-local absolute paths (for example user-profile paths); refer to sibling repositories by name and relative relationship instead.
- When mentioning the `CharacterMemoryEvals` repository in committed docs, describe it as the public companion evaluation repository and state that evaluation tooling is a development aid, not core library functionality. Do not describe it as private or inaccessible (it was made public 2026-07-19); historical records (completed plans, dated ADR bodies) that reflect the earlier private status stay unchanged.
- Records in this repository (plans, decision records, phase documents) state what the evaluation harness's measurements allow this library to decide and when those measurements are used; the harness's own work is planned and tracked in the evaluation repository and is never mixed into library plans (ruled 2026-09-02).
Comment thread
ebigunso marked this conversation as resolved.
- Do not hard-wrap prose in committed documents: never insert line breaks mid-sentence to fit a column width. Write each sentence/paragraph/list item as one line and let editors soft-wrap. Structural line breaks (list items, headings, YAML keys, code) are fine.
- ADR frontmatter `consulted` entries record model names only (for example "Claude Fable 5", "GPT-5.5 Pro") — no role, platform, or product designations such as "(orchestrator)" or "Codex" (user-directed 2026-07-18).

Expand Down
2 changes: 2 additions & 0 deletions docs/coding-agent/rules/orchestrator.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ last_updated: "2026-07-23"
## Repo-Specific Orchestrator Policies

- When creating or updating a PR, follow the format specified in `.github/pull_request_template.md`.
- PR titles state what the change achieves, not a list of its contents; the contents go in the body. Never use bare version numbers or milestone labels as titles.
- When a phase merges as one change, wave PRs target the planning branch and are registered as a GitHub stack on the planning PR with `gh stack link <plan-pr> <wave-pr>...` (bottom to top); later waves are appended with `gh stack link <stack-number> <pr>...`. The stack decides merge order.
Comment thread
ebigunso marked this conversation as resolved.
- Layer-boundary reorganizations must include a `use crate::` dependency-direction audit as required Reviewer evidence per ADR-I-0018 (ports/policy/models never import usecases, and import api only for the ADR's one named exception: the `api::types::retrieval` trace/telemetry vocabulary; errors/domain import no upper layer); file-placement conformance alone does not catch inverted edges hidden behind re-export shims.
- Scope the ADR-I-0018 dependency-direction audit to the diff under review (e.g. `git diff | grep '^+.*use crate::'`) when reviewing incremental changes: pre-existing ports/policy/models imports of domain types via `crate::api::types` are grandfathered debt awaiting a one-time sweep to `crate::domain`, and a blanket grep forces per-line disambiguation between old and newly introduced edges.
- PR feedback monitors must include terminal merged/closed state (harness pr-review-monitoring owns arming for reviews/comments but does not cover terminal-state watch) (user-directed 2026-07-19).
Expand Down
7 changes: 7 additions & 0 deletions docs/decisions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,12 @@ Separate numbering per track; IDs are never reused.
- Partial supersession stays in place: the record remains authoritative for its surviving clauses, with `supersession_scope` and reciprocal frontmatter links recording the split.
- In records predating the current template, a blank warrant means it was not recorded at decision time, not an authoring omission. Fill blank newer frontmatter fields only when the record is substantively revisited.

## Authoring rules
- One decision per record. A choice of component and a choice of how that component is run or made durable are separate decisions with separate records.
- A record encodes a locked-in decision. A deciding factor is deferred only when it is out of reach because of external factors, never when the same change produces the evidence.
- The decision body pins the system's design and, at most, the behaviour of a narrow part of the implementation. Code shapes go in a non-binding appendix, never in the decision.
- Every protected clause is checked against the project philosophy: it stays only if a philosophy goal (continuity, provenance, inspectable recall, correction) is what it protects. Current state is recorded under "Not covered", not as an invariant.
- Records read the same at any time. No wording that hinges on when the record was written ("this phase", "later decision", "at decision time", "once", "already", change verbs such as "gains" or "moves"); history is anchored to named records, versions, and absolute dates, and Implementation Impact describes the resulting state.
Comment thread
ebigunso marked this conversation as resolved.

## Status values
`accepted`, `rejected`, `superseded`, `deprecated`. Records capture decisions, not undecided proposals.
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ warrant:
depends_on: []
implements: []
supersedes: []
superseded_by: null
supersession_scope: null
superseded_by: implementation/ADR-I-0025-vector-record-is-a-read-contract.md
supersession_scope: partial
---

# ADR-I-0001: Use stable cross-store IDs and deterministic graph IRIs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ warrant:
depends_on: []
implements: []
supersedes: []
superseded_by: null
supersession_scope: null
superseded_by: implementation/ADR-I-0025-vector-record-is-a-read-contract.md
supersession_scope: partial
---

# ADR-I-0002: Embed natural-language semantic surfaces, not structured metadata templates
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ warrant:
depends_on: []
implements: []
supersedes: []
superseded_by: null
supersession_scope: null
superseded_by: implementation/ADR-I-0023-embedded-qdrant-edge-vector-candidate-store.md
supersession_scope: partial # the vector-backend default only (embedded Qdrant Edge is the default); backend roles remain authoritative
---

# ADR-I-0003: Use Qdrant and Oxigraph as default storage backends
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ warrant:
depends_on: []
implements: []
supersedes: []
superseded_by: null
supersession_scope: null
superseded_by: implementation/ADR-I-0025-vector-record-is-a-read-contract.md
supersession_scope: partial
---

# ADR-I-0005: Keep Qdrant metadata filterable while graph relationships remain authoritative
Expand Down
Loading