# WIP Triage Evidence Ledger — 2026-08-11

Audience: AI coding agents first.

Canonical baseline: `origin/master` → `dbabfb3fa50158ce222a3928587b2f65eaff0360`, fetched 2026-08-11 from `git@github.com:avi-ezra/Press.Zone-Works.git`.

This file is evidence for [Worktree Triage and Consolidation](2026-08-10-worktree-triage-consolidation.md), not a second plan. Use **inactive since**, never infer abandonment from age.

## Executive recommendation

- **Safely retired:** nine deletion-gate-qualified worktrees and two branch-only refs. Exact retirement tags remain verified. `wt/fix-language-route-404` was retained because live Claude PID `1939314` owns its exact path.
- **Preserve and recover:** CAP-02, backend Jest, localhost verifier, ACF Task 11, CloudPanel remnants, license-only presentation flow, manual locks, multilingual site content, plugin/worker parity, historical master stashes, and shared-checkout WIP.
- **Keep active:** triage control lane; admin dual-layer cache; backend Jest; localhost verifier; manual locks; language-route owner session. Named peer sessions remain rooted in shared checkout, so their related WIP MUST NOT be retired.
- **Consolidate:** CAP-02 (three carriers), localhost verifier (two implementation carriers), backend Jest (two carriers), ACF (branch + backup + stash), and old landing placeholders.
- **Blocked:** ask-gpt localhost generation remains external; dirty-lane landing waits for semantic review/current gates, not preservation.
- **Landing order:** land triage evidence first; then independently verified admin-cache work; backend Jest; CAP-02; localhost verifier; manual locks; plugin/worker parity; multilingual site content. Recalculate after every landing.

## Source aliases

| Alias | Authoritative source |
|---|---|
| T | `2026-08-10-worktree-triage-consolidation.md` |
| G | `2026-08-11-ask-gpt-offload-batch.md` |
| A | `2026-08-09-acf-never-translate.md` + linked design spec on `backup/acf-never-translate-pre-rebase` |
| C | `wt/ask-gpt-cap02:docs/plans/2026-08-11-cap02-active-client-harvest.md` |
| J | `wt/ask-gpt-backend-jest:docs/plans/2026-08-11-backend-jest-suite-repair.md` |
| L | `wt/ask-gpt-localhost-guard:docs/plans/2026-08-10-localhost-only-testing.md` + linked design spec/amendment |
| M | `wt/manual-translation-locks:docs/plans/2026-08-09-manual-translation-lock-auto-translate.md` + linked design spec |
| S | `wt/multilingual-site-entry-and-layout:docs/plans/2026-08-09-multilingual-site-entry-and-layout.md` + linked design spec |
| O | `worktree-license-only-api-configuration:docs/plans/2026-07-30-license-only-api-configuration.md` + `CLIENT-PRESENTATION-JOURNEY-SPEC.md` |
| N | `wt/admin-snappy-contract-fix:docs/plans/2026-08-10-admin-dual-layer-cache.jsonl` |
| E | `2026-08-10-emergency-plugin-rollback.md` |
| Y | `2026-08-01-journey-e2e-coverage.md` + linked design spec |
| D | `press-zone-backend/docs/plans/2026-08-01-dev-mock-translation-provider.jsonl` + linked design spec |

## Worktree ledger

`Activity` = first/latest meaningful commit or documented work date. `S/M/U` = staged/modified/untracked current paths. Conflict excludes uncommitted state.

| Worktree / branch | Purpose | Plan/spec | Activity | Current evidence | Conflict | Time-to-land | Disposition / flags | Confidence | Recovery ref | Concrete action |
|---|---|---|---|---|---|---|---|---|---|---|
| Shared checkout `fix/content-generate-all` | Mixed active owner WIP: journeys, admin translation, backend token/migration tests | T/Y + several plans | inactive commit since 2026-08-05; files active 2026-08-11 | 14 tracked + 94 bounded valuable untracked preserved; live peer processes | HIGH | Several days | KEEP — ACTIVE; DIRTY; UNTRACKED-WIP; CONSOLIDATE | HIGH | `main-current-20260811-triage-refresh` | Keep read-only; assign preserved file groups to authoritative streams. |
| `fix/plugin-worker-parity` | OAuth PKCE, hosted onboarding, credential-liveness parity | T/G | 2026-08-06 / 2026-08-06 | 8 unique commits; audited: the PKCE slice is mergeable but BROKEN — exchange 400s because the backend requires `account_id` the plugin no longer sends | HIGH (21) | Several days | RECOVER; STALE-BASE; HIGH-CONFLICT; BROKEN-CONTRACT | HIGH | `current-20260811/fix-plugin-worker-parity-tip` | Fix the backend seam to derive tenant from `oauthCodes.tenantId`, add the RED exchange test, then re-derive remaining seams; never rebase wholesale. |
| `cap02-active-client` | Active-client licensing contracts and loser cancellation | T/C | 2026-08-04 / 2026-08-04 | 3 unique commits; clean | HIGH (52) | 1–2 days | RECOVER; CONSOLIDATE | HIGH | `current-20260811/cap02-active-client-tip` | Compare five unique files with current CAP-02 review lane. |
| `recover/cloudpanel-runtime-health` | Legacy runtime/licensing recovery | T | 2026-07-29 / 2026-07-30 | S1/M74/U17; stash 2; mostly superseded architecture | HIGH (37) | Needs redesign | RECOVER; DIRTY; STASHED-WIP; HIGH-CONFLICT | HIGH | `current-20260811/recover-cloudpanel-runtime-health`; `stash-03` | Harvest only current behavior; do not revive CloudPanel architecture. |
| `worktree-fix-cpt-dashboard-ui` | Prevent ACF race harness anonymous-volume leak | T | 2026-08-04 / 2026-08-04 | Patch-equivalent to baseline; clean; ignored runtime/dependencies only | LOW (0) | <1 hour retirement | RETIRE — LANDED | HIGH | see retirement manifest | Tag exact tip, record manifest, remove carrier. |
| `worktree-license-only-api-configuration` | Presentation journey; configurable API URL removal | O/T | 2026-07-31 / 2026-07-31 | S1/M92/U37; 2 unique commits; stale design | HIGH (54) | Needs redesign | RECOVER; DIRTY; HIGH-CONFLICT | HIGH | `current-20260811/worktree-license-only-api-configuration` | Isolate `Migration007`; prove remaining unique source current. |
| `feature/acf-never-translate` | Landed ACF policy plus unfinished Task 11 runtime matrix | A/T | 2026-08-09 / 2026-08-10 | committed work landed; U10; stash 0; peer ownership unresolved | uncommitted unknown | 1–2 days | RECOVER; UNTRACKED-WIP; STASHED-WIP | HIGH | `current-20260811/feature-acf-never-translate`; `stash-01` | Reconstruct from backup README; never apply patches wholesale. |
| `wt/admin-snappy-contract-fix` | Dual-layer cache and queue-claim correctness | N/T | 2026-08-10 / 2026-08-11 | 3 unique commits; S1/M2; 766 excluded `%h` bytecode files | MEDIUM (1) | Half day | KEEP — ACTIVE; DIRTY; TEST-UNKNOWN | HIGH | `current-20260811/wt-admin-snappy-contract-fix` | Re-derive one conflict; run N’s current focused and release gates. |
| `wt/ask-gpt-backend-jest` | Current Jest setup/account-route repair without auth regression | J/G | 2026-08-11 / 2026-08-11 | S1/M11/U2; focused 201 + admin 26 pass; account/full suite red | LOW committed | Half day | KEEP — ACTIVE; DIRTY; TEST-FAILING | HIGH | `current-20260811/wt-ask-gpt-backend-jest` | Rewrite account suite to current routes; run full backend gate. |
| `wt/ask-gpt-cap02` | Current CAP-02 licensing harvest | C/G | 2026-08-11 / 2026-08-11 | S1/M5/U4; rejected JobSender pair present; no commit | LOW committed | 1–2 days | RECOVER; DIRTY; CONSOLIDATE | HIGH | `current-20260811/wt-ask-gpt-cap02` | Remove rejected pair from implementation candidate; review remaining files. |
| `wt/ask-gpt-localhost-guard` | Loopback-only disposable candidate verifier | L/G | 2026-08-11 / 2026-08-11 | S22/M5; six security/design blockers; external Pro job active | LOW committed | Several days | KEEP — ACTIVE; DIRTY; BLOCKED; HIGH-CONFLICT | HIGH | `current-20260811/wt-ask-gpt-localhost-guard` | Finish disposable site/DB lifecycle and concurrency cleanup tests. |
| `wt/ask-gpt-regression` | Release archive integrity | G | 2026-08-11 / 2026-08-11 | `a012c6f9f` in baseline; clean; full receipt | LOW (0) | <1 hour retirement | RETIRE — LANDED | HIGH | see retirement manifest | Tag exact tip, record manifest, remove carrier. |
| `wt/backend-test-repair` | Earlier Jest/translate test repair | G/J | 2026-08-10 / 2026-08-10 | S1/M7; overlaps active Jest lane | LOW committed | Half day consolidation | RECOVER; CONSOLIDATE | HIGH | `current-20260811/wt-backend-test-repair` | Compare eight paths and transplant unmatched tests only. |
| `wt/emergency-ipz-rollback` | Emergency rollback record | E/T | 2026-08-10 / 2026-08-10 | DONE commit in baseline; clean | LOW (0) | <1 hour retirement | RETIRE — LANDED | HIGH | see retirement manifest | Tag exact tip, record manifest, remove carrier. |
| `feat/dev-mock-translation-provider` | Deterministic backend mock provider | D/T | 2026-08-01 / 2026-08-10 | commit in baseline; clean; ignored build/log/dependencies only | LOW (0) | <1 hour retirement | RETIRE — LANDED | HIGH | see retirement manifest | Tag exact tip, record manifest, remove carrier. |
| `wt/fix-language-route-404` | Language-subdirectory rewrite repair | T | 2026-08-09 / 2026-08-11 | commit in baseline; clean; retirement tag verified; live Claude PID `1939314` owns exact path | LOW (0) | Blocked on owner release | KEEP — ACTIVE; landed implementation | HIGH | `refs/tags/retired/wt/fix-language-route-404` | Retain unchanged until process ownership clears; revalidate before retirement. |
| `wt/gitignore-dist` | Stop tracking built admin bundle | commit/G | 2026-08-10 / 2026-08-10 | `1bd652d53` in baseline; clean | LOW (0) | <1 hour retirement | RETIRE — LANDED | HIGH | see retirement manifest | Tag exact tip, record manifest, remove carrier. |
| `wt/ignore-ask-gpt-output` | Ignore private/generated ask-gpt registry | G | 2026-08-11 / 2026-08-11 | `2b8d4eb06` in baseline; clean; no ignored residue | LOW (0) | <1 hour retirement | RETIRE — LANDED | HIGH | see retirement manifest | Tag exact tip, record manifest, remove carrier. |
| `wt/journey-e2e` | Rescue journey/UI matrix suite | Y/T | 2026-08-01 / 2026-08-10 | 71-file commit in baseline; clean; current shared checkout adds UJ-008..020 separately | LOW (0) | <1 hour retirement | RETIRE — LANDED | HIGH | historical `wt/journey-e2e` branch + see retirement manifest | Tag exact tip; shared refresh preserves later journey WIP; remove carrier. |
| `wt/land` | Historical integration lane | T | 2026-08-10 / 2026-08-11 | exact clean ancestor; no unique work | LOW (0) | <1 hour retirement | RETIRE — LANDED | HIGH | see retirement manifest | Tag exact tip, record manifest, remove carrier. |
| `wt/land-cap02` | Corrupted parsed CAP-02 artifact lane | C/G | 2026-08-11 / 2026-08-11 | S1/M2/U3; unsafe as direct source | LOW committed | Half day consolidation | RECOVER; DIRTY; CONSOLIDATE | HIGH | `current-20260811/wt-land-cap02` | Compare only; never commit parsed artifact wholesale. |
| `wt/localhost-only-testing` | Rejected original localhost verifier model | L/T | 2026-08-10 / 2026-08-11 | S1/M14/U7; superseded by disposable-site amendment | LOW committed | 1–2 days consolidation | RECOVER; DIRTY; CONSOLIDATE | HIGH | `current-20260811/wt-localhost-only-testing` | Harvest compliant tests into current guard lane only. |
| `wt/manual-translation-locks` | Manual-translation policy/schema/source automation | M/T/G | 2026-08-09 / 2026-08-11 | S12; broad definition of done incomplete; peer session exists | LOW committed | Several days | KEEP — ACTIVE; DIRTY; TEST-UNKNOWN | HIGH | `current-20260811/wt-manual-translation-locks` | Amend prohibited dev1 gate to localhost-only; review migration seam first. |
| `wt/multilingual-site-entry-and-layout` | Locale bootstrap, site content UI, backend segments | S/T/G | 2026-08-09 / 2026-08-11 | audited: branch 94 behind / 0 ahead; snapshot carries 258 changed paths, 183 untouched by master, only 4 redundant; Releases 1 and 2 substantially implemented with tests; Release 3 correctly absent | 13 textual seams + 1 semantic (`LanguageManager::clearCurrentLanguage`) | 18–31 hours in 4 slices | RECOVER; DIRTY; HIGH-CONFLICT; BLOCKED-ACCEPTANCE; not single-purpose | HIGH on classification, MEDIUM on acceptance completeness | `current-20260811/wt-multilingual-site-entry-and-layout` | Replay Slice 1 only into a fresh worktree off current master; reject `admin/dist/`, lockfiles, and all gate baselines; defer the phpcs sweep and partitioning lanes. |
| `wt/task-29-partition-removal` | Remove speculative partitioning | T | 2026-08-10 / 2026-08-10 | commit in baseline; only 756 untracked `%h` Python bytecode files | LOW (0) | <1 hour retirement | RETIRE — LANDED; generated residue | HIGH | see retirement manifest | Remove generated `%h`, tag exact tip, record manifest, remove carrier. |
| `wt/worktree-triage` | Authoritative triage/preservation control lane | T/G | 2026-08-10 / 2026-08-11 | active plan commit `8efe020a3`; current receipt edit pending | LOW | <1 hour for evidence landing | KEEP — ACTIVE; DIRTY | HIGH | branch itself | Land refreshed evidence before product lanes. |

## Branch-only ledger

| Branch | Purpose | Activity | State | Disposition / confidence | Recovery | Concrete action |
|---|---|---|---|---|---|---|
| `backup/acf-never-translate-pre-rebase` | ACF plan/design backup | 2026-08-09 | contradiction resolved: the branch differs from `origin/master` by exactly two doc paths, and both blobs are byte-identical (`74f525ac`, `0cafc2aa`); no unique Task 11 instruction exists on any ref | RETIRE — REDUNDANT; HIGH | `refs/tags/retired/backup/acf-never-translate-pre-rebase` + `current-20260811/backup-acf-never-translate-pre-rebase-tip` | RETIRED 2026-08-11 after tag verification; `-D` was required because the doc commit was re-created rather than merged. |
| `master` | stale local tracking anchor | through 2026-08-11 | 33 behind; no unique commits; stashes 3/4 | RECOVER; HIGH | `stash-04`, `stash-05` | Keep stashes mirrored; update local anchor only after shared checkout disengages. |
| `wip/main-checkout-2026-08-10` | Historical full shared snapshot | 2026-08-10 | fully subsumed: branch tip `0b1d6ee7c` is the same commit as `refs/wip-snapshot/wt01-MAIN-checkout`; after noise filtering only a byte-identical `CLAUDE.md.original.md` backup and one harness temp script remained versus the current bounded snapshot | RETIRE — REDUNDANT; HIGH | `refs/tags/retired/wip/main-checkout-2026-08-10` + `refs/wip-snapshot/wt01-MAIN-checkout` | RETIRED 2026-08-11; recover with `git branch wip/main-checkout-2026-08-10 refs/wip-snapshot/wt01-MAIN-checkout`. Its 137 deletions are absences, NEVER apply them. |
| `wt/land-job5` | Empty job-5 landing placeholder | 2026-08-11 | exact baseline ancestor; no worktree/unique files | RETIRE — LANDED; HIGH | see retirement manifest | Tag exact tip, record manifest, delete branch. |
| `wt/wip-triage-skill` | Empty triage-skill landing placeholder | 2026-08-11 | exact baseline ancestor; no worktree/unique files | RETIRE — LANDED; HIGH | see retirement manifest | Tag exact tip, record manifest, delete branch. |

## Recovery manifest

All refs below resolve locally. Current bounded snapshot trees were rebuilt from temporary indexes and verified equal to current source state; worktree indexes and files were not mutated.

| Original carrier | WIP type | Recovery ref | Commit | Verification / recovery method |
|---|---|---|---|---|
| Shared checkout | tracked + 94 valuable untracked | `refs/wip-snapshot/main-current-20260811-triage-refresh` | `8fda4bba4b5a7d56df2dba6d30d5ceae934ab4b0` | stable before/after status hash; checkout/cherry-pick selected paths only |
| `recover/cloudpanel-runtime-health` | tracked/untracked | `refs/wip-snapshot/current-20260811/recover-cloudpanel-runtime-health` | `8179d708c2d76e793567ccd94cec6960873be3a1` | current bounded tree exact |
| `worktree-license-only-api-configuration` | tracked/untracked | `refs/wip-snapshot/current-20260811/worktree-license-only-api-configuration` | `fb580b1f3dc5b67c055069e97e0c69a05acd84b9` | current bounded tree exact |
| `feature/acf-never-translate` | Task 11 untracked | `refs/wip-snapshot/current-20260811/feature-acf-never-translate` | `235f890ce9380096e00d24f56c8fe773164754e1` | current bounded tree exact; stash separately mirrored |
| `wt/admin-snappy-contract-fix` | tracked + bounded untracked | `refs/wip-snapshot/current-20260811/wt-admin-snappy-contract-fix` | `f66e1020d2f1ec8cb345332ee1fe31b9e54279ad` | exact excluding 766 generated bytecode files |
| `wt/ask-gpt-backend-jest` | staged/dirty/untracked | `refs/wip-snapshot/current-20260811/wt-ask-gpt-backend-jest` | `be5ebbde1f98067efae0fafb3e1bc983193c65f5` | current bounded tree exact |
| `wt/ask-gpt-cap02` | staged/dirty/untracked | `refs/wip-snapshot/current-20260811/wt-ask-gpt-cap02` | `9f05d1c900ee1bd5367b6675ff6211755ee6513f` | current bounded tree exact |
| `wt/ask-gpt-localhost-guard` | staged/dirty | `refs/wip-snapshot/current-20260811/wt-ask-gpt-localhost-guard` | `8866a9f082b894349e46553be5d790a3f08fe984` | current bounded tree exact |
| `wt/backend-test-repair` | staged/dirty | `refs/wip-snapshot/current-20260811/wt-backend-test-repair` | `097f5bd9dc83d50c16abf15cb80eac5264aa7514` | current bounded tree exact |
| `wt/land-cap02` | staged/dirty/untracked | `refs/wip-snapshot/current-20260811/wt-land-cap02` | `8869114eb5b5936fa1942767f02b55c0b6f25cb4` | current bounded tree exact |
| `wt/localhost-only-testing` | staged/dirty/untracked | `refs/wip-snapshot/current-20260811/wt-localhost-only-testing` | `6815ee8f2238a763aa0054dad82cf092fb523f35` | current bounded tree exact |
| `wt/manual-translation-locks` | staged | `refs/wip-snapshot/current-20260811/wt-manual-translation-locks` | `474c3bf907783b5126cf9d46e72d9188d09ded5e` | current bounded tree exact |
| `wt/multilingual-site-entry-and-layout` | staged/dirty + 52 valuable untracked | `refs/wip-snapshot/current-20260811/wt-multilingual-site-entry-and-layout` | `09d3de3ac2c9805f63820433c8b1378fd163ee80` | exact excluding 44 generated/dependency paths |
| `fix/plugin-worker-parity` | committed tip | `refs/wip-snapshot/current-20260811/fix-plugin-worker-parity-tip` | `1f843f58becc06e95829a99c2305e37989ee3dfa` | ref equals branch tip |
| `cap02-active-client` | committed tip | `refs/wip-snapshot/current-20260811/cap02-active-client-tip` | `5dc2612c458282aac7fd99ec015587340dae900c` | ref equals branch tip |
| ACF backup | committed tip | `refs/wip-snapshot/current-20260811/backup-acf-never-translate-pre-rebase-tip` | `7eef04c01c42a03b687f1da6f01bf1bc05a7d7ac` | ref equals branch tip |
| Stashes 0–4 | stash commits | `refs/wip-snapshot/stash-01` … `stash-05` | exact stash hashes | every mirror equals stash object; recover with branch/apply from ref |
| Historical 39 carriers | historical full trees | `refs/wip-snapshot/wt01-*` … indexed refs | see T snapshot index | all resolve; one parent; subject maps branch/dirty/path |

Current preservation totals before safe retirement: **62 `refs/wip-snapshot/*` refs**, **96 `refs/tags/retired/*` tags**, five live stashes with exact durable mirrors.

## Safe-retirement execution manifest

Executed after exact baseline/path/branch/HEAD/status/process/tag revalidation. Nine worktrees and two
branch-only refs were removed; all corresponding retirement tags still resolve. The
`wt/fix-language-route-404` row failed the process-ownership gate and remains intact. Worktrees are
17; local branches are 20. All 62 snapshot refs and 96 retirement tags resolve after removal.

`wt/task-29-partition-removal/%h` was deleted only after re-proving exactly 756 regular
`.cache/python-bytecode/*.pyc` files. Worktree removal never used force. Branch `-D` was used only
where direct ancestry to current `origin/master` and an exact retirement tag were reverified; plain
`-d` had compared against the triage branch instead of the canonical baseline.

| Carrier | Retirement ref | Tip | Landing proof |
|---|---|---|---|
| `worktree-fix-cpt-dashboard-ui` | `refs/tags/retired/worktree-fix-cpt-dashboard-ui` | `eb0ddb634d51b7aaed0906e37d2cf5fe9c63c136` | patch-equivalent; clean |
| `wt/ask-gpt-regression` | `refs/tags/retired/wt/ask-gpt-regression` | `a012c6f9f6d11425dc3df5d2aedc7fe0162eb146` | ancestor; release receipt; clean |
| `wt/emergency-ipz-rollback` | `refs/tags/retired/wt/emergency-ipz-rollback` | `ca931374605765d75a11314a3498acaaeace55a7` | ancestor; DONE plan; clean |
| `feat/dev-mock-translation-provider` | `refs/tags/retired/feat/dev-mock-translation-provider` | `70394b148b987be28b344de5d6c7f32cbbdbf057` | ancestor; clean |
| `wt/fix-language-route-404` | `refs/tags/retired/wt/fix-language-route-404` | `b51da8dfa777e9d90e134b234a2a741a5d8007aa` | ancestor; clean; ignored cache only |
| `wt/gitignore-dist` | `refs/tags/retired/wt/gitignore-dist` | `1bd652d53c3d2b8cf6ae9d0762f0fd2b8042f771` | ancestor; clean |
| `wt/ignore-ask-gpt-output` | `refs/tags/retired/wt/ignore-ask-gpt-output` | `2b8d4eb06691dbad749bdbf29c12a69a21fc273b` | ancestor; privacy receipt; clean |
| `wt/journey-e2e` | `refs/tags/retired/wt/journey-e2e` | `90b5a6914d3e494f66249457709ece0ebcdc5f5d` | ancestor; 71-file rescue verified; clean |
| `wt/land` | `refs/tags/retired/wt/land` | `3fb0f1bd7a316f9df73d40fac3203423b6d9164d` | ancestor; no unique state; clean |
| `wt/task-29-partition-removal` | `refs/tags/retired/wt/task-29-partition-removal` | `b5826ae38e60b56505af77eb1d0d00fa4dda04fa` | ancestor; only 756 generated Python bytecode files |
| `wt/land-job5` | `refs/tags/retired/wt/land-job5` | `3fb0f1bd7a316f9df73d40fac3203423b6d9164d` | ancestor; branch-only; no unique state |
| `wt/wip-triage-skill` | `refs/tags/retired/wt/wip-triage-skill` | `3fb0f1bd7a316f9df73d40fac3203423b6d9164d` | ancestor; branch-only; no unique state |

## Post-retirement conflict recalculation

Measured against unchanged `origin/master` `dbabfb3fa` after retirement. `S/M/U` is current
worktree state; conflict count covers committed trees only and excludes preserved dirty state.

| Lane | Behind / ahead | S/M/U | Committed conflicts |
|---|---:|---:|---:|
| `wt/worktree-triage` | 0 / 2 | 0/0/0 | 0 |
| `wt/ask-gpt-backend-jest` | 33 / 0 | 0/12/2 | 0 |
| `wt/ask-gpt-cap02` | 33 / 0 | 0/6/4 | 0 |
| `wt/ask-gpt-localhost-guard` | 33 / 0 | 22/5/0 | 0 |
| `wt/land-cap02` | 33 / 0 | 0/3/3 | 0 |
| `feature/acf-never-translate` | 43 / 0 | 0/0/10 | 0 |
| `wt/fix-language-route-404` | 45 / 0 | 0/0/0 | 0; active owner |
| `wt/backend-test-repair` | 47 / 0 | 0/8/0 | 0 |
| `wt/admin-snappy-contract-fix` | 70 / 3 | 0/3/768 | 0 |
| `wt/localhost-only-testing` | 71 / 0 | 0/15/7 | 0 |
| `wt/multilingual-site-entry-and-layout` | 90 / 0 | 0/206/96 | 0 |
| `wt/manual-translation-locks` | 93 / 0 | 12/0/0 | 0 |
| shared `fix/content-generate-all` | 139 / 0 | 0/14/4740 | 0 |
| `fix/plugin-worker-parity` | 139 / 8 | 0/0/1 | 18 |
| `cap02-active-client` | 185 / 3 | 0/0/0 | 16 |
| `worktree-license-only-api-configuration` | 218 / 2 | 0/93/37 | 27 |
| `recover/cloudpanel-runtime-health` | 227 / 8 | 0/75/17 | 16 |

## Multilingual carrier audit (2026-08-11)

Audience: AI coding agents first. Full evidence recorded here so the carrier is never re-audited.

**Accept (authored, plan-aligned):** Release 1 locale bootstrap, special-page resolution, effective
templates, canonical URL service, Pages API/UX (~20 source + 8 test files). Release 2 site-content
catalog/codec/repository/storage, `SiteContentController`, the two-handler translation resource
pipeline, `Migration008SiteContentStorage`, admin Site Content screen, and the backend segmented
types/validation/worker plus `20260810000000_enforce_job_idempotency`.

**Reject, never port:** `admin/dist/**` — provably incoherent (three hashed chunks deleted,
`runtime.js`/`main.css` modified, no replacement chunks), so it can never satisfy the
bundle-matches-source gate. Also `admin/package-lock.json`, both `package.json` files,
`composer.json`/`composer.lock`, `jest.config.js`, and every gate baseline
(`phpstan-baseline.neon`, `phpcs-baseline.json`, `phpstan.neon.dist`, `phpcs.xml.dist`,
`phpunit.xml.dist`). Porting a stale baseline forward is a fake-green vector — regenerate against
the rebased tree.

**Defer, never delete:** two foreign lanes share this worktree — a repo-wide phpcs Yoda/`error_log`
sweep across ~55 files, and a DB partitioning/archive lane (`PartitionManager`, `ArchiveManager`,
`IndexOptimizer`, `DatabaseMaintenanceOrchestrator`, `Migration20260207PartitionTables`, four
standalone tests). Neither is in the plan's file list.

**Hard semantic dependency:** `LocaleContextCoordinator` calls
`LanguageManager::clearCurrentLanguage()`, which does NOT exist on `origin/master`. The WIP's own
edit to that contested file introduces it. That edit MUST survive reconciliation or Release 1 is
dead on arrival.

**Landing slices:** Slice 1 Release 1 (6–10 h) → Slice 2a backend, which MUST land and deploy first
so segmented capability is advertised (3–5 h) → Slice 2b plugin/admin (8–14 h). Slice 3 has nothing
to land. No migration collisions: master has no `Migration008` and no matching Prisma migration.

**Missing tests blocking acceptance:** full `SiteContentControllerTest` authorization/limit/
idempotency matrix, `RuntimeAdaptersTest` context-exclusion matrix, both localhost E2E specs,
multisite new-site schema, theme-switch inactivation, and redirect-loop prevention.

## CAP-02 carrier audit (2026-08-11)

Audience: AI coding agents first. Adversarial read-only review; three load-bearing claims were
re-verified directly against `origin/master` by the triage owner.

**Two exploitable defects live on current master, independent of every carrier — fix first:**

1. `includes/Licensing/ActivationManager.php:396` returns literal `'ipz-default-encryption-key-123'`
   when `AUTH_KEY` is undefined, and `encrypt()` falls back to bare `base64_encode()`. Stored
   license keys are recoverable from the database under those paths.
2. `includes/Licensing/UpdateChecker.php:286` calls `LicenseClient::request()`, which is `private`
   (`LicenseClient.php:130`) — a guaranteed fatal. `verifyPackageSignature()` has no callers and
   `phpstan-baseline.neon:808` already records it unused, so the plugin ships ZERO update-package
   verification.

Two unfixed siblings: `getLicenseInfo()` still passes the plaintext key in a GET query string, and
`testConnection()` uses unguarded `wp_remote_get`.

**Harvest exactly six files** from `refs/wip-snapshot/current-20260811/wt-ask-gpt-cap02`:
`ActivationManager.php` (AES-256-GCM, `v2:` prefix, one-shot legacy migration, fail-closed
activation), `LicenseClient.php` (`wp_safe_remote_request`, `/updates/check` GET→POST,
`!is_array()` guard, fail-closed on HTTP 200 with `success:false`), `LicenseValidator.php`,
`UpdateChecker.php` (verification wired to `upgrader_pre_download`, https-only, deletes rejected
downloads), and the two standalone licensing tests. Its baseline is an ancestor of master and the
only intervening commit touches none of these paths.

**Reject `cap02-active-client` wholesale.** It reverts plugin identity from `international` back to
the dead `translate` plugin across 10 files, adds `callback_secret` to `Settings::get_all()` while
deleting the test that forbade exactly that, swaps a fail-closed webhook secret getter for one that
mints and can throw, drops `ExceptionPayload::rules()` (breaking the structured-context contract at
8+ call sites), and treats HTTP 404 as cancellation success — so cancels silently no-op while the
backend keeps spending credits. It also never meets the CAP-02 goal: content/post dedup is still
read-then-insert with no lock or unique index.

**Reject `wt/land-cap02` wholesale.** The corruption is mechanical line collapse; token-normalized
it is *closer to master* than the ask-gpt carrier and its one real idea is a strict subset.

**Tests that prove nothing — never rely on them:** `Cap02ActiveClientContractStandaloneTest.php` is
a `str_contains()`-on-source tautology that even encodes the cancel-verb contradiction as a
requirement; `TranslateControllerPersistenceStandaloneTest` asserts the plugin sends what the plugin
sends.

**Blocking external unknown for cancellation work:** what `api.press.zone` serves today — the
`X-Plugin` header value, `DELETE /v1/jobs/{id}` vs `POST /v1/jobs/{id}/cancel`, wrapped vs flat
responses, and whether `/updates/verify` exists. Cancellation/idempotency is NEW work re-derived on
master behind a schema migration, never a harvest.

## Legacy recovery audit — CloudPanel and license-only (2026-08-11)

Audience: AI coding agents first. Carriers live under `.claude/worktrees/`, NOT `.worktrees/`.

**`Migration007RemoveConfigurableApiUrl.php`: REJECT as already done.** Master ships
`Migration007RemoveLegacyApiCredentials.php`, deleting a strict superset of options and using
master's `protected string $version` form. Slot 007 is occupied — landing the carrier file is a hard
class/version collision. The fixed API base is already current behavior: `IPZ_API_BASE_URL` in
`Integration/TranslationAPI.php`, `Translation/Settings.php`, and `Licensing/LicenseClient.php`,
regression-covered by `tests/unit/LicenseClientApiBaseTest.php`.

**Accept (absent from master, host-agnostic):** license-only demo backend services and their Jest
suites; the loopback E2E journey fixture harness under `tests/e2e/fixture/`; the
`CLIENT-PRESENTATION-JOURNEY-SPEC.md` acceptance contract; plugin-side license/integrity
regressions; and the CloudPanel lane's worker-lifecycle/heartbeat/webhook-durability tests. Note
`nginx-production.conf` names a compose *service*, not an environment — the fixture binds loopback
18080/18081 and contains zero cloudpanel/dev1 references.

**Reimplement, never copy:** all seven license-only Prisma migrations predate master's tip
`20260805000000_drop_translation_exceptions` and cannot apply in order — re-timestamp after it and
re-derive `schema.prisma` from master's. Every carrier test was authored against pre-merge-base
sources; reconcile imports/signatures before running.

**Reject:** superseded migrations (master's `20260803000000_add_webhook_outbox` and
`20260801090000_link_license_owner` supersede carrier equivalents); all build/generated output;
`verify-api-routes.php` (configurable-routing verifier with no place under a fixed base); secrets
and state files; the untracked `docs/user_journeys/` and `docs/ui_matrix/` copies already fully in
master; and CloudPanel deployment as architecture.

**Cross-carrier authority:** for the four paths absent from master in both carriers, the license-only
lane is authoritative except `__tests__/unit/routes/webhooks.test.ts`, where the CloudPanel version
(701 lines) is authoritative and needs a manual merge.

**Real conflict seams** (modified in both carriers *and* by master): `prisma/schema.prisma`,
`routes/onboarding.ts`, `middleware/auth.ts`, `routes/account.ts`, `routes/webhooks.ts`,
`utils/webhookIdempotency.ts`, `services/creditService.ts`. Port hunks; never take carrier versions
wholesale.

**Stash dispositions:** `stash-03` is subsumed by the CloudPanel snapshot (identical parent, strict
superset) — keep as provenance, harvest from the snapshot. `wt22` and `wt25` are earlier captures
whose deltas are deletions only; superseded. `stash@{0}` is regenerable bundle output; `stash@{3}`
and `stash@{4}` sit on long-superseded master tips. `stash@{1}` is unattributed and needs its own
pass — retain.

**Landing order:** fixture harness and acceptance spec first (self-contained, unblock verification),
then re-timestamped migrations, then services reconciled against master's `middleware/auth.ts` —
reusing `requireNonProduction` rather than adding a second dev gate.

## OAuth parity audit (2026-08-11)

Audience: AI coding agents first. Zero committed merge conflicts here means *mergeable and broken*,
NEVER ready-to-land.

**Confirmed contract break.** The Cloudflare Workers backend is in-repo at
`press-zone-backend/.product-work/backend`. Its `api/src/routes/oauth.ts:164` calls
`readRequiredString(fields, 'account_id')` and returns `null` — a 400 `OAUTH_INVALID` — when it is
absent. The carrier's `Admin/LicensingController.php:180` posts exactly `code`, `code_verifier`,
`client_id`, and `redirect_uri`. Verified on both heads: **OAuth token exchange 400s at connect**,
so MR-05 and MR-11 fail at step one.

**Fix the seam, never revert.** The backend already binds `tenantId` into `oauthCodes` at authorize
time and compares it during exchange, so it MUST derive the tenant from there. A client-supplied
`account_id` is an unverified claim; dropping it plugin-side was correct. Required RED test: the
exchange succeeds with no client-supplied tenant id.

**Other verified backend facts:** the CF backend exposes NO license surface, so `LicenseClient`'s
`/v1/international/license/*` and `/updates/check` are dead endpoints; neither side has `/v1/jobs`
or an HMAC callback, so MR-08 has nothing to test; `resolveApiKeyPrincipal` returns null unless the
user has exactly one active membership, so anyone in two accounts can never authenticate by API key.
The MR-05 property text names `resolveApiKeyPrincipal` while the code persists an `oauthTokenId`
(`kind: 'oauth'`) — the doc's mechanism is wrong though its behavioral assertion holds.

**Doc defect:** `expert.md` defines NO release gates despite `CLAUDE.md` claiming it does. The real
gate is `.dev-config/hooks/pre-commit` (eslint plus fail-closed phpcs/phpstan baseline).

## Repository secret exposure (2026-08-11)

`press-zone-backend/Docs/` tracked a Cloudflare private key, PayPal API credentials, and an SSL
certificate in plaintext on `master` since 2026-03-08. The repository is private, so this was not
public exposure, but the files were in every clone and in full history.

Owner decision: remove from HEAD now, rotate later. Executed — files untracked in `c80b95ce8`,
`Docs/`, `*private key*`, and `*paypal.api*` added to `press-zone-backend/.gitignore`, and the
ignore rule proven to block re-adding. Originals preserved outside the repository at
`/home/user/.local/state/presszone-secrets-preserved` (mode 0600) so rotation is still possible.

STILL OUTSTANDING, and the ignore rule does NOT fix it: the credentials remain valid and remain
recoverable from history (2 commits). Rotation at Cloudflare and PayPal is owner-only work; a
`git-filter-repo` purge plus coordinated force-push should follow rotation, never precede it.

## Contradictions requiring repair

- CAP-02 plan says no implementation changed; current lane contains licensing/tests and rejected JobSender files.
- Localhost original design permits CGNAT; 2026-08-11 amendment requires loopback-only and disposable candidate site/database.
- Manual-lock and multilingual plans name dev1; standing policy prohibits dev1, production, staging, public, LAN, and non-loopback test targets. Replace those acceptance steps with localhost-only verification before implementation continues.
- Historical landing order and conflict counts in T are stale; this ledger supersedes them.
