00 — Phase 0.9 feedback investigation synthesis (S232 + S233 findings)
00 — Phase 0.9 feedback investigation synthesis (S232 + S233 findings)
Section titled “00 — Phase 0.9 feedback investigation synthesis (S232 + S233 findings)”Audit date: 12/05/2026 (S233 close-out)
Scope: consolidates the 6 finding docs in this directory (01-*.md through 06-*.md) plus the corresponding S233 patches in 0.9-decision-graph.md and the refresh of 0.9-collapse-candidates.md.
Review status: DIRECTIONAL — PENDING LIAM REVIEW. Every recommendation traces back to one of the 6 findings, none of which has been Liam-ratified yet. This doc surfaces the decisions Liam must make before WP4 (architecture split into 9 sub-docs) can land cleanly.
1. What the 6 findings cover
Section titled “1. What the 6 findings cover”| # | Wave | Trigger (from feedback doc 09-decision-graph-feedback-actions.md) | Headline output |
|---|---|---|---|
| 01 | 1B-1 (S232) | Q1.9 source_documents over-abstraction question + Q2.4 audit trail | Option α (slim-and-keep) or β (drop) for source_documents; content_history kept + extended with op_id; new audit_log for compliance UX; pipeline_runs retain as KH-side rollup |
| 02 | 1B-2 (S232) | Q2.9 + Q3.2 external-folder write-back + Q1.11 citations + Q1.12 matches | Promote Q&A markdown sidecar emit from v1.1 to v1; extend content_citations in-place (rename → citations); new bid_question_matches table |
| 03 | 1B-5 (S232) | Q1.13 workspace types + Q5.5 project_id rename + Q3.11 templates + Q4.5 mempalace wing | Keep Shape B (workspaces table + type discriminator + JSONB + per-type satellites); rename project_id → workspace_id (2 DB cols + 44 code files); rename templates → bid_templates; mempalace wing = 1:1 to workspace_id, no schema change |
| 04 | 1B-3 (S233) | Q3.5 historical template extraction + Q3.10 coverage scope + OQ11 form-question-extraction | SSQ + Charnwood were manually catalogued (no auto-extraction path); coverage is template-only with 3 gap sources, extend to 4; OQ11 resolved to deterministic XLSX/PDF question-text extractors + AI-assisted-cataloguing skill |
| 05 | 1B-4 (S233) | Q3.8 bid response → corpus feedback loop (3 UCs) | UC-A (prior bid import) needs new ingest path; UC-B (in-platform creation) RATIFIED happy path + new promote-to-Q&A UI; UC-C (/outcome/integrate) extend to accept lost bids + promote 6 JSONB fields to new bid_workspaces satellite |
| 06 | 1B-C (S233 sub-agent) | CX.33 source-document explorer | Per-MIME viewer composed from in-stack primitives (Tiptap + mammoth + react-pdf + Tiptap’s existing ContentEditor). Zero new dependencies for v1 |
2. Decisions Liam must provide BEFORE WP4 architecture-split can land cleanly
Section titled “2. Decisions Liam must provide BEFORE WP4 architecture-split can land cleanly”These are the questions that gate the architecture-split work. Each is grouped by the WP4 sub-doc destination that owns the binding. Quick-wins (clean consensus across findings) are not relisted — see §6.
2.1 BLOCKING (cannot start WP4 sub-doc without this)
Section titled “2.1 BLOCKING (cannot start WP4 sub-doc without this)”B1 — Pattern A/B Q&A parser fate is contradictory across findings
Section titled “B1 — Pattern A/B Q&A parser fate is contradictory across findings”The tension:
- Finding 04 §3.5 + decision-graph Q3.5 (S233) say: retire Pattern A/B as a one-shot Phew-content migration helper; post-migration, delete.
- Finding 02 §3.2 round-trip diagram says: the cocoindex Q&A adapter UPSERTs
q_a_extractionskeyed by(workspace_id, source_path, pair_anchor)and triggers UC6 AI-suggest review — i.e. assumes a live recurring Q&A markdown adapter post-cutover.
Neither finding names the recurring runtime adapter that would parse YAML-frontmatter .md Q&A files into q_a_extractions rows. Finding 04 §3.2 lists lib/quality/qa-detection.ts + lib/bid-library-ingest/extract-qa-pairs.ts (the Pattern A/B/C parser) as the existing infrastructure — the same code Finding 04 wants to retire.
Decision needed:
- (a) Pattern A/B is retained as the cocoindex Q&A-markdown adapter (contradicts Finding 04 retirement recommendation); OR
- (b) A new YAML-frontmatter Q&A-markdown parser is specced as net-new work (currently neither finding owns this); OR
- (c) Q&A markdown round-trip is genuinely v1.1 (back to the pre-S233 sidecar deferral position), and the recurring adapter question disappears.
Lands in: WP4 05-qa-flow.md (canonical authoring shape) + 02-data-flow.md (recurring adapter ownership).
B2 — Option α vs β for source_documents
Section titled “B2 — Option α vs β for source_documents”Working recommendation per Finding 01: Option α (slim-and-keep) — retain a thin binary-source manifest, retire versioning columns. Option β = drop entirely; cocoindex source-key + Storage bucket pointer carry binary identity.
Why this is BLOCKING: the choice cascades into:
- Finding 02 q_a_extractions FK shape (
q_a_extractions.source_document_idsurvives under α; under β, q_a_pair carriescocoindex_source_key TEXTinstead). - Finding 04 form-source manifest (XLSX/PDF forms land in
source_documentsunder α; cocoindex-only under β). - Finding 05 UC-A prior-bid binary ingest (same).
- Finding 06 source-doc explorer dispatch (gates on Finding 06 OQ-CX33-E “all extractions from this upload” query).
- Finding 01 itself defers Recommendation 3 (diff UI fate) on α/β choice.
Lands in: WP4 02-data-flow.md (the host doc for the α/β binding).
2.2 IMPORTANT (resolve before WP4 02-data-flow + 04-workspace-types + 05-qa-flow)
Section titled “2.2 IMPORTANT (resolve before WP4 02-data-flow + 04-workspace-types + 05-qa-flow)”I1 — bid_workspaces shape (Shape B satellite vs typed cols on workspaces)
Section titled “I1 — bid_workspaces shape (Shape B satellite vs typed cols on workspaces)”Finding 05 §5.3 proposes Option B (new bid_workspaces satellite table — 6 typed columns) as the Shape B precedent for every future workspace type. Finding 03 §3.2 inventories 5 satellite tables for bids — none of which is bid_workspaces. Finding 03’s Shape B principle says satellites where behaviour fundamentally differs — typed-column promotion of JSONB might or might not qualify.
Decision needed:
- (a) Option A — promote 6 fields to typed columns directly on
workspaces(columns only populated when type=‘bid’); OR - (b) Option B —
bid_workspacessatellite (Finding 05’s recommendation, more Shape B-symmetrical).
The same decision propagates to proposal_workspaces, competitor_workspaces, training_workspaces when those land.
Lands in: WP4 04-workspace-types.md.
I2 — template_requirements rename inventory
Section titled “I2 — template_requirements rename inventory”Finding 04 §7 + decision-graph Q3.11 (S233) claim template_requirements renames to bid_template_requirements alongside templates → bid_templates. Finding 03 §5 Rec only renames templates + template_fields (2 tables) — explicitly does NOT include template_requirements.
Decision needed: rename inventory is 2 tables or 3 tables. Sequencing matters for the combined-PR scope.
Lands in: WP4 04-workspace-types.md (naming inventory) + the migration sequence doc.
I3 — S9 spike status (cocoindex equal-hash idempotency)
Section titled “I3 — S9 spike status (cocoindex equal-hash idempotency)”Finding 02 Recommendation 1 (promote markdown sidecar to v1) gates on S9 spike outcome. Decision-graph §5 PENDING-SPIKE-RESIDUAL claims “(None remain) — every spike-gate (S1/S10/S14/S15/S16 + S2-S6/S11-S13) has resolved” — but S9 is not in either list. Either S9 resolved and Finding 02’s gate is satisfiable today, or S9 is open and the decision-graph §5 claim is incomplete.
Decision needed: clarify S9 status. If resolved, fold result into Finding 02 §3.3 gate clearance. If open, add to spike-residuals + defer Finding 02 Recommendation 1 until S9 lands.
Lands in: WP4 02-data-flow.md (round-trip idempotency pattern) + 05-qa-flow.md (sidecar v1 vs v1.1 binding).
2.3 NEEDED for WP4 (less BLOCKING but each gates one sub-doc)
Section titled “2.3 NEEDED for WP4 (less BLOCKING but each gates one sub-doc)”N1 — Q&A markdown adapter (post-Pattern A/B retire) — same as B1
Section titled “N1 — Q&A markdown adapter (post-Pattern A/B retire) — same as B1”N2 — Cataloguer skill build-now-or-defer
Section titled “N2 — Cataloguer skill build-now-or-defer”Finding 04 Rec 5 proposes a template-cataloguer/SKILL.md plugin skill per template-driven-completeness-spec.md §7.3 (proposed but never built). At stake: whether form-cataloguing capability ships pre-launch or post.
Lands in: WP4 05-qa-flow.md (form handling) + 08-new-features.md (cataloguer as feature).
N3 — Naming-cleanup mini-stream PR scope (combined or sequenced)
Section titled “N3 — Naming-cleanup mini-stream PR scope (combined or sequenced)”Finding 03 Rec 2 + OQ-Q55-A recommend combining: project_id → workspace_id rename + digest → change-reports rename (Q5.1-Q5.4) + OQ12 schema-restructure into one big pre-launch rename PR. Each touches migrations + types + RLS predicates.
Decision needed: combined (high-blast-radius, one PR) or sequenced (lower-risk per PR, more churn).
Lands in: WP4 07-collapse-list.md + WP3 migration sequence.
N4 — Coverage 4th gap source name
Section titled “N4 — Coverage 4th gap source name”Finding 04 §4.3 + Finding 05 Rec 5 both call the 4th source bid_response. The actual feeder table is bid_question_matches (per Finding 04 §4.3 step 3 — recompute trigger fires on bid_question_matches inserts). Granularity mismatch (response-level discriminator label, question-match-level feeder).
Decision needed: rename to bid_question or bid_question_match for clarity.
Lands in: WP4 08-new-features.md (cosmetic but aligns with the 1B-2 schema language).
N5 — Upload-route silent-fail fix (OQ-Q19-D)
Section titled “N5 — Upload-route silent-fail fix (OQ-Q19-D)”app/api/upload/route.ts:444-447 try/catch swallows srcDocErr (“non-fatal — upload continues without lineage tracking”). Either fix to fail-fast or accept the trade-off explicitly. Couples to Option α/β decision (B2) — Option β makes the route moot; Option α requires the fix.
Lands in: WP4 02-data-flow.md.
N6 — pipeline_runs fate (OQ-Q24-A)
Section titled “N6 — pipeline_runs fate (OQ-Q24-A)”Finding 01 Rec 8: retain as KH-side rollup of cocoindex runs (insulates UI from cocoindex schema changes). Alternative: retire in favour of cocoindex ops-DB ledger directly.
Lands in: WP4 02-data-flow.md.
N7 — Op_id propagation pattern (OQ-Q24-C)
Section titled “N7 — Op_id propagation pattern (OQ-Q24-C)”Trigger-driven (clean DB-side) vs app-stamped (simpler but skippable). Finding 01 Rec recommendation: hybrid — trigger-driven where clean, app-stamped where rollback-op cohesion matters.
Lands in: WP4 02-data-flow.md.
N8 — Future citers (OQ-Q111-A)
Section titled “N8 — Future citers (OQ-Q111-A)”Should citations.bid_response_id stay NOT NULL, or be extended with citer_kind to support competitor_research, sales_proposals, training citing q_a_pairs?
Lands in: WP4 05-qa-flow.md.
N9 — Per-match score weighting (OQ-Q112-B)
Section titled “N9 — Per-match score weighting (OQ-Q112-B)”bid_question_matches.score single hybrid value vs separate embedding_score + fulltext_score. Separate columns more flexible for tuning.
Lands in: WP4 05-qa-flow.md.
N10 — Lost-bid promotion default action (OQ-Q38-A)
Section titled “N10 — Lost-bid promotion default action (OQ-Q38-A)”skip (Finding 05 rec) or new_entry with confidence penalty.
Lands in: WP4 08-new-features.md.
N11 — q_a_pair ↔ bid_response provenance retention (OQ-Q38-F)
Section titled “N11 — q_a_pair ↔ bid_response provenance retention (OQ-Q38-F)”When /outcome/integrate promotes a response to q_a_pairs, does q_a_pairs.provenance_source carry the back-pointer {kind: 'bid_response', bid_response_id, bid_workspace_id, integrated_at}?
Lands in: WP4 05-qa-flow.md.
2.4 Operational decisions (not WP4-blocking but Liam must rule)
Section titled “2.4 Operational decisions (not WP4-blocking but Liam must rule)”| OQ | Question | Recommendation | Lands in |
|---|---|---|---|
| OQ-Q310-A | Phase 4 bid-deadline scoring formula | Defer until first live bid workspace; flag as scheduled future work | 08-new-features |
| OQ-Q310-B | Low-match-score auto-gap vs draft-quality-trigger | Gap on low-match (the question is a coverage gap); separately gap on draft-quality | 08-new-features |
| OQ-Q35-A | Intermediate JSON persistence for form-questions extraction | File-only v1 (no new cache table) | 05-qa-flow |
| OQ-Q35-B | Cataloguer skill output shape | Generated scripts/catalogue-<slug>.ts seed-script-and-commit | 05-qa-flow |
| OQ-Q35-C | Form-specific requirement_type='checklist' | No — fold into declaration / evidence | 04-workspace-types |
| OQ-Q38-D | Confidence weighting per prior-bid outcome | Conservative defaults; calibrate post-launch | 05-qa-flow |
| OQ-Q38-E | bid_workspaces column count | 6-column minimum (buyer, deadline, submission_date, outcome, outcome_recorded_at, outcome_recorded_by) | 04-workspace-types |
| OQ-Q38-G | State-machine integration of outcome promotion | No new state; track via bid_response.integrated_at | 08-new-features |
| OQ-CX33-A | Cocoindex re-extract behaviour on edit-back | Gates on WP3 ledger query pattern | 02-data-flow |
| OQ-CX33-B | DOCX write-back canonical (sidecar v1 vs full DOCX v1.1) | Align with Q2.9 sidecar reopen decision | 05-qa-flow |
| OQ-CX33-E | Source_documents Option β fallback query | Gates on B2 (α/β decision) | 02-data-flow |
| OQ-CX33-F | docx-preview add-or-defer trigger | Add only if mammoth+Tiptap loses critical fidelity | 03-tech-stack |
3. Per-investigation summary (one paragraph each)
Section titled “3. Per-investigation summary (one paragraph each)”Finding 01 — source_documents + audit trail (1B-1 S232)
Section titled “Finding 01 — source_documents + audit trail (1B-1 S232)”source_documents table has 0/629 prod fill — platform-not-live + upload-route silent-fail at app/api/upload/route.ts:417-434, NOT over-abstraction. The table is deliberately specced (content-lifecycle-spec.md §5, 20/03/2026) as a binary-source manifest with versioning. Under cocoindex Scenario A, the versioning primitives (version, parent_id, original_filename, source_document_diffs, detect_reupload() RPC) retire because cocoindex source-key history + ops-DB ledger provide stronger provenance. Two viable shapes: Option α (slim-and-keep — recommended) retains a thin manifest; Option β drops entirely. Audit-trail story largely intact today: content_history trigger (1223 prod rows, 5 change_types in use) extends with op_id for rollback per edit-flow §6.0.6; new audit_log table for human-readable compliance UX; pipeline_runs retain as KH-side rollup of cocoindex ledger. Couples to: 1B-2 q_a_extractions FK shape, 1B-5 RLS predicates, content_items 13 AMBIGUOUS columns audit (Q1.2).
Finding 02 — Q&A write-back + citations + matches (1B-2 S232)
Section titled “Finding 02 — Q&A write-back + citations + matches (1B-2 S232)”Reopens the v1.1 deferral of the markdown sidecar on UC5/UC6 (edit-flow §6.5/§6.6). Reasoning: with OQ10 (predetermined-markdown) as v1 INPUT, the natural OUTPUT is the same file — round-trip via UC1 Candidate A. Pipeline reuses UC1 content-hash idempotency; no new infrastructure. Gates: (a) OQ10 markdown shape locked; (b) S9 spike on cocoindex equal-hash confirmed (status unclear — see I3); (c) lifecycle-only columns (confidence, governance_review_status, superseded_by) explicitly classified as not-round-tripped. Q1.11: extend content_citations in place — rename → citations, add q_a_pair_id NULL + source_chunk_id NULL + chunk offsets + CHECK exactly-one-target. Q1.12: new bid_question_matches table replacing bid_questions.matched_content_ids UUID[] inline cache; per-match score, match_method, recompute_run_id, rank.
Finding 03 — Workspace types + project_id rename + templates + mempalace (1B-5 S232)
Section titled “Finding 03 — Workspace types + project_id rename + templates + mempalace (1B-5 S232)”Keep Shape B (current — single workspaces table + type discriminator + domain_metadata JSONB + per-type satellite tables). Universal content via content_items + content_item_workspaces M:N (81 prod rows; content_items has NO direct workspace_id). 4 prod workspaces all type='intelligence' — validates “platform not live” framing. Q5.5: project_id → workspace_id rename is lower-risk than reported (2 DB columns, not 6 tables; 44 code files via grep, not 35; 97 = source-line count); use ts-morph + ast-grep code sweep. Combine with Q5.1-Q5.4 digest-rename and OQ12 schema-restructure as one big pre-launch rename PR. Q3.11: keep templates shape; rename → bid_templates + bid_template_fields (2 tables — see I2 contradiction with Finding 04). Q4.5: no schema change — every mempalace MCP call from KH passes wing: <workspace_id>.
Finding 04 — Historical extraction + coverage (1B-3 S233)
Section titled “Finding 04 — Historical extraction + coverage (1B-3 S233)”SSQ (66 reqs) and Charnwood ITT (30 reqs) were manually catalogued in hardcoded TS arrays (scripts/catalogue-standard-sq.ts from UAT S77; scripts/catalogue-charnwood-itt.ts from UAT S83). No automated PDF/DOCX → template_requirements pipeline exists. Existing extractors (scripts/extract_tender_questions.py, lib/quality/qa-detection.ts) target Q&A pair extraction for the Phew library — different shape, different consumer. Forward path for Shape F forms (XLSX + PDF fixtures already in docs/client-documentation-base/forms/): deterministic question-text extractors (XLSX via exceljs; PDF via pdf-parse/extending scripts/extract_pdf_text.py) feeding an AI-assisted-cataloguing plugin skill per template-driven-completeness-spec.md §7.3. Pattern A/B parser stays as one-shot Phew-content migration helper, retire post-migration (but see B1 contradiction). Coverage is template-only today; 3 gap sources (taxonomy / template / guide); extend with 4th bid_response source (see N4 naming).
Finding 05 — Bid response → corpus feedback loop (1B-4 S233)
Section titled “Finding 05 — Bid response → corpus feedback loop (1B-4 S233)”Three UCs mapped. UC-A (client supplies prior bid responses): no first-class path today — closest is /api/upload landing DOCX as content_items (loses bid-context). New work: q_a_extractions.extractor_kind='prior_bid_response' (post-S16) + 4 typed prior-bid context columns. Small additive change. UC-B (client creates response in-platform): happy path per edit-flow §6.5 UC5; 11-state machine (draft → questions_extracted → matching → drafting → in_review → ready_for_export → submitted → won|lost|withdrawn). Schema-impact = 1B-2 deliverables (citations rename, bid_question_matches new). New promotion-from-draft UI surface implementing UC5 explicitly. UC-C (outcome → corpus): /api/bids/[id]/outcome/integrate exists today, won-bids-only, admin/editor-driven, dedup-checked. Three gaps: lost/withdrawn carry zero learning; writes to content_items not q_a_pairs (post-S16 migration); BidMetadataSchema parks 16 fields in workspaces.domain_metadata JSONB. Schema-impact: extend /outcome/integrate to accept lost+won; add evaluator_score + evaluator_feedback to bid_responses; add outcome_signal to bid_response_history; promote 6-9 outcome JSONB fields to new bid_workspaces satellite (see I1 ambiguity).
Finding 06 — Source-doc explorer (CX.33 1B-C S233 sub-agent)
Section titled “Finding 06 — Source-doc explorer (CX.33 1B-C S233 sub-agent)”Per-MIME viewer composed from in-stack primitives, mounted at new app/documents/[id]/page.tsx. Markdown → existing Tiptap ContentEditor; DOCX → mammoth.convertToHtml → Turndown → Tiptap edit mode; PDF → existing PdfReaderView (read-only); XLSX → CTA to forms UI (defer to Wave 1B-3 form-cataloguing). Zero new dependencies for v1. Secondary fallback (if mammoth+Tiptap loses critical fidelity): add docx-preview (~150-200 KB, Apache 2.0) — not pre-emptive. The explorer’s edit mode IS the UC1/UC4/UC6 in-platform-edit surface from edit-flow §6.1 Candidate A — one surface, two affordances. Open: cocoindex re-extract behaviour on user-initiated edit-back; DOCX write-back canonical (sidecar v1 vs full DOCX regen v1.1) — gates on Finding 02 Q&A sidecar reopen.
4. Contradictions + tensions surface (from independent contradiction-check pass)
Section titled “4. Contradictions + tensions surface (from independent contradiction-check pass)”| # | Severity | What conflicts | Resolution status |
|---|---|---|---|
| C1 | BLOCKING | Pattern A/B parser fate (Finding 04 retires it; Finding 02 implicitly relies on it for recurring Q&A round-trip) | OPEN — Liam to rule (B1 above) |
| C2 | IMPORTANT | template_requirements rename inventory (Finding 04 includes it; Finding 03 does not) | OPEN — Liam to rule (I2 above) |
| C3 | MINOR | Coverage 4th gap source name (label says bid_response; feeder is bid_question_matches) | OPEN — cosmetic (N4 above) |
| C4 | IMPORTANT | Markdown sidecar gates on S9 spike whose status is unclear in decision-graph §5 | OPEN — Liam to clarify (I3 above) |
| C5 | MINOR | bid_workspaces shape (Finding 05 introduces it as Shape B precedent; Finding 03 inventory doesn’t enumerate it) | OPEN — Liam to rule (I1 above) |
| C6 | MINOR | Decision-graph Q1.9 retire seed omits 3 items from Finding 01 Rec 2 (upload-route state paths, backfill script, diff UI components) | OPEN — sync fix |
| # | Coupling | Status |
|---|---|---|
| K1 | Finding 01 Option α/β ↔ Finding 02 q_a_extractions FK shape | TENSE — α/β decision must rule on FK shape simultaneously |
| K2 | Finding 05 bid_workspaces ↔ Finding 03 Shape B inventory | TENSE — see C5 |
| K3 | Finding 04 OQ11 cataloguer skill ↔ Finding 03 Q3.11 form_templates deferral | RESOLVED — Finding 04 closes Finding 03 OQ-Q311-A |
| K4 | Finding 06 explorer edit-mode ↔ Finding 02 Q&A sidecar round-trip | TENSE — different file shapes; no shared write-back contract |
| K5 | Finding 05 lost-bid learning ↔ State machine terminal states | PARTIALLY ADDRESSED — OQ-Q38-G defers |
| K6 | Finding 01 audit_log ↔ Finding 05 evaluator events | TENSE — unspecified whether evaluator events flow into audit_log |
| K7 | Finding 06 PDF read-only ↔ source_documents Option β | TENSE — α ratification is a Finding 06 dependency |
5. Recommended Liam decision sequence
Section titled “5. Recommended Liam decision sequence”Listed in dependency order — items higher in the list unblock items lower:
- B2 (Option α/β for source_documents) — unblocks K1, K7, B1’s “(c)” branch, OQ-CX33-E, multiple OQ-Q19 items.
- I3 (S9 spike status) — unblocks Finding 02 Recommendation 1 (sidecar v1 vs v1.1 binding).
- B1 (Pattern A/B parser ownership) — unblocks C1, the recurring Q&A markdown adapter spec.
- I1 (
bid_workspacesshape — A or B) — unblocks K2, the Shape B precedent for future workspace types. - I2 (template_requirements rename inventory — 2 or 3 tables) — unblocks the combined-PR scoping.
- N3 (combined vs sequenced naming-cleanup PR) — unblocks WP3 migration sequence.
- N2 (cataloguer skill build-now or defer) — unblocks Finding 04 forward path.
- The 20+ operational OQs in §2.3 + §2.4 — these can be ruled in batch alongside or after WP4 sub-docs draft.
6. Quick wins (clean consensus — minimal review burden)
Section titled “6. Quick wins (clean consensus — minimal review burden)”| Item | Why it’s a quick win |
|---|---|
| Q1.13 Shape B confirmation | Finding 03 + 05 + decision-graph patch all agree on Shape B retention. Only bid_workspaces shape (I1) is open. |
| Q4.5 mempalace 1:1 mapping, no schema change | Finding 03 Rec 4 + decision-graph patch align. Only operational wing-filter bug remains. |
| Q1.11 citations rename + extend in place | Finding 02 Rec 3 is structurally uncontested. |
Q1.12 bid_question_matches new table | Finding 02 Rec 4 is structurally uncontested. |
| CX.32 Knowledge Map = Cocoindex (not Graphify) | Already S232 RESOLVED; only surface scope is open. |
| Q3.10 Coverage extend-not-rebuild | Finding 04 Rec 2 + Finding 05 Rec 5 agree; only discriminator name (N4) cosmetic. |
| CX.33 zero-new-deps explorer | Finding 06 §4.1 — every read-side primitive in stack today. |
| Q5.5 project_id → workspace_id rename | Finding 03 Rec 2 is uncontested; only Q5.6 combined-vs-sequenced (N3) is open. |
| OQ11 historical = manual catalogue | Finding 04 §3.1 evidence-locked; forward path is N2. |
source_documents.version, parent_id, original_filename, source_document_diffs, detect_reupload() retirement | Finding 01 Rec 2 explicitly “independent of Option α/β”. |
| Q3.5 Pattern A/B retire policy (clean once B1 lands) | Finding 04 §3.5 — only B1 conditional. |
7. WP4 readiness map (per sub-doc)
Section titled “7. WP4 readiness map (per sub-doc)”For each of the 9 WP4 sub-docs, the open decisions that gate the draft:
| Sub-doc | Open decisions that gate the draft |
|---|---|
| 01-vision-mission | (None blocking) — pulls from Knowledge Hub — Platform Overview.md + Claude Integration Guide.md per Liam S232 note. Add workspace-types-as-applications framing post-I1. |
| 02-data-flow | B2 (α/β), I3 (S9), B1 (Pattern A/B adapter ownership), N5 (upload-route silent-fail), N6 (pipeline_runs fate), N7 (op_id propagation), OQ-CX33-A (cocoindex re-extract). |
| 03-tech-stack | OQ-CX33-F (docx-preview trigger). Otherwise clean — Finding 06 doc is the body. |
| 04-workspace-types | I1 (bid_workspaces shape), I2 (rename inventory), OQ-Q113-A (per-type satellite registry pattern), OQ-Q35-C (form requirement_type), OQ-Q38-E (bid_workspaces column count). |
| 05-qa-flow | I3 (S9), N1=B1 (Q&A adapter ownership), N8 (future citers), N9 (per-match weighting), N11 (q_a_pair provenance), OQ-Q35-A, OQ-Q35-B, OQ-Q38-D, OQ-Q38-F, OQ-CX33-B. |
| 06-mcp-tooling | Q4.5 wing wire-up checklist + MCP-action review pass (§8.3) — gated independently. |
| 07-collapse-list | C6 retire-seed sync, Q3.5 status (gated on B1), I2 (rename inventory in 04-workspace-types). |
| 08-new-features | N4 (coverage 4th source naming), OQ-Q310-A (Phase 4 scoring), OQ-Q310-B (low-match auto-gap), OQ-Q38-A (lost-bid default), OQ-Q38-G (state machine), Knowledge Map surface scope (CX.32 RESOLVED). |
| 09-diagrams | (None blocking) — produces ERDs + ingest flow + Q&A round-trip + write-back flow + bid-feedback 3-UC diagram. Gated on the substrate decisions above for accuracy. |
Bottom line for WP4 readiness: 01-vision-mission, 03-tech-stack, and 09-diagrams are nearly drafable today. 06-mcp-tooling depends on the orthogonal MCP-action review pass (per 0.9-synthesis.md §11.1). The other five (02-data-flow, 04-workspace-types, 05-qa-flow, 07-collapse-list, 08-new-features) all gate on at least one of B1/B2/I1/I2/I3. Resolving those 5 decisions clears the critical path.
8. Outstanding items NOT covered by the 6 findings (carry-forward)
Section titled “8. Outstanding items NOT covered by the 6 findings (carry-forward)”These came through S231 / S232 prompts or earlier sessions but are not in the 6 finding docs:
- §8.3 MCP-action review pass (per
0.9-synthesis.md§11.1) — refine/remove/extend disposition for proposed MCP-tool registrations + revoke-execute migrations. Independent gate from the 6 findings; lands in WP406-mcp-tooling.md. - Knowledge Map surface scope — CX.32 ratified Cocoindex as substrate (S232 RESOLVED), but the user-facing feature shape is undefined. Lands in WP4
08-new-features.md. - Bulk operations / Content CRUD / Soft delete — S231 feedback “NOT COLLAPSING”. Stays as-is; surface is preserved.
- OQ-Q113-B RLS pattern for new tables (audit_log, citations, bid_question_matches, bid_workspaces) — uses
workspace_idfromcontent_item_workspacesJOIN orbid_questions.workspace_iddirectly. Worth a dedicated pattern doc when WP404-workspace-types.mdlands. - Mempalace
mempalace_searchwing-filter bug (CLAUDE.md⚠ PARTIAL) — tracked operationally; not architectural.
9. Recommendation on Liam-review sequence
Section titled “9. Recommendation on Liam-review sequence”For the 6 findings, suggested review order:
- Finding 01 (source_documents + audit) — unblocks the most downstream items via B2.
- Finding 03 (workspace types + renames) — unblocks I1, I2, N3.
- Finding 02 (Q&A write-back) — gates on I3 (S9 status confirmation) which Liam owns.
- Finding 04 (historical extraction + coverage) — gates on B1 (Q&A adapter ownership from review of Finding 02).
- Finding 05 (bid feedback loop) — depends on I1 from Finding 03 review.
- Finding 06 (source-doc explorer) — depends on B2 from Finding 01 review (PDF Option β fallback).
Reviewing in this order resolves the dependency chain. Reviewing in any other order risks repeated re-rulings as later findings clarify earlier dependencies.
End of S232+S233 finding synthesis. Every recommendation traces back to one of the 6 finding docs; nothing in this synthesis introduces new architecture. Liam ratification of the open decisions in §2 + §5 unlocks WP4.