ADR-0022: Weaving-pass workflow
Status: Accepted Date: 2026-05-22
Context
ADR-0021 established the foundation-pass with three append-only parking files (_meta/parking/{threads,questions,web-search}.md) as the index the weaving pass would later consume. Foundation-pass for DP is now complete through Ch 2-7 — Part II close — yielding ~94 thread candidates, ~50 question candidates, and ~50 web-search items, all DP-sourced.
ADR-0021 names “weaving pass” as the consumer but does not specify its shape. Open questions: how to batch (per chapter? per cluster?), how to verify counter-arg citations (autonomous? user-mediated?), when to promote parked questions, what to do with the 7 threads already drafted during foundation pass, and how to honor the CONTEXT.md quality gate that no thread ships without a real cited counter-argument.
The weaving workflow is novel enough — and hard enough to reverse once threads land in /threads/ with attached questions — that it warrants explicit documentation before any cluster work begins.
Decision
A two-stage workflow opted into per cluster, governed by a one-time meta-batch that produces the cluster map.
Scope and batching
- Scope: weaving runs over one closed corpus at a time. First scope: DP (Part I + Part II, complete). CSG and WS atomics may enrich DP threads as supporting evidence but are not primary triggers in this pass.
- Batching: cross-cutting clusters, not chapter-by-chapter. Threads are inherently cross-chapter (christology pulls from 1-4 + 1-5 + 1-7 + 2-3b); chapter batching forces synthesis within a chapter’s atomics only and recreates foundation-pass shape.
Stage 0 — Meta-batch (one-time per corpus)
Produces the cluster map.
Inputs: _meta/parking/{threads,questions,web-search}.md, existing threads/*.md, CONTEXT.md.
Output: staging/weave-0-cluster-map/
REVIEW.md— proposed cluster list, each entry: cluster slug + one-line claim + rationale + parked candidates pulled in (threads / questions / web-search) + existing-thread relationship (anchor / sub-claim / supersedes / orthogonal) + shape-representativeness flag (small / typical / large) + proposed sequence positioncluster-map.md— the durable artifact
User review: approve, merge, split, reject clusters; set sequence.
Finalize: copy REVIEW to _meta/batch-reviews/weave-0-cluster-map.md; move cluster-map.md to _meta/cluster-map.md; delete staging; commit.
Stage 1 — Research batch (per cluster)
Verifies counter-argument citations. Mechanical: find quote, cite, mark provenance.
Input: cluster’s web-search items from _meta/cluster-map.md.
Output: staging/weave-{cluster-slug}-research/
REVIEW.md— citation provenance summary + flagged itemsresearch-notes.md— per critic/work, sourced quotes with citations
Each citation gets one of four markers:
[verified]— quote from accessible source, page/section noted[flagged-paywall]— book exists, AI couldn’t access full text, user-supply needed[flagged-unverifiable]— work might be misnamed/misattributed, user to confirm[secondary]— only encyclopedia-summary available, marked as not load-bearing
Hard rule: no fabricated page numbers or invented quotes. Flag and stop.
Hybrid execution per source type: AI runs WebSearch / WebFetch autonomously for patristic and canonical sources (Augustine, Aquinas, Calvin, Anselm — well-indexed at CCEL, New Advent, archive.org). For modern academic books (Wright 2003, Hart 2019, Levenson 1993), AI fetches but [flagged-paywall] when access is blocked.
Finalize: copy REVIEW to _meta/batch-reviews/weave-{cluster-slug}-research.md; move research-notes.md to _meta/research/{cluster-slug}.md; mark verified entries in _meta/parking/web-search.md as [verified — see _meta/research/{cluster-slug}.md]; delete staging; commit.
Stage 2 — Weaving batch (per cluster)
Synthesizes threads from atomics + research notes. Judgment-heavy.
Input: cluster atomics (existing in /reference/, /experience/), _meta/research/{cluster-slug}.md, parked questions for the cluster, existing /threads/ notes in the cluster.
Output: staging/weave-{cluster-slug}-threads/
REVIEW.md— Variant-1 Thorough shape per ADR-0009:- For each new thread: claim, atomics used, counter-arg with citation, response (real or “[still wrestling — specific point]”)
- For each existing thread in scope: keep-as-is / upgrade / subsume / split decision with rationale
- Proposed question promotions with backlink to engaging thread
- Parking-entry updates (mark
[woven into thread-X]or[promoted as q-X])
- Proposed thread files:
thread-{slug}.mdeach (Claim / Reasoning / Counter-argument / Response, per ADR-0006) - Proposed question files:
q-{slug}.mdeach (per ADR-0014 question-note schema)
Quality gate (hard): every new thread ships with ≥1 counter-argument citing a named critic. “Still wrestling” responses are allowed and encouraged when honest; placeholder counter-arguments fail the batch.
Quality gate — load-bearing vs supplementary refinement (per cluster-1 shakedown, 2026-05-22):
- Each thread has exactly one load-bearing counter-argument (the one the
## Responsesection directly engages). Per CONTEXT.md L82-83 “prefer one counter; multiple allowed only if all are independently strong” — multi-counter threads must mark which is load-bearing. - Load-bearing counter-arg must be
[verified]— accessible primary source + quote/page reference. This is the hard gate. - Supplementary counter-args may be
[secondary](citation pipeline marker) — fine to ship if the load-bearing one is verified. - If a load-bearing counter-arg is
[flagged-paywall]or[flagged-unverifiable]after stage 1, the thread may ship in stage 2 with the CONTEXT.md L82-83 “source not located — provisional” disclaimer in the## Counter-argumentsection, AND the stage 2 REVIEW.md surfaces the thread on a backlog list for user upgrade. This avoids stage-1↔stage-2 ping-pong while preserving the audit trail. - The “still wrestling” mark in
## Responseis for response uncertainty, not citation uncertainty — do not conflate.
Finalize: standard ADR-0009 finalize — REVIEW to _meta/batch-reviews/, threads to /threads/, promoted questions to /questions/, parking entries updated, staging deleted, commit.
Sequencing
After meta-batch produces the cluster map:
- Smallest cluster — workflow shakedown (cheap rollback)
- Best-verifiable cluster — citation-pipeline shakedown (mostly patristic / canonical sources)
- Load-bearing clusters — christology / chronology / eschatology / Korea-SA, once workflow + pipeline are trusted
- Remaining clusters — any order
Question promotion
Parked questions promote to /questions/ only when an engaging thread woven in the same cluster references them. ADR-0014’s default-promote rule (re-inverted from ADR-0021’s default-park) holds only inside weaving batches and only for questions a thread engages. User retains the override-promote knob per batch.
Existing threads
The 7 threads drafted during foundation-pass are treated as proto-clusters. Each is either an anchor or sub-claim within a proposed cluster. The meta-batch maps the relationship; stage-2 weaving decides per thread to keep / upgrade / subsume / split. Upgrade-pass on existing threads runs as a follow-up after each cluster’s new threads ship.
Alternatives considered
- A. Chapter-by-chapter weaving (mirror foundation-pass). Rejected — threads are inherently cross-chapter; chapter batching produces narrow threads that miss the cross-references parking entries already point at.
- B. Single-stage (search + weave in one batch). Rejected — citation errors and synthesis errors have different failure modes; separating them lets the user catch each independently. Research notes also become reusable across clusters (Augustine cited once for christology cluster, re-cited for trinity cluster).
- C. Priority-tier burndown (all
[critical]first, ignore cluster structure). Rejected — critical-tier questions span clusters; weaving them without cluster scaffolding produces orphan threads that the cluster pass would have to re-do. - D. Bulk-promote all DP parked questions to
/questions/at weaving start. Rejected — orphan Question notes pollute the index; the answering-thread rule keeps/questions/meaningful. - E. Re-weave all 7 existing threads from scratch. Rejected — discards the user’s foundation-pass judgement about what claims are load-bearing. Proto-cluster treatment preserves that signal.
Consequences
- (+) Two-stage shape isolates failure modes (citation accuracy vs synthesis quality), making each user-reviewable independently.
- (+) Cluster batching honors the cross-chapter shape parking entries already encode.
- (+) Research notes (
_meta/research/) accumulate as durable, reusable knowledge regardless of any single thread outcome. - (+) Hard quality gate (cited counter-argument) operationalizes CONTEXT.md’s thread schema requirement — no thread ships as wishful synthesis.
- (+) Parking files reduce to working inventory: weaving consumes entries and marks them, leaving only un-woven candidates for the next pass.
- (−) Doubles batch count per cluster (~10 clusters × 2 stages = ~20 batches). Mitigated by stage-1 being mechanical (low cognitive load) and stage-2 being the only judgment-heavy work.
- (−) New directory
_meta/research/to track. Acceptable — additive, mirrors_meta/batch-reviews/shape. - (−) Some web-search items will land
[flagged-paywall]and stall pending user supply. Acceptable — better than fabricated citations; supply-on-demand fits the user’s chat-first iterative pattern. - (−) Cluster sequencing pre-commits to validating the smallest cluster first, which may not be shape-representative. Mitigated by meta-batch flagging shape-representativeness per cluster so the user can override sequencing.