Skip to content

docs(skills): Close epic #125 — 2 portable skills + PHASE_STATUS row 4 staleness#139

Merged
dackclup merged 1 commit into
mainfrom
close-epic-125-portable-skills-and-staleness
May 20, 2026
Merged

docs(skills): Close epic #125 — 2 portable skills + PHASE_STATUS row 4 staleness#139
dackclup merged 1 commit into
mainfrom
close-epic-125-portable-skills-and-staleness

Conversation

@dackclup
Copy link
Copy Markdown
Owner

Closes #133. Docs/skills-only PR. Final cleanup work to close out epic #125.

Task A — Portable skills library final 2 (closes #133)

Extracts the last 2 deferred-but-tracked patterns from the audit in PR #132:

portable-annotate-before-veto (132 LOC)

Progressive-rollout pattern for defense / risk flags. Ship as annotate (informational metadata, no rank change) FIRST. Promote to veto (rank suppressor) only after ≥ 1 production cron of observation + threshold calibration + cohort-acceptance check.

Forcing precedent: Phase 4.5 cluster (PRs #89/#90/#91 + #93 + #95 + #97 + #100) shipped 9 new flags — 2 promoted vetoes (Beneish + Dechow, both with researched cohort thresholds), 7 annotate-only. loss_avoidance_pattern (4.5d) at 0% S&P 500 fire rate would have been a no-op or hotfix candidate as a veto; annotate made it observable.

portable-graceful-degradation-try-except (141 LOC)

Wrap every external-data integration call site in a try / except that sets ALL related output fields to None on failure + writes a structured log line + sets a per-integration Metadata.<source>_status field.

3-rule contract:

  1. No partial state — every downstream field gets None
  2. No log swallowing — exception logged with exc_info AND surfaced in metadata
  3. Downstream-aware — every consumer checks for None explicitly

Forcing precedent: OSAP integration in compute/main.py (PRs #112#118#124). Every OSAP-derived field defaults to None on failure; UI + composite both check explicitly.

Convention

Both skills follow the established portable-* convention from PR #132 (YAML frontmatter + Pattern + Trigger + Skip + QuantRank precedent section). Each Pattern section is project-agnostic; QuantRank refs confined to labeled "QuantRank precedent" sections at the bottom.

Task B — PHASE_STATUS.md row 4 staleness fix

Row 4 said "Phase 4h.2 Part 2 in flight in this PR" since PR #124's prep work. PR #124 merged 2026-05-19. Updated to "Phase 4h.2 Part 2 merged via PR #124 (2026-05-19)" — the rest of the row's text (multi-port OSAP adapter description, IC-decay deferral note) stays unchanged.

This was flagged in PR #132 body and tracked as a small follow-up.

Task C — Docs lockstep

Files (4 changed, +275 LOC)

File Change
.claude/skills/portable-annotate-before-veto/SKILL.md NEW (+132)
.claude/skills/portable-graceful-degradation-try-except/SKILL.md NEW (+141)
CLAUDE.md row 33 skill count update
PHASE_STATUS.md row 4 staleness fix

Skill inventory after this PR (37 total)

Category Count Delta
QuantRank operational 12 unchanged
QR-origin portable extract 6 +2 (annotate-before-veto, graceful-degradation-try-except)
Anthropic vendored 6 unchanged
External MIT vendored 9 (Karpathy + 8 mattpocock) unchanged
External license-pending 4 (9arm) unchanged

Verification ladder

  • ruff check . → All checks passed
  • python -m compute.output.schema_check → Schema snapshot in sync
  • python tools/check_doc_test_counts.py → exit 0
  • pytest tests/ -m "not network" → not run locally (sandbox missing pandas); CI will verify. Changes are docs/skills-only — zero Python source touched.
  • ✅ Skill registry pickup verified via session reload — both new skills register with full YAML-frontmatter descriptions.

Constraints honored

  • ✅ No touch to compute/ / frontend/ / tests/
  • ✅ No touch to WORKFLOW.md (out of scope; could file a future follow-up if WORKFLOW.md needs to cross-reference the 2 new portable skills, but the existing ## Conventions section in CLAUDE.md already names the Annotate-and-veto-Top-N rule)
  • ✅ No squash / amend of prior commits
  • ✅ No push to main; no force-push; no --no-verify
  • ✅ No workflow_dispatch trigger
  • ✅ Both portable skills' Pattern sections are project-agnostic; QR refs only in labeled "precedent" sections

Epic #125 status after this PR

Epic #125 is effectively closed except for Item 3 (Pre-merge production simulation) — that's a 2-PR substantive scope and can be opened as a separate epic when picked up.


Generated by Claude Code

…S row 4 staleness

Closes #133. Docs/skills-only PR.

Task A — Portable skills library final 2 (closes #133)
------------------------------------------------------
Extracts the last 2 deferred-but-tracked patterns from epic #125:

- .claude/skills/portable-annotate-before-veto/SKILL.md (108 LOC):
  Progressive-rollout pattern for defense / risk flags. Ship as
  annotate FIRST, promote to veto only after ≥ 1 production cron of
  observation + threshold calibration + cohort-acceptance check.
  Forcing precedent: Phase 4.5 cluster (loss_avoidance_pattern at 0%
  fire rate would've been a no-op or hotfix candidate as a veto;
  annotate made it observable).

- .claude/skills/portable-graceful-degradation-try-except/SKILL.md
  (115 LOC): Wrap every external-data integration call site in a
  try/except that sets ALL related output fields to None on failure
  + writes a structured log line + sets a per-integration status
  Metadata field. 3-rule contract: no partial state, no log
  swallowing, downstream-aware. Forcing precedent: OSAP integration
  in compute/main.py (PRs #112#118#124).

Both skills follow the established portable-* convention from PR
#132 (YAML frontmatter + Pattern + Trigger + Skip + QuantRank
precedent section). Each pattern section is project-agnostic;
QuantRank refs confined to the labeled "QuantRank precedent"
sections at the bottom.

Task B — PHASE_STATUS.md row 4 staleness fix
---------------------------------------------
PHASE_STATUS.md row 4 said "Phase 4h.2 Part 2 in flight in this PR"
since PR #124's prep work. PR #124 merged 2026-05-19 (commit
sequence visible in main: ...124...118...112...). Updated to
"Phase 4h.2 Part 2 merged via PR #124 (2026-05-19)" — the rest of
the row 4 text (multi-port OSAP adapter description, IC-decay
deferral note) stays unchanged.

This was flagged in PR #132 body and tracked as a small follow-up.
No other PHASE_STATUS.md edits — row 4 is the only stale entry.

Task C — Docs lockstep
-----------------------
CLAUDE.md row 33 skill count: 35 → 37 (QR-origin portable category
4 → 6, total reflects the 2 new skills landed here). Categorisation
unchanged otherwise; 9arm license-pending caveat still flagged with
cross-reference to issue #137.

Skill inventory after this PR (37 total)
-----------------------------------------
- QuantRank operational: 12
- QR-origin portable extract: 6 (was 4; +annotate-before-veto +
  graceful-degradation-try-except)
- Anthropic vendored: 6
- External MIT vendored: 9 (Karpathy + 8 mattpocock, unchanged)
- External license-pending vendored: 4 (9arm, unchanged)

Verification ladder
-------------------
- ruff check . → All checks passed
- python -m compute.output.schema_check → Schema snapshot in sync
- python tools/check_doc_test_counts.py → exit 0
- pytest tests/ -m "not network" → not run locally (sandbox missing
  pandas); CI will verify. Changes are docs/skills-only.
- Skill registry pickup verified via session reload — both
  portable-annotate-before-veto and
  portable-graceful-degradation-try-except register with full
  YAML-frontmatter descriptions.

Constraints honored
-------------------
- No touch to compute/ / frontend/ / tests/
- No touch to WORKFLOW.md (out of scope; could file a future
  follow-up if WORKFLOW.md needs to cross-reference the two new
  portable skills)
- No squash / amend of prior commits
- No push to main; no force-push; no --no-verify
- No workflow_dispatch trigger
- 2 new portable skills pattern descriptions are project-agnostic;
  QR refs only in labeled "precedent" sections

Epic #125 status after this PR
-------------------------------
- #130 (quarterly cohort-threshold review tracker) — recurring,
  unchanged
- #133 (portable skills library remaining) — CLOSED by this PR
- #137 (9arm-skills license clarification) — external action,
  waiting on user to file upstream issue at thananon/9arm-skills

Epic #125 Item 3 (Pre-merge production simulation) remains the
only substantive open scope. PHASE_STATUS.md row 4 staleness was
the last housekeeping task.

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

vercel Bot commented May 20, 2026

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

Project Deployment Actions Updated (UTC)
quantrank Ready Ready Preview, Comment May 20, 2026 4:48am

@dackclup dackclup marked this pull request as ready for review May 20, 2026 04:51
@dackclup dackclup merged commit 63d9bb4 into main May 20, 2026
4 checks passed
@dackclup dackclup deleted the close-epic-125-portable-skills-and-staleness branch May 20, 2026 04:51
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.

Portable Skills Library — extract remaining tacit patterns

2 participants