Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 23 additions & 8 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -493,23 +493,38 @@ whitespace / single-line fixes do not trigger.

## Phase status

Current schema **`0.10.7-phase4.6`** · defense layer **33 declared
boolean flags** (7 active vetoes + 26 annotates + reserved slots; 27
currently emit until next cron exercises PRs #264 + #265 + Form-4
cluster revert). Plus 5 numerical guards + `manipulation_index`
rollup. Latest release tag [**`v1.4.0-phase4.6`**](https://github.com/dackclup/quantrank/releases/tag/v1.4.0-phase4.6)
Current schema **`0.10.8-phase4.6`** · defense layer **33 declared
boolean flags** (7 active vetoes + 26 annotates + reserved slots; ~27
currently emit; `USE_SECTOR_COE = True` post-PR #294 flip). Plus 5
numerical guards + `manipulation_index` rollup. Latest release tag
[**`v1.4.0-phase4.6`**](https://github.com/dackclup/quantrank/releases/tag/v1.4.0-phase4.6)
(2026-05-27, `bbca9cac`) — Phase 4.6 honest re-validation harness
(universe survivorship-bias fix per Hou-Xue-Zhang 2020 + rankings.json
time-series loader + forward-return loader + per-pillar Spearman IC
+ manipulation-index distribution shift + honest-baseline CLI with
McLean-Pontiff 2016 32% post-publication decay banner). Prior tag
[**`v1.3.0-phase4.5e`**](https://github.com/dackclup/quantrank/releases/tag/v1.3.0-phase4.5e)
McLean-Pontiff 2016 32% post-publication decay banner). Post-tag
production patches: PR #292 schema PATCH `0.10.7 → 0.10.8-phase4.6`
(Rule 18 disambiguator `multi_class_per_class_attempt_count` for
the GOOG/GOOGL XBRL concept-name omission fix); PR #293 Site-2 DQIC
ceiling retirement (NVR FP, methodology-scientist Option C); PR #294
sector-CoE flip (Issue #67 `USE_SECTOR_COE = True`, Damodaran 2019
Ch. 8.4 11-sector Ke, `value_trap_risk` 132 → 109 cohort drop).
Prior tag [**`v1.3.0-phase4.5e`**](https://github.com/dackclup/quantrank/releases/tag/v1.3.0-phase4.5e)
(2026-05-26, `5db3b978`) — Phase 4.5e Form-4 insider-clustering
ladder closure + LedgerCraft frontend reskin (defense layer 32 → 33;
PR #264 `multi_class_aggregate_shares_suspected` + PR #265 DQIC
site-2 rename `valuation_output_anomalous`).

**Recently merged** (PR #264 → PR #285, 2026-05-26 → 2026-05-27):
**Recently merged** (PR #286 → PR #294, 2026-05-28 — 6 PRs same day post-v1.4.0):
- PR #294 `0ddb6b81` — feat(valuation): Issue #67 — flip `USE_SECTOR_COE = True` (Damodaran 11-sector Ke)
- PR #293 `95e638bf` — fix(valuation): Issue #289 — retire Site-2 DQIC ceiling (NVR FP, methodology Option C)
- PR #292 `e9aaab31` — fix(ingest): Issue #288 — GOOG/GOOGL XBRL concept-name omission (schema `0.10.7 → 0.10.8-phase4.6`)
- PR #291 `cb9114bb` — docs(agents): AGENTS.md substance refresh (cron #51 → #69 pointer; 11 open-issues list)
- PR #290 `dea8e3ad` — chore(cleanup): post-cron-#69 — BK orphan removal + 3 doc drifts
- PR #286 `27361047` — chore(docs): housekeeping PR-B — drain INFLIGHT + bump pointers post-v1.4.0
- (3 issues filed: #287 / #288 / #289; 4 comments posted on #41 / #115 / #130 / #137)

**Earlier** (PR #264 → PR #285, 2026-05-26 → 2026-05-27):
- PR #285 `8f373758` — docs(release): codify mobile-only operator convention for tag releases
- PR #284 `a820caee` — fix(test): manipulation_distribution smoke resilient to shallow clones (CI `actions/checkout@v6` fetch-depth=1)
- PR #283 `bbca9cac` — chore(release): **v1.4.0-phase4.6** — Honest re-validation harness
Expand Down
20 changes: 15 additions & 5 deletions PHASE_STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,27 @@

| Field | Value |
|---|---|
| Schema | **`0.10.7-phase4.6`** (PR #283 release tag bumped through PRs #269 GOOG/GOOGL per-class XBRL fix `0.10.5 → 0.10.6` + Phase 4.6 Metadata additions `0.10.6 → 0.10.7-phase4.6`) |
| Defense layer | **33 declared boolean flags** (7 active vetoes + 26 annotates + reserved slots; 27 currently emit in production until next cron exercises PR #264 + #265 + Form-4 cluster revert) · plus 5 numerical guards + `manipulation_index` rollup |
| Schema | **`0.10.8-phase4.6`** (PR #292 PATCH bump 2026-05-28 — Rule 18 disambiguator `Metadata.multi_class_per_class_attempt_count` for the GOOG/GOOGL XBRL concept-name omission fix; supersedes `0.10.7-phase4.6` PR #283 release) |
| Defense layer | **33 declared boolean flags** (7 active vetoes + 26 annotates + reserved slots; ~27 currently emit; `USE_SECTOR_COE = True` post-PR #294 flip) · plus 5 numerical guards + `manipulation_index` rollup |
| Active vetoes | **7** — `altman_distress` · `sloan_accruals_top_decile` · `net_issuance_top_decile` · `non_reliance_filing` · `beneish_manipulation_veto` · `dechow_manipulation_veto` · `data_quality_input_corruption` |
| Latest release tag | [**`v1.4.0-phase4.6`**](https://github.com/dackclup/quantrank/releases/tag/v1.4.0-phase4.6) — 2026-05-27 at `bbca9cac` (Phase 4.6 honest re-validation harness — survivorship-bias fix per Hou-Xue-Zhang 2020 + rankings.json time-series loader + forward-return loader + per-pillar Spearman IC + manipulation-index distribution shift + honest-baseline CLI; release notes in `docs/release-notes/v1.4.0-phase4.6.md`) |
| Latest release tag | [**`v1.4.0-phase4.6`**](https://github.com/dackclup/quantrank/releases/tag/v1.4.0-phase4.6) — 2026-05-27 at `bbca9cac` (Phase 4.6 honest re-validation harness) |
| Post-tag production patches | PR #292 (`e9aaab31`, schema `0.10.7 → 0.10.8-phase4.6`, GOOG/GOOGL XBRL fix) · PR #293 (`95e638bf`, Site-2 DQIC retirement, NVR FP) · PR #294 (`0ddb6b81`, sector-CoE flip `USE_SECTOR_COE = True`, Issue #67 closure) |
| Prior release tag | [**`v1.3.0-phase4.5e`**](https://github.com/dackclup/quantrank/releases/tag/v1.3.0-phase4.5e) — 2026-05-26 at `5db3b978` (Phase 4.5e Form-4 cluster + LedgerCraft reskin; defense layer headline 32 → 33) |
| Production run | `559c5269` (2026-05-27 cron, post-PR #285 main HEAD) |
| Production run | `0ad1d574` (2026-05-28 cron #69, post-PR #290 main HEAD; sector-CoE flip + #292 + #293 land in cron #70 Mon-Fri 22:00 UTC) |
| Universe | 502 stocks (S&P 500 minus 1 delisting) |
| Skill inventory | **45** invocation-triggerable + phase planning docs |
| Subagent inventory | **18** project-specific in 4 tiers: **Tier 1 Core** (`quantrank-reviewer` · `schema-sentinel` · `defense-layer-auditor` · `edgar-debugger` · `stock-detail-auditor`) · **Tier 2 Lifecycle** (`security-reviewer` · `frontend-design-reviewer` · `vercel-preview-auditor` · `release-captain` · `phase-coordinator`) · **Tier 3 Specialized** (`test-engineer` · `methodology-scientist` · `literature-searcher` · `performance-engineer` · `dependency-auditor`) · **Tier 4 Operations** (`docs-reviewer` · `ci-triage-engineer` · `incident-commander`) |

**Recently merged** (PR #264 → PR #285, 2026-05-26 → 2026-05-27):
**Recently merged** (PR #286 → PR #294, 2026-05-28; 6 PRs landed same day post-v1.4.0 release):
- PR #294 `0ddb6b81` — feat(valuation): Issue #67 — flip `USE_SECTOR_COE = True` (Damodaran 2019 Ch. 8.4 11-sector Ke; methodology-scientist Mode B APPROVED; `value_trap_risk` 132 → 109 cohort drop, within target [80, 110] band)
- PR #293 `95e638bf` — fix(valuation): Issue #289 — retire Site-2 DQIC ceiling (NVR FP; methodology-scientist Option C; Site-1 + Defense #4 `extreme_*_estimate` + Issue #177 Huber-breakdown layer cover the remaining corruption + breakdown cases)
- PR #292 `e9aaab31` — fix(ingest): Issue #288 — GOOG/GOOGL XBRL concept-name omission (`market_cap` 2.2× inflated since PR #269; schema `0.10.7 → 0.10.8-phase4.6` for Rule 18 disambiguator)
- PR #291 `cb9114bb` — docs(agents): AGENTS.md substance refresh (production-verified run pointer cron #51 → cron #69; open-issues list 4 → 11 entries)
- PR #290 `dea8e3ad` — chore(cleanup): post-cron-#69 — BK orphan removal + 3 doc drifts (security-reviewer W1+W2 + edgartools 2.30 → 5.31)
- PR #286 `27361047` — chore(docs): housekeeping PR-B — drain INFLIGHT + bump pointers post-v1.4.0
- (3 issues filed: #287 FORM4 revert + durable 5-loop timeout · #288 GOOG/GOOGL XBRL · #289 NVR DQIC; 4 comments posted on #41/#115/#130/#137)

**Earlier** (PR #264 → PR #285, 2026-05-26 → 2026-05-27):
- PR #285 `8f373758` — docs(release): codify mobile-only operator convention for tag releases (CLAUDE.md §Gotchas + release-tag SKILL.md + release-captain agent)
- PR #284 `a820caee` — fix(test): `test_compute_shift_live_repo_recent_window` resilient to shallow clones (CI `actions/checkout@v6` fetch-depth=1 default)
- PR #283 `bbca9cac` — chore(release): **v1.4.0-phase4.6** — Honest re-validation harness (`pyproject.toml` 1.3.0 → 1.4.0 + release notes)
Expand Down
45 changes: 39 additions & 6 deletions PHASE_STATUS_INFLIGHT.md
Original file line number Diff line number Diff line change
Expand Up @@ -2145,7 +2145,7 @@ PHASE_STATUS_INFLIGHT.md side-file satisfies §Conventions "ship with every PR"

---

## PR (this PR) — Housekeeping PR-B: drain merged INFLIGHT entries + bump pointers post-v1.4.0 release (in flight, 2026-05-28)
## PR #286 — Housekeeping PR-B: drain merged INFLIGHT entries + bump pointers post-v1.4.0 release (merged 2026-05-28, `27361047`)

Phase B (post-v1.4.0-tag housekeeping) PR. Cuts no code; pure doc-pointer + INFLIGHT.md maintenance — addresses the doc drift that accumulated across PRs #264-#285 (13 PRs landed since the last housekeeping in PR #267).

Expand All @@ -2172,7 +2172,7 @@ CLAUDE.md substance touched (pointer block + Recently merged list refresh — bo

---

## PR (this PR) — Cleanup post cron #69: BK orphan removal + 3 doc drifts (in flight, 2026-05-28)
## PR #290 — Cleanup post cron #69: BK orphan removal + 3 doc drifts (merged 2026-05-28, `dea8e3ad`)

Post-cron-#69 cleanup bundle. Cron run #69 (workflow_dispatch by user 2026-05-28 ~01:00 UTC, landed `233117ac chore: update rankings 2026-05-28` at `27361047` PR #286 merge SHA) surfaced 3 findings via `defense-layer-auditor` Section A-J + `stock-detail-auditor` deterministic prefilter + LLM verdict pass. 2 findings filed as issues (deferred to scoped follow-up sessions); 1 + 3 doc drifts batched into this PR.

Expand Down Expand Up @@ -2209,7 +2209,7 @@ PHASE_STATUS_INFLIGHT.md side-file satisfies §Conventions "ship with every PR"

---

## PR (this PR) — AGENTS.md substance refresh: production-verified run pointer + open-issues list (in flight, 2026-05-28)
## PR #291 — AGENTS.md substance refresh: production-verified run pointer + open-issues list (merged 2026-05-28, `cb9114bb`)

Second cleanup PR same day. PR #286 (housekeeping) opted to defer the AGENTS.md substance update under the `pointer-to-CLAUDE.md` delegation pattern; PR #290 (post-cron cleanup) noted the deferred AGENTS.md items but kept scope tight. This PR closes both deferred items.

Expand Down Expand Up @@ -2253,7 +2253,7 @@ PHASE_STATUS_INFLIGHT.md side-file satisfies §Conventions "ship with every PR"

---

## PR (this PR) — Issue #288 fix: GOOG/GOOGL XBRL concept-name omission (in flight, 2026-05-28)
## PR #292 — Issue #288 fix: GOOG/GOOGL XBRL concept-name omission (merged 2026-05-28, `e9aaab31`)

Closes Issue #288 — `multi_class_per_class_override_count = 0` on every production cron since PR #269 landed (2026-05-26). Both GOOG and GOOGL render inflated `market_cap` (~$4.66T / $4.71T) instead of correct per-class values (~$2.09T / $2.59T).

Expand Down Expand Up @@ -2299,7 +2299,7 @@ PHASE_STATUS_INFLIGHT.md side-file satisfies §Conventions "ship with every PR"

---

## PR (this PR) — Issue #289 fix: retire Site-2 DQIC ceiling per Option C (in flight, 2026-05-28)
## PR #293 — Issue #289 fix: retire Site-2 DQIC ceiling per Option C (merged 2026-05-28, `95e638bf`)

Closes Issue #289 — NVR `/stock/NVR` rendered empty fair-price section despite legitimate inputs ($458 EPS / $6,098 price / ~2.7M shares / `risk_flags: []`). Site-2 output-level ceiling (`FAIR_PRICE_DATA_QUALITY_CEILING = $10,000` in `compute/config.py`) tripped on `multiples_pe ≈ 22× × $458.86 ≈ $10,094` and nulled all 6 valuation methods.

Expand Down Expand Up @@ -2355,7 +2355,7 @@ PHASE_STATUS_INFLIGHT.md side-file satisfies §Conventions "ship with every PR"

---

## PR (this PR) — Issue #67 sector-CoE flip: `USE_SECTOR_COE = True` (in flight, 2026-05-28)
## PR #294 — Issue #67 sector-CoE flip: `USE_SECTOR_COE = True` (merged 2026-05-28, `0ddb6b81`)

Closes Issue #67 — flips `USE_SECTOR_COE` from `False` → `True` per methodology-scientist Mode B verdict 2026-05-28 + cron #69 empirical confirmation. Consumes the data-collection module landed in PR #204 (2026-05-22, Damodaran 2019 Ch. 8.4 + NYU January 2025 betas — LITERATURE-ANCHORED across all 11 GICS sectors).

Expand Down Expand Up @@ -2405,3 +2405,36 @@ Closes Issue #67 — flips `USE_SECTOR_COE` from `False` → `True` per methodol
PHASE_STATUS_INFLIGHT.md side-file satisfies §Conventions "ship with every PR" lockstep per PR #237 convention. CLAUDE.md + AGENTS.md substance untouched this PR — the methodology flip IS substantive but Q3 cohort audit (issue #130) is the canonical narrative venue, where the pre-prep checklist comment already documents the gating decision.

---

## PR (this PR) — Post-session housekeeping 2026-05-28: drain 6 INFLIGHT markers + bump pointers (in flight, 2026-05-28)

End-of-day Track-A2 housekeeping. After 6 PRs landed on main today (#286 / #290 / #291 / #292 / #293 / #294), the CLAUDE.md / PHASE_STATUS.md / SKILL.md pointers drifted again — schema bumped via PR #292 (`0.10.7 → 0.10.8-phase4.6`); `USE_SECTOR_COE` flipped via PR #294. This PR closes the doc-drift loop so session N+1 reads correct state.

**Scope (4 files, doc-only)**:

- **`CLAUDE.md`** §Phase status pointer block — schema `0.10.7-phase4.6 → 0.10.8-phase4.6`; defense layer narrative refreshed to note `USE_SECTOR_COE = True` post-#294; "Post-tag production patches" subsection added between Latest tag + Prior tag, citing PRs #292 / #293 / #294 + their SHAs + the substantive change each closes. "Recently merged" list prepended with 6 same-day entries; legacy "Earlier (PR #264 → PR #285)" subsection relabeled.

- **`PHASE_STATUS.md`** §Current state — schema pointer mirrored (`0.10.7 → 0.10.8-phase4.6`); new "Post-tag production patches" row added (parallel structure to CLAUDE.md); Production-run pointer updated `559c5269 → 0ad1d574` (cron #69 chore-commit on 2026-05-28). "Recently merged" list prepended; legacy list relabeled "Earlier".

- **`SKILL.md`** schema-version history table — new top row added for `0.10.8-phase4.6` (PR #292, GOOG/GOOGL XBRL fix + Rule 18 `multi_class_per_class_attempt_count` disambiguator); existing `0.10.7-phase4.6` row preserved as second entry.

- **`PHASE_STATUS_INFLIGHT.md`** — 6 stale `(in flight, 2026-05-28)` markers updated to `(merged 2026-05-28, <SHA>)` (PRs #286 / #290 / #291 / #292 / #293 / #294). Bodies preserved (historical record).

**Why this PR exists**:

Without this housekeeping, the next session reading CLAUDE.md §Phase status would see schema `0.10.7` despite code shipping `0.10.8`, and "Recently merged" would list PRs #264-#285 as the latest (missing 6 PRs from today). The pattern surfaced 2026-05-28 morning (Track A PR #286 closed analogous drift across PRs #264-#285); applying the same housekeeping at end-of-day for PRs #286-#294 prevents the same friction tomorrow.

**Verification**:
- `ruff check .` — PASS (no Python touched)
- `python -m compute.output.schema_check` — PASS (no schema touched)
- `pytest tests/ -m "not network"` — N/A (no test surface)
- Markdown-only diff

**Hard constraints honored**:
- No code / scoring / schema / Rule 16 / Top-5 invariant touched
- No new defense flag · No new dep
- AGENTS.md substance untouched per the existing delegation pattern (CLAUDE.md = SoT for §Phase status / Stack); PR #291 already bumped AGENTS.md production-verified run pointer this morning

PHASE_STATUS_INFLIGHT.md side-file satisfies §Conventions "ship with every PR" lockstep per PR #237 convention. CLAUDE.md substance touched (pointer block + Recently merged list refresh — both materially substantive).

---
Loading