Cross-Axis Fix Plan (2026-05-17)
Provenance: Claude (Claude Code / Opus 4.7 1M) + GPT-5.5 (Codex desktop) collaboration. The user asked Codex via the wikiwip pinned project for an unsparing top-issues read across three axes (maintainer usability, website design, philosophical synthesis), then asked Codex and Claude together to draft a sequenced fix plan with substrate clusters. This file is the durable record of that plan after the Codex chat closes; the Codex chat itself is not committed to the repo.
Status: H_synth architecture-level retirement adjudicated by user 2026-05-17 (Option A: retire/replace with δ architecture). PRs 1–3 unblocked; PR 4 is gated on this decision and now ready to start; PR 5 sequenced after PR 4.
TL;DR
- Codex's bottom-line verdict on the wiki: "extraction is ahead of interpretation. The repo is very good at preserving, classifying, and auditing fragments. It is much weaker at forcing a reader-facing argumentative sequence and at killing or consolidating synthetic material that no longer earns its keep."
- 13 issues identified across 3 axes. Axis 1 was fragmented during transmission and reinterpreted by Codex as "Integrity"; the recovery surfaced a Claude-prompt hallucination Codex correctly flagged: Claude's planning prompt to Codex contained the string
build_site/wikisite/as the supposed build-output path, a path that does not exist anywhere in this repo (actual output isbuild/perscripts/build_site.py:1607). Codex's "deployment/docs still point at build_site/wikisite/, that is already drift" was itself a corroborating hallucination — grep-verified post-hoc to have no basis in the repo. There is nobuild_site/wikisite/drift. See the 2026-05-17 correction log entry for the post-commit retraction. - Codex accepted all three of Claude's pushbacks (matrix as maintenance-evaluation surface to keep + split-view; H_synth as decision-point not implementation; dead-links as two-stage gate-then-cleanup).
- The plan groups 13 issues into 5 substrate clusters + 1 maintainer decision point, sequenced as 5 bundled PRs.
Provenance
- Codex chat: "Review repo top issues" (~24m elapsed by end of plan-drafting turn) under wikiwip pinned project; GPT-5.5 at Extra High effort with Auto-review mode.
- Codex ran live file exploration during both turns: ~24 files read, lint script executed (
python3 scripts/lint-mechanical.py --help), multiple greps, automatic context compaction once. - Claude-side context injected into the second (planning) prompt that shaped the substrate-fit of the plan:
- General Rule 19 baseline-refresh dance (
scripts/refresh_baselines.py --apply) — every wiki-touching commit carries this admin tax. supported-status promotions halt for human review in Claude Code mode per CLAUDE.md §Claim Status Gates (so the retirement queue ends at a maintainer adjudication step, not full automation).- Bridge-card sign-off workflow's existing 4-role machinery + provenance register at
wiki/.audit/bridge-cards-applied.md. Bridge-card-signoff run-3 completed today (2026-05-17) demonstrates the existing machinery's value; the triage ledger Codex proposes is upstream of it, not a replacement. - Maintainer preference for bundled-PR refactors when substrate is shared (memory note
project_bridge_card_pilot_run1.mdprecedent).
- General Rule 19 baseline-refresh dance (
- Pushbacks Claude raised, all accepted by Codex:
- (a) Matrix. Already a working maintenance-evaluation surface —
test_paper_a_a2.py:277verifies JSON emission/parity;:320encodes "evidence for the gap, not the argument." Fix is split-view (maintainer vs reader), not removal. - (b) H_synth. A thesis-level decision the maintainer has to make. Don't propose a fix; propose a decision-point with two options (retire/replace with δ vs keep Paper A explicitly as contested research object).
- (c) Dead links. Lint already detects these (293 currently). The missing thing is enforcement, not detection. Two-stage: no-new-dead-links gate now; zero-dead-links for reader-public mode after triage. Making the current 293 instantly release-blocking would mostly punish cleanup work.
- (a) Matrix. Already a working maintenance-evaluation surface —
The 13 Findings (Codex's read)
Axis 1 — Integrity (substituted for "Maintainer Usability" due to mid-prompt fragmentation; Codex flagged the inference transparently)
- Broken wikilinks are corrupting topology, not just polish. Lint reports 11 index entries without pages plus a 293-dead-wikilink set. Concrete examples:
wiki/index.md:159→saussurean-diacriticality;wiki/concepts/realist-thought.md:14→objective-thought;wiki/index.md:350→horizonandanonymous-depth;wiki/index.md:585→non-philosophie. - Search advertised but not shipped.
build/pagefind/absent;site/templates/home.html:51renders Pagefind UI when enabled;scripts/build_site.py:1457setspagefind_enabled = not skip_pagefindand only discovers Pagefind failure after rendering at:1521. - Provenance discipline exists at Paper A but not at ordinary pages.
README.md:7claims provenance;site/templates/page.html:127just renders body content with metadata sidebars. Reader can't tell which sentence is grounded in raw extraction, claim adjudication, motif synthesis, or later interpretation.
Axis 2 — Public Site / IA
- IA is a polished flat dump, not an argument-navigation system.
site/templates/base.html:29top nav = Sources / Concepts / Entities / Questions / Claims / Graph / Dashboard / Paper A. Maintainer taxonomy, not reader path. Home previews from generic graph/update heuristics atscripts/build_site.py:1120. - Paper A's "Argument spine" is mislabeled — it's a supported-claim pool.
scripts/wikisite/paper_a.py:321builds the "spine" by sorting supported claims four-element-home-first;site/templates/paper_a_dashboard.html:22then calls that an argument spine. Not sequence, dependency, or dialectic. - The Paper A root is literally pending — readers can see the scaffolding hole.
scripts/wikisite/paper_a.py:737definesH_synth — pending canonical wiki wording;site/templates/paper_a_argument.html:9warns the root is pending. - The matrix is useful for maintenance, weak for reading.
scripts/wikisite/paper_a.py:597computes coverage bands from claim/frontmatter association. (Per pushback: keep as maintenance instrumentation; split-view for readers.) - Visual hierarchy privileges system health over philosophical entry.
site/templates/home.html:112includes contents, recent updates, wiki health, lint counts, claim counts. Useful for maintainers; distracting for readers.
Axis 3 — Philosophical Synthesis
- The central H_synth architecture is contested in claims.md, but the site still orbits it.
wiki/claims.md:176marksscience-secrete-stiftung-chiasmascontested;:207self-corrects the single-attestation frame;:209records that the four concepts are never co-deployed. Meanwhilescripts/wikisite/paper_a.py:47hardcodes the four-element set. DECIDED 2026-05-17: Option A (retire H_synth architecture in code/UI, propagate γ split). - The synthetic layer accumulates claims instead of deciding. Current state: 158 claims (17 supported / 83 live / 57 candidate / 1 contested / 0 retired) per
wiki/.audit/v0d9-codification-2026-05-17-handoff.md:14. The density audit atwiki/.audit/density-bias-diagnosis-2026-05-16.md:74calls 0 retirements "mechanism-absence." motifs.mdis over-HUBbed — "HUB" has stopped discriminating. ~30 HUB entries / ~36 HUB-weighted total perwiki/motifs.md:14;silence(:37) andIneinander(:56) explicitly contain unresolved sub-register problems.- Bridge cards over-type insight before they know what kind of insight it is.
card-6.hypothesis-pre.md:43admits a constructed middle term;:113diagnoses claim-status laundering;card-2.report.md:15overstates evidence with "shares mechanism." - Weave Pass 3 finds real leads, but the bridge-card form is too narrow. Handoff at
weave-apply-2026-05-17-handoff.md:75says a structural insight may belong inclaims.mdormotifs.md, not bridge-card form;weave-2026-05-16-handoff.md:136says 16 of 18 files for 2 cards both blocked.
The Plan — Execution Order
1. Maintainer Decision Point: H_synth / δ — RESOLVED 2026-05-17
Option A (retire/replace with δ architecture) — adjudicated by user 2026-05-17.
Implies:
scripts/wikisite/paper_a.py:47stops treating the four slugs as the public spine.- Four-element apparatus becomes historical/contested background in the site UI.
- Paper A argument root changes from H_synth (
science-secrete-stiftung-chiasm) to the δ architecture (anchored inmp-painter-as-primary-witness-for-indirect-ontologysupported +coherent-deformation-universal-operative-formsupported, withscience-secrete-stiftung-chiasmrendered as historical contested background). - Reader-facing site reflects the γ split that's been documented in
wiki/claims.mdsince 2026-05-05.
Anchored in:
wiki/claims.mdscience-secrete-stiftung-chiasm(contestedsince 2026-05-05; γ split adjudicated by user same day).wiki/claims.mdmp-painter-as-primary-witness-for-indirect-ontology(supportedsince 2026-05-09 twelfth Phase 8 run).wiki/claims.mdcoherent-deformation-universal-operative-form(supported).
Distinction: this adjudication is the architecture-level retirement (operational propagation into code/UI), not a re-adjudication of the claim entry's textual status. The claim entry remains at contested per the existing 2026-05-05 entry's prior reasoning ("under-evidenced rather than false"; painter-side specificity survives δ as one register and is preserved at mp-painter-as-primary-witness-for-indirect-ontology).
2. Integrity Gates & CI — first implementation cluster (prevents entropy while other work happens)
Prep commit: document public-build modes.
- Files:
CLAUDE.md:634,.github/workflows/site.yml:73 - Add distinction: baseline gate = "no unreviewed drift"; public reader gate = "stricter release artifact checks"
Also fold in: fix the— DROPPED, false finding. Grep verification post-commit found nobuild_site/wikisite/→build/drift in CLAUDE.mdbuild_site/wikisite/reference anywhere in the repo except inside this fix-plan artifact and the matching log entry; the "drift" was a Claude prompt-side hallucination corroborated by a Codex side-finding with no basis in the repo. See 2026-05-17 correction log entry.- Gate: docs-only +
python3 scripts/refresh_baselines.py --applyif wiki docs touched - Adjudication: no
Mechanical commit: add scripts/check_public_site.py.
- Checks:
build/pagefind/pagefind-ui.js,build/pagefind/pagefind-entry.json, no search UI without index, no non-stub broken hrefs, optional--max-dead-wikilinks-current-baseline - Touch:
scripts/build_site.py:1454,scripts/wikisite/search.py:66,scripts/tests/test_search.py:234 - Gate:
python3 -m unittest discover -s scripts/tests -p 'test_*.py'+python3 scripts/check_public_site.py build - Adjudication: no
Follow-up cleanup queue: dead-link triage (not immediate page edits).
- New:
scripts/dead_link_triage.py - Output:
wiki/.audit/dead-link-triage-{date}.mdwith per-link triage suggestion (create page / alias / redirect / delete link / keep as unresolved stub) - Gate: lint baseline remains pinned in
check_lint_baseline.py:66 - Adjudication: yes, for create/alias/delete decisions
3. Retirement & Subtraction Infrastructure — worth doing before more synthesis (system is additive by design right now)
Prep commit: codify retirement review as queue-producing, not auto-mutating.
- Touch:
CLAUDE.md:404,.claude/skills/audit/SKILL.md:139 - Add Phase 8.6: retirement/downgrade queue. Supported promotions still halt for human review per
CLAUDE.md:424. - Gate: docs review + baseline refresh if wiki touched
- Adjudication: yes for final wording
Mechanical commit: create scripts/claim_retirement_queue.py.
- Output:
wiki/.audit/claim-retirement-queue-{date}.mdwith candidate age, status-history inactivity, duplicate/synonym suspicion, missing counterpressure, suggested action (keep / downgrade / retire / merge). - Touch tests: new
scripts/tests/test_claim_retirement_queue.py; maybe extendtest_claim_invariants.py. - Gate: unit tests +
python3 scripts/claim_retirement_queue.py --dry-run - Adjudication: no for queue generation, yes for any claim status change
Human step: maintainer adjudicates queue into keep / downgrade / retire / merge.
- Touch:
wiki/claims.md,wiki/log.md, possiblywiki/index.md/wiki/overview.md - Gate:
python3 scripts/refresh_baselines.py --apply+ full tests - Adjudication: required (per CLAUDE.md "supported promotions halt for human review" + retirement requires explicit reasoning)
4. Bridge-Card Triage & Weave Pre-Step
Schema change: new required Pass 3 section before bridge cards — lead triage ledger.
- Buckets:
claim,motif/register,typed-connection,open-question,false-friend,source-gap - Touch:
.claude/skills/weave/SKILL.md:97,.claude/skills/bridge-card-signoff/SKILL.md:34 - Gate: grep/test for required headings in new weave reports
- Adjudication: maintainer approves schema
Mechanical commit: add scripts/validate_weave_pass3.py.
- Rejects bridge cards whose triage bucket isn't
typed-connectionunless explicitly markedoverride: maintainer-approved - Touch:
scripts/lint-mechanical.py:335or separate validator + test - Gate: new
scripts/tests/test_weave_pass3_validation.py - Adjudication: no
Downstream sign-off stays intact. Existing sign-off Role B already catches claim laundering, scope creep, motif tipping, relation vocabulary at .claude/skills/bridge-card-signoff/SKILL.md:160. The triage ledger just prevents obviously wrong artifacts from entering the expensive sign-off process. Bridge-card-signoff run-3 (2026-05-17) demonstrates the existing machinery's value; the triage ledger is earlier classification upstream, not replacement.
5. Reader-Facing IA & Argument Paths — depends on H_synth decision (NOW UNBLOCKED 2026-05-17)
Prep commit: introduce an argument-path schema without choosing thesis content.
- New file:
wiki/.audit/argument-path-schema.mdorsite/argument_paths/schema.json - New module:
scripts/wikisite/argument_paths.py - Gate: schema validation test
- Adjudication: no if schema-only
Mechanical commit: split Paper A surfaces into maintainer vs reader.
- Keep
/paper-a/matrix/as maintenance. Add/paper-a/read/or/paper-a/argument-path/for readers. - Touch:
scripts/wikisite/paper_a.py:321,site/templates/paper_a_dashboard.html:22, newsite/templates/paper_a_reader.html,site/static/css/site.css:1043 - Also:
scripts/wikisite/paper_a.py:47four-slug hardcoding swapped per Option A decision (δ architecture as canonical root) - Gate: new
scripts/tests/test_paper_a_reader.py; updatetest_paper_a_a2.py:339 - Adjudication: depends on H_synth choice (Option A resolved)
Human step: maintainer supplies first δ-path sequence.
- δ-path: argument paths anchored in
mp-painter-as-primary-witness-for-indirect-ontology+coherent-deformation-universal-operative-form, withscience-secrete-stiftung-chiasmrendered as historical contested background - Touch: path data file, possibly
wiki/claims.md:176cross-references for inbound link surface - Gate: baseline refresh, tests, visual smoke
- Adjudication: required
6. Provenance Surface — worth doing, but after the path split
"Provenance without reader path is just another sidebar." (Codex)
Mechanical commit: per-page provenance panel.
- Per-page provenance panel: cited sources, extraction-note anchors, related claims, last audit touch, confidence/status
- Gate: new
scripts/tests/test_page_provenance.py; validate no provenance panel pollutes Pagefind index - Adjudication: no
Human step: decide provenance verbosity for public site.
- Minimal public mode: "grounded by these sources/claims"
- Maintainer mode: full audit trail
- Adjudication: yes (UX/content policy)
Dependencies (Codex's read)
- H_synth decision gates Paper A reader-path content and argument-root tests. (Resolved 2026-05-17.)
- Integrity gates can land immediately; should land first.
- Retirement queue does not strictly block bridge-card triage, but makes claim-grade triage meaningful.
- Bridge-card triage should land before the next large sign-off run.
- Provenance surface is more valuable after reader paths exist.
Drop / Defer
- Do not "fix" the matrix by making it reader-first. Keep it as maintenance instrumentation.
- Do not clean historical bridge-card pilot artifacts just to make lint zero. They are pinned historical evidence at
check_lint_baseline.py:26. - Do not mass-fix all 293 dead links in one PR. Generate triage, then batch by substrate (aliases / actual pages / stale links).
Bundled-PR Shape
- PR 1: integrity gates (Cluster 2)
- PR 2: subtraction queue (Cluster 3)
- PR 3: weave triage (Cluster 4)
- PR 4: Paper A decision + reader IA (Cluster 5, gated on H_synth — now unblocked)
- PR 5: provenance surface (Cluster 6)
Maintainer Decision Points
| When | Decision | Status |
|---|---|---|
| Pre-plan | H_synth retirement (Option A vs B) | Resolved 2026-05-17: Option A (retire/replace with δ) |
| Cluster 2 prep commit | Final CLAUDE.md wording for baseline-vs-public-reader gate distinction | Pending |
| Cluster 3 prep commit | Final wording for Phase 8.6 retirement queue in audit SKILL | Pending |
| Cluster 3 human step | Per-claim adjudication: keep / downgrade / retire / merge (current 158-claim review) | Pending |
| Cluster 4 schema change | Approve triage ledger bucket vocabulary | Pending |
| Cluster 5 mechanical commit | Confirm δ architecture as Paper A canonical root in code | Pending |
| Cluster 5 human step | Supply first δ-path sequence | Pending |
| Cluster 6 human step | Provenance verbosity policy for public site | Pending |
Open Questions Surfaced by the Plan
CLAUDE.md drift on— DROPPED, false finding. Initial fix-plan claimed Codex caught CLAUDE.md drift onbuild_site/wikisite/build_site/wikisite/. Subsequent grep verification confirmed there is nobuild_site/wikisite/reference anywhere in the repo except inside this fix-plan artifact and the 2026-05-17 plan log entry asserting the drift. What actually happened: Claude's planning prompt to Codex contained the hallucinated stringbuild_site/wikisite/; Codex correctly noted the path does not exist, then added a corroborating speculative "deployment/docs still point at..." finding with no actual basis in the repo. The exchange was not Codex finding repo drift; it was two AIs corroborating each other's hallucinations. Lesson for future Claude+other-AI collaborations: CLAUDE.md General Rule 16 (citation traceability) applies to AI-source-cited findings, not only human-source-cited findings. Grep-verify before propagating "the other model said X exists" into a planning artifact. See 2026-05-17 correction log entry.- 293 dead-links triage shape. Codex's count (293) implies the triage will be substantial. Two reasonable shapes: per-source (one PR per substrate area) or per-resolution-class (one PR for aliases, one for new pages, etc.). The plan recommends per-resolution-class to match the user's bundled-PR preference, but the maintainer adjudicates at queue-output time.
- Triage-ledger bucket vocabulary. Codex proposed
claim / motif/register / typed-connection / open-question / false-friend / source-gap— six buckets. The maintainer adjudicates whether to splitmotif/registerfurther (motif vs register) or mergeopen-questionandsource-gap(since both name absences). - Per-page provenance verbosity policy (Cluster 6 human step). Minimal vs full-audit-trail modes are the two natural options Codex named; intermediate "show top-3 sources + last-audit-touch" is a possible third.
Verification Gate for Each PR
Codex's file:line citations in this artifact were captured live from a Codex chat that read the actual repo, but they have not been independently verified against current state in this Claude session. First step of each PR's prep work is to re-verify the cited line numbers (files may have shifted since Codex's read). Cite the verification in the PR description.
What This Artifact Does Not Authorize
- It does not promote, retire, or restatus any claim entry beyond what the prior γ adjudication (2026-05-05) already supported.
- It does not authorize motif HUB/STRUCTURAL upgrades or downgrades.
- It does not authorize any apply-mode writes derived from new bridge cards.
- It does not change the schema; any CLAUDE.md edits proposed in Cluster 2 / Cluster 3 prep commits go through the schema-changelog gate.
- It does authorize PR 4 of the plan to begin (the Paper A code-and-UI propagation of the γ split), per the user's 2026-05-17 H_synth Option A adjudication.
Cross-References
- Codex's findings on claim accumulation align with
wiki/.audit/density-bias-diagnosis-2026-05-16.md— that prior audit independently proposed a retirement gate at:158and a consolidation phase at:185. PR 2 implements those proposals. - Bridge-card-signoff run-3 completed 2026-05-17 (canonical at
wiki/.audit/weave-pass3-2026-05-17-followup/bridge-card-1-revised.md+ run-3 audit subdirectory). Codex's Cluster 4 triage-ledger proposal sits upstream of this workflow. - v0d.9 codification commit
6d616cb(2026-05-17) added the Latent-Adjacent verdict and the*has cross-tradition cousin*typed connection. These are unrelated to the fix-plan clusters and do not block PR work.