Skip to content

docs(phase4g): triple-doc bump — mark 4g ✅ DONE + flag PR 4b defense-infra as next#81

Merged
dackclup merged 1 commit into
mainfrom
docs/phase4g-doc-bump
May 15, 2026
Merged

docs(phase4g): triple-doc bump — mark 4g ✅ DONE + flag PR 4b defense-infra as next#81
dackclup merged 1 commit into
mainfrom
docs/phase4g-doc-bump

Conversation

@dackclup
Copy link
Copy Markdown
Owner

Summary

Brings CLAUDE.md / PHASE_STATUS.md / SKILL.md / WORKFLOW.md back into lockstep after PR #79 (4g — 8-K Tier-2 re-enable, schema 0.6.0 → 0.7.0) and PR #80 (UI hero polish + additive price_change_1d_pct field, schema 0.7.0 → 0.7.1). Triggered by a session-start misread: I read "Currently at v0.6.0-phase3d. Next: PR 3e" from CLAUDE.md (line 89) and reported that as the live state — when in fact 3e shipped at v1.0.0 on 2026-05-14 and 4a–4g have all merged since.

Stale → fresh diff

File Was Now
CLAUDE.md §Phase status "Currently at v0.6.0-phase3d. Next: PR 3e" v1.0 shipped + 4a-4g merged + next is PR 4b defense-infra
CLAUDE.md §Layout "3 active vetoes" 5 active vetoes
PHASE_STATUS.md table row "4a-4f merged; 4g next" "4a-4g merged; PR 4b defense-infra next"
PHASE_STATUS.md "Next deliverable" block "PR 4g — re-enable 8-K Tier-2" 4g ✅ DONE bullet + new "PR 4b — defense-infrastructure" block
SKILL.md line 419 4 active + 1 deferred 5 active + 0 deferred
SKILL.md schema table stops at v1.0.0 adds 0.7.0-phase4g + 0.7.1-phase4g rows
WORKFLOW.md SEC roadmap 8-K Items 4.01/4.02 🟡 deferred ✅ active (PR #79)
WORKFLOW.md Phase 4 blocker "[ ] FP rate ≤ 5% at 4g gate" "[x] satisfied at 1.0%; 4g shipped via #79"

Current state (the canonical claim across all four docs after this PR)

Not touched

  • Historical-snapshot paragraphs in PHASE_STATUS.md (PR 4f verification block, v1.0.0 final scorecard, Phase 3d sub-PR block) — pinned-in-time per phase-status-bump/SKILL.md "do not archive completed phases" rule.
  • compute/scoring/risk_overlay.py line-27 docstring that still says non_reliance_filing is "currently deferred" — code comment, not a status doc; flagged for a future code-cleanup commit (or rolled into PR 4b).

Test plan

  • No code changes (docs only); no test impact
  • grep "Currently at v0.6.0" returns nothing
  • grep "3 active veto" only matches historical snapshots
  • grep "deferred behind feature flag" only matches PR 3d / v1.0 historical paragraphs

https://claude.ai/code/session_015649aRyi2bvciQYZVNACd2


Generated by Claude Code

…infra as next deliverable

User: "มีอะไรผิดพลาดและเราไม่ได้อยู่ 3e เช็คใหม่อีกที" → "ก่อนอื่น
แก้ใขก่อนเพื่อไม่ให้อ่านผิดอีก". The previous session misread
CLAUDE.md "Currently at v0.6.0-phase3d. Next: PR 3e" as the live
state — when in fact 3e shipped at v1.0.0 on 2026-05-14 and Phase 4
has since shipped 4a/4b/4c/4d/4e/4f/4g + Audit #6. This commit
brings the four cross-referenced status docs back into lockstep so
future sessions read the actual state.

## Stale-state inventory (cause of the misread)

| File | Was | Now |
|---|---|---|
| `CLAUDE.md` §Phase status (line 89) | "Currently at v0.6.0-phase3d. Next: PR 3e" | v1.0 shipped + 4a-4g merged + next is PR 4b defense-infra |
| `CLAUDE.md` §Layout (line 25) | "3 active vetoes" | 5 active vetoes |
| `PHASE_STATUS.md` table row | "4a-4f merged; 4g next" | "4a-4g merged; 4b defense-infra next" |
| `PHASE_STATUS.md` "Next deliverable" block (line 136-142) | "PR 4g — re-enable 8-K Tier-2" | 4g ✅ DONE bullet + new "PR 4b — defense-infrastructure" block |
| `SKILL.md` line 419 ("4 active vetoes...one deferred") | 4 active + 1 deferred | 5 active + 0 deferred (`non_reliance_filing` re-enabled in PR #79) |
| `SKILL.md` schema-version table | stops at v1.0.0 (`0.6.0-phase3d`) | adds `0.7.0-phase4g` (PR #79) + `0.7.1-phase4g` (additive `price_change_1d_pct`) rows |
| `WORKFLOW.md` SEC filing roadmap (line 70-71) | 8-K Items 4.01/4.02 🟡 deferred | ✅ active (PR #79) |
| `WORKFLOW.md` Phase 4 blocker (line 583) | "[ ] Going-concern FP rate ≤ 5% at PR 4g gate" | "[x] satisfied at 1.0% (PR 4f) — 4g shipped via PR #79" |

## What is "current state" now (the single source of truth across the four docs)

- **Tag**: v1.0.0 shipped 2026-05-14
- **Phase 4 progress**: 4a / 4b (`_avg_3y_roe` fix) / 4c+4c.1+4c.2+4c.3 / 4d / 4e / 4f / 4g all merged (2026-05-14 → 2026-05-15)
- **Production schema**: `0.7.0-phase4g` (PR #79 merged on commit `c35c6d40`)
- **SCHEMA_VERSION constant**: `0.7.1-phase4g` (additive `price_change_1d_pct` field via PR #80 squash; production flips on next weekly compute)
- **Active vetoes**: 5 (altman_distress, sloan_accruals_top_decile, net_issuance_top_decile, data_quality_input_corruption, non_reliance_filing)
- **Tier-2 annotate flags**: 2 active (`going_concern_disclosure` + `auditor_change`); none deferred
- **Tier-3 annotate flags**: 2 (`beneish_high`, `dechow_high`)
- **Next deliverable**: PR 4b defense-infrastructure (issue #75) — §1 cross-source validator + §2 PBO/DSR hard gate + §3 IC-decay monitor (~820 LOC, ~5.5 days). Then 4h/4i/4j/4k OSAP/JKP/Qlib/IPCA → tag v1.1.0-phase4
- **5 open Phase 4+ issues**: #7 (Sloan sector-relative) · #15 (fundamentals throttling) · #41 (Next.js 14→16 CVEs) · #67 (Damodaran CoE Phase 5+) · #75 (PR 4b defense-infra)

## Untouched (preserved historical snapshots)

PHASE_STATUS.md verification snapshots for PR 4f (line 117-134) and
v1.0.0 final scorecard (line 314-322) are pinned-in-time — kept as
historical record per `phase-status-bump/SKILL.md` "do not archive
completed phases" rule. WORKFLOW.md Phase 3 acceptance criteria
(line 412) likewise kept as v1.0 snapshot.

## Verification

- No code changes (docs only)
- `grep "Currently at v0.6.0"` returns nothing
- `grep "3 active veto"` only matches historical snapshots
- `grep "deferred behind feature flag"` only matches PR 3d / v1.0
  historical paragraphs

https://claude.ai/code/session_015649aRyi2bvciQYZVNACd2
@vercel
Copy link
Copy Markdown

vercel Bot commented May 15, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
quantrank Ready Ready Preview, Comment May 15, 2026 8:48pm

@dackclup dackclup marked this pull request as ready for review May 15, 2026 20:48
@dackclup dackclup merged commit c9b6282 into main May 15, 2026
4 checks passed
@dackclup dackclup deleted the docs/phase4g-doc-bump branch May 15, 2026 20:49
dackclup added a commit that referenced this pull request May 16, 2026
… only §3 polish remains (#87)

During run #45 verification (defense-scorecard skill) the
`cross_source_disagreement` flag surfaced 23 stocks in production
— evidence that PR 4b §1 had already shipped. A `git log` confirms
**PR #60 ("feat(defense): cross-source validator + PBO/DSR + IC-
decay infra (PR 4b)") merged on 2026-05-14**, before v1.0.0.
Issue #75 was filed on 2026-05-15 (one day after #60 merged) to
track the remaining acceptance criteria — but PR #81 and PR #86
mistakenly treated "PR 4b" as fully not-yet-started.

This commit re-aligns the triple-doc with the actual state.

## What PR #60 actually shipped (already in production)

| Sub-section | Status | Evidence |
|---|---|---|
| **§1 Cross-source validator** | ✅ DONE | `compute/ingest/cross_source.py` exists; wired in `compute/main.py:979-988`; run #45 shows 23/502 stocks (4.6%) flagging `cross_source_disagreement` annotate |
| **§2 PBO/DSR library** | ✅ DONE | `compute/validation/pbo_dsr.py` exists with CSCV + DSR + Beasley-Springer-Moro inverse normal CDF; `factor_passes_gates()` entry point ready |
| **§3 IC-decay monitor** | 🟡 PARTIAL | `compute/validation/ic_decay.py` exists; **`decay_report.json` writer NOT wired** + no UI transparency surface — exactly the 2 unchecked acceptance criteria on issue #75 |

## Real "next deliverable" — PR 4b §3 polish (~2-3 days)

1. **Writer wiring** — call `ic_decay.run()` from `compute/main.py`
   after pillar normalization; write per-pillar decay table to
   `frontend/public/data/decay_report.json` via new writer in
   `compute/output/writer.py` (atomic temp → rename pattern).
2. **UI transparency surface** — new `DecayReportCard.tsx` on
   the stock detail page below `PillarRadarChart`. Reads
   `decay_report.json` client-side (fail-soft if absent), shows
   8-pillar 12m + 36m IC trend + decay-alert badges per pillar.

Effort: ~150 LOC writer + UI + ~80 LOC tests.

After §3 polish ships: → 4h/4i/4j/4k factor integrations (each
gated by the now-complete PBO/DSR harness) → tag v1.1.0-phase4.

## File-by-file changes

| File | Change |
|---|---|
| `CLAUDE.md` | §Phase status — "Next deliverable" reframed as PR 4b §3 polish only. Production verification numbers cited (23 stocks, 4.6%). Issue #75 description updated to "remaining items: writer + UI surface". |
| `PHASE_STATUS.md` | Phase 4 table row reflects PR 4b §1+§2 merged via PR #60. The long "Next deliverable: PR 4b — defense-infrastructure" block is replaced by a 3-row sub-section status table (§1 ✅ / §2 ✅ / §3 🟡) + a tighter "PR 4b §3 polish" next-deliverable scope description. |
| `WORKFLOW.md` | Phase 4 Acceptance Criteria — 3 cross-source / PBO-DSR / IC-decay checkboxes flipped from `[ ]` to `[x]` (with footnotes on PR #60 + run #45 evidence) for §1+§2; §3 stays `[ ]` with the remaining-items breakdown. |

## Doc audit trail

This is the second triple-doc fix this week:
- PR #81: marked 4g ✅ DONE (correct)
- PR #86: added Phase 4.5 roadmap + named PR 4b as next (WRONG —
  this commit corrects)
- This PR: PR 4b §1+§2 ✅ DONE; §3 polish is the real next

The cause of the PR #81/#86 error: PR #60 merged 2026-05-14 used
the literal title "PR 4b" — but the `PHASE_STATUS.md` PR-label
slot "4b" was already taken by the `_avg_3y_roe` fix (different
content, same letter). Two unrelated PRs both calling themselves
"PR 4b" created the confusion. Going forward we should disambiguate
by always referring to it as "PR 4b defense-infrastructure" or
"issue #75" when meaning the cross-source/PBO/IC-decay work.

## Verification

- No code changes; docs only
- `grep "PR 4b defense-infrastructure (issue #75) next"` — returns 0 hits
- `grep "PR 4b §3 polish"` — appears in CLAUDE.md + PHASE_STATUS.md (the new wording)
- WORKFLOW.md Phase 4 acceptance checklist: 3 items flipped to [x] with evidence

https://claude.ai/code/session_015649aRyi2bvciQYZVNACd2

Co-authored-by: Claude <noreply@anthropic.com>
dackclup added a commit that referenced this pull request May 16, 2026
#92)

Phase 4.5a manipulation-defense quick-wins shipped 2026-05-16 across
3 sub-PRs (#89/#90/#91). Production verified on run #47 (commit
`8cdf4886`). This commit bumps the triple-doc lockstep so future
sessions read the actual current state instead of the in-progress
plan.

## What shipped (per-sub-PR)

| Sub-PR | PR | Delivered | Production effect |
|---|---|---|---|
| **4.5a.1** | #89 | Sloan accruals top-decile within sector; `SLOAN_MIN_POPULATION_SECTOR=15` floor; cross-sectional fallback for under-floor sectors. Closes issue #7. | Financials Sloan rate 21.3% → 11.7%. Cross-sector spread 7.7× → 1.4×. Total Sloan flagged 51 → 56. |
| **4.5a.2** | #90 | `beneish_manipulation_veto` active-veto path at M > −1.78 (Beneish 1999 Table 4 PPV crossover). | 11 new vetoed tickers: SMCI · WAT · PODD · WDC · NVDA · CAT · PLTR · SNDK · BG · STX · LLY. |
| **4.5a.3** | #91 | `dechow_manipulation_veto` active-veto path at F > 3.0 (Dechow 2011 Table 7 4× baseline crossover) + `manipulation_triple_flag` joint-gate annotate. | 1 Dechow veto (SMCI F=6.65); 2 triple_flag tickers (SMCI + WAT). |

## End-state defense layer

- **Active vetoes**: 5 → **7** (added `beneish_manipulation_veto`,
  `dechow_manipulation_veto`)
- **Annotate flags**: 4 → **5** (added `manipulation_triple_flag`)
- **Tier-3 forensic**: still 2 (Beneish + Dechow operating at two
  thresholds each — annotate + veto)
- **Reason taxonomy**: 24 → **29 stable identifiers**

No schema delta — new flag IDs are strings in the existing
`risk_flags: list[str]` and `valuation_warnings: list[str]`
arrays. `SCHEMA_VERSION` stays `0.7.1-phase4g`.

## Triple-doc lockstep changes

| File | Change |
|---|---|
| `CLAUDE.md` | §Phase status — "Next deliverable" reframed from "4.5a.1 sector-relative Sloan" to "4.5b disclosure-driven catches". Defense layer count "9 → 18 target" updated to "9 → 11 after 4.5a; target 18 after 4.5f". Issue #7 marked ✅ closed by 4.5a.1. |
| `PHASE_STATUS.md` | Phase Overview table: Phase 4.5 row flipped ⚪ → 🟡 IN PROGRESS with the 4.5a wave landed; duplicate ⚪ row removed. "Phase 4.5 plan" section §4.5a replaced "1-2 weeks, +2 active veto + 1 badge" header with "✅ DONE 2026-05-16" + a results table showing per-sub-PR production effect. Original plan text preserved below the results table for audit. |
| `WORKFLOW.md` | Phase 4.5 §Tasks §4.5a — all 4 checkboxes flipped [ ] → [x] with per-sub-PR PR-number citations (PR #89 / #90 / #91), LOC counts, test deltas, production verification numbers. |

## Audit trail

This is the 4th doc-correction PR in the post-v1.0 cleanup pattern,
this time legitimate (the work actually shipped). Earlier ones in
this session were correcting drift between intent and state:

- PR #81 — 4g status correct (factual)
- PR #86 — added Phase 4.5 roadmap (planning)
- PR #87 — corrected "PR 4b next" → "§3 polish next" (was wrong)
- PR #88 — corrected "§3 polish next" → "deferred to Phase 5" (was wrong)
- **This PR** — 4.5a wave ✅ DONE (factual, not drift-correction)

## Verification

- No code changes; docs only
- `grep "4.5a.1" CLAUDE.md PHASE_STATUS.md WORKFLOW.md` returns
  only DONE/closed references in active sections
- `grep "Next deliverable.*4.5a"` returns 0 hits (all moved to 4.5b)
- `grep "9 → 11"` appears in CLAUDE.md (new defense layer count)

https://claude.ai/code/session_015649aRyi2bvciQYZVNACd2

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants