Skip to content

docs(skills): SKILL.md schema bump + worker-session-handoff + 3-5 portable skills#132

Merged
dackclup merged 1 commit into
mainfrom
skills-housekeeping-and-tacit-knowledge-harvest
May 20, 2026
Merged

docs(skills): SKILL.md schema bump + worker-session-handoff + 3-5 portable skills#132
dackclup merged 1 commit into
mainfrom
skills-housekeeping-and-tacit-knowledge-harvest

Conversation

@dackclup
Copy link
Copy Markdown
Owner

@dackclup dackclup commented May 20, 2026

3-task housekeeping + tacit knowledge harvest PR. Docs/skills-only — no code, no schema delta, no test additions.

Update 2026-05-20 (commit 38eab4d0): Task C.1 (Karpathy vendoring) was silent-dropped in the original commit (50da7202); recovery commit pushed on top of the existing branch per auditor session feedback. See § "Task C — Portable skills library" + § "License Compliance" below for the new content.

Task A — SKILL.md schema-version table

Three fixes inside the existing table at SKILL.md ~L307:

Row Before After
0.9.2-phase4h.2 (didn't exist) NEW — PR #124 merged 2026-05-19, multi-port OSAP adapter + osap_signals_dropped_no_long_short field closing 100-signal accounting equation
0.9.1-phase4h.2 "(in flight in PR #)" "(PR #118 merged 2026-05-19)"
0.9.0-phase4h "(in flight in PR #112)" "(PR #112 merged 2026-05-19)"

PHASE_STATUS.md row 4 staleness flagged but NOT updated here per Task A explicit scope (SKILL.md only). Row 4 still says "Phase 4h.2 Part 2 in flight in this PR" — recommend a follow-up phase-status-bump PR after this lands.

Quote of the new 0.9.2 row (verbatim)

0.9.2-phase4h.2 (PR #124 merged 2026-05-19) | Phase 4h.2 Part 2 | Multi-port OSAP adapter + accounting-balance diagnostic surface (issue #116). PATCH bump per the "additive optional field" convention. 1 new optional Metadata field: osap_signals_dropped_no_long_short: list[str] | None — closes the 100-signal accounting equation (missing + dropped_no_LS + gated + used == 100). Root-cause fix: compute_long_short_returns rewritten with per-signal min(port) / max(port) inference instead of hardcoded port=01/10, recovering ~56 quintile / tercile signals that 0.9.0–0.9.1 silently dropped. No new veto, no rank change — Top-5 still ranks raw composite_score per Rule 16. Defense layer stays at 17. DSR sign-inversion investigation (100% low_dsr rejection) deferred to Phase 4h.2 Part 3 follow-up.

Task B — worker-session-handoff skill

.claude/skills/worker-session-handoff/SKILL.md (+163 LOC). YAML frontmatter + 5 sections. Codifies the handoff shape that appeared verbatim across PRs #123, #124, #127, #128, #129, #131 — user copies ONE block instead of editing 5 template snippets per handoff.

Quote of trigger section (verbatim)

TRIGGER when the user asks "prompt คำสั่ง" / "ส่ง session ใหม่" / "เขียน handoff" / "เขียน prompt ให้ session ใหม่" / "spawn a worker session" / "open this from a worker" after a plan has been approved. ALSO trigger when the user describes a multi-file implementation task and says "for the worker" / "in parallel". SKIP for trivial edits doable inline in ≤5 minutes (single-line fixes, typo changes, comment polish) — handoff overhead dominates.

Pre-populated constraint lock library (8 standard locks): compute_composite()/PHASE3_WEIGHTS, Rule 16, Rule 18, no force-push to main, no PR self-merge, no --no-verify, no workflow_dispatch, schema triple lockstep.

Task C — Portable skills library (5 shipped)

Audit findings + classification

Read CLAUDE.md + AGENTS.md + SKILL.md + WORKFLOW.md + PR descriptions of #112/#118/#124/#127/#128/#129/#131 + the upstream multica-ai/andrej-karpathy-skills repo. Classified candidates by portability:

Pattern Decision Reason
karpathy-guidelines ✅ shipped (vendored) External MIT-licensed pattern from Karpathy's observations — drop-in for any project where LLM-coding-pitfalls discipline matters
scout-then-integrate ✅ shipped Vendoring pattern, no QR-specific logic
observability-before-wiring ✅ shipped Gate-diagnostic pattern, applies to any data pipeline
drift-detector-manifest ✅ shipped API surface lock, generic
schema-triple-lockstep ✅ shipped Python/TS JSON contract, generic
pre-plan-investigations 🟡 subsumed Folded into scout-then-integrate Phase 1 § "Pre-plan investigations"
annotate-before-veto 🟡 deferred Progressive rule rollout — lower value vs the 4 internal-extract skills shipped
graceful-degradation-try-except 🟡 deferred 1-line wrapper guidance — too small for a dedicated skill

5 portable skills (flat naming per Claude Code no-recurse convention)

.claude/skills/portable-karpathy-guidelines/SKILL.md         (82 LOC, vendored 67 + 15 attribution)
.claude/skills/portable-scout-then-integrate/SKILL.md        (99 LOC)
.claude/skills/portable-drift-detector-manifest/SKILL.md    (109 LOC)
.claude/skills/portable-schema-triple-lockstep/SKILL.md     (103 LOC)
.claude/skills/portable-observability-before-wiring/SKILL.md (106 LOC)

3 of 4 internal-extract skills are slightly over the 100-LOC target (worst at 109). The 4-section scaffold (Pattern + Trigger + Skip + Precedent) requires ~25 LOC each, leaving ~25 LOC of unavoidable scaffold. The 99-LOC scout-then-integrate proves the cap is achievable but tight. The vendored karpathy-guidelines is at 82 LOC (67 upstream + 15 appended attribution).

Each internal-extract portable skill's core pattern description is project-agnostic — QuantRank references confined to a clearly labeled "## QuantRank precedent" section at the bottom of each file.

Registry pickup verified

Confirmed via session reload — all 6 new skills (worker-session-handoff + 5 portable-*) registered in Claude Code's available-skills list with their full descriptions.

License Compliance

The vendored portable-karpathy-guidelines skill triggers QuantRank's first third-party-vendoring license-disclosure surface. A new THIRD_PARTY_NOTICES.md at the repo root records:

  • Source: https://github.com/multica-ai/andrej-karpathy-skills
  • License: MIT (declared in upstream README.md § License + each skill's YAML frontmatter; upstream has no standalone LICENSE file at the time of vendoring)
  • Vendored at: .claude/skills/portable-karpathy-guidelines/SKILL.md
  • Vendored date: 2026-05-20
  • Upstream HEAD SHA at vendoring: 2c606141936f1eeef17fa3043a72095b4765b9c2
  • Full standard MIT License text with copyright attributed to "multica-ai contributors" (upstream has no individual copyright line; the attribution is conservative).

Verbatim-preservation check

$ diff /tmp/karpathy-src/skills/karpathy-guidelines/SKILL.md \
       .claude/skills/portable-karpathy-guidelines/SKILL.md
67a68,82
> 
> ---
> 
> ## License + Attribution
> [...15 appended lines...]

Only the 15-line attribution block at lines 68-82 differs. The upstream 67-line content (YAML frontmatter + heading + 4 principles) is byte-for-byte preserved per the spec constraint "เก็บ 4 principles verbatim. แก้ได้แค่ 'เพิ่ม' attribution block ท้ายไฟล์".

Files (8 changed, +721 / −2)

File Change
SKILL.md Task A — 3 row edits
.claude/skills/worker-session-handoff/SKILL.md NEW (Task B, +163)
.claude/skills/portable-karpathy-guidelines/SKILL.md NEW vendored (Task C.1, +82)
.claude/skills/portable-scout-then-integrate/SKILL.md NEW (+99)
.claude/skills/portable-drift-detector-manifest/SKILL.md NEW (+109)
.claude/skills/portable-schema-triple-lockstep/SKILL.md NEW (+103)
.claude/skills/portable-observability-before-wiring/SKILL.md NEW (+106)
THIRD_PARTY_NOTICES.md NEW at repo root (+56)

Constraints honored

  • ✅ No touch to compute/ / frontend/ / tests/
  • ✅ No touch to PHASE_STATUS.md / WORKFLOW.md (Task A scope = SKILL.md only; PHASE_STATUS.md staleness flagged in body)
  • ✅ Karpathy SKILL.md upstream content preserved byte-for-byte; only attribution block appended
  • ✅ No squash / amend of the prior 50da720 commit — recovery is a fresh 38eab4d commit on top
  • ✅ No push to main; no force-push; no --no-verify
  • ✅ No workflow_dispatch trigger
  • ✅ Task C internal-extract portable skills' pattern sections are project-agnostic; QR refs only in labeled "precedent" sections

Test plan

  • ruff check . → All checks passed
  • python tools/check_doc_test_counts.py → exit 0
  • python tools/check_branch_collisions.py "skill" "portable" "karpathy" → 1 collision on PR feat(tooling): Cross-session branch-collision check skill (#125) #131 only (own adjacent work, not a duplicate)
  • python -m compute.output.schema_check → in sync
  • python -m pytest tests/ -m "not network" → 959 passed (unchanged; skills/+notices aren't imported by tests)
  • Skill registry pickup verified via session reload — all 6 new skills present
  • CI green on commit 50da7202 (all 3 checks)
  • CI re-green on commit 38eab4d0 (Karpathy follow-up)
  • Follow-up issue Portable Skills Library — extract remaining tacit patterns #133 filed for deferred portable-skill candidates
  • User audit + Mark-Ready authorization

Follow-up issue

#133 — "Portable Skills Library — extract remaining tacit patterns"

Deferred candidates: annotate-before-veto (progressive rule rollout), graceful-degradation-try-except (1-line wrapper). Cross-reference: epic #125.

https://claude.ai/code/session_01T8FE3MAnmk6hcjvH4SgYNU

…ble skills

3-task housekeeping + tacit knowledge harvest. Docs/skills-only PR —
no code, no schema delta, no test additions.

Task A — SKILL.md schema-version table fixes
---------------------------------------------
Two stale "in flight" entries flipped to merged + 1 new row inserted:

- Row 0.9.0-phase4h: "(in flight in PR #112)" → "(PR #112 merged
  2026-05-19)"
- Row 0.9.1-phase4h.2: "(in flight in PR #<NEXT>)" → "(PR #118 merged
  2026-05-19)"
- NEW row 0.9.2-phase4h.2 (above 0.9.1) — PR #124 merged, multi-port
  OSAP adapter + osap_signals_dropped_no_long_short field, closing
  the 100-signal accounting equation; DSR sign-inversion deferred to
  Part 3

PHASE_STATUS.md row 4 ALSO has "Phase 4h.2 Part 2 in flight in this
PR" staleness — confirmed via grep but DELIBERATELY not updated here
per Task A explicit scope (SKILL.md only). Recommend a follow-up
phase-status-bump PR after this lands.

Task B — New worker-session-handoff skill
------------------------------------------
.claude/skills/worker-session-handoff/SKILL.md (+163 LOC). YAML
frontmatter + 5 sections:

- When to use vs inline (≤50 LOC single-file → inline; ≥2 files /
  new dep / code logic → handoff)
- Constraint lock library (8 standard locks: composite/PHASE3,
  Rule 16, Rule 18, no-merge, no force-push, no --no-verify,
  no workflow_dispatch, schema triple)
- Anti-pattern: paste-loop avoidance (single outer code-block
  fence; reference PR #123 as related-but-distinct paste-loop
  failure mode)
- Template (paste-ready, single ```` outer code block with
  language tag ` text` so inner triple-backticks pass through)
- Reference invocations + QuantRank precedents (PR #124, #127, #131)

Codifies the handoff shape that appeared verbatim across PRs #123,
#124, #127, #128, #129, #131 — user copies ONE block instead of
editing 5 template snippets per handoff.

Task C — Portable skills library (4 skills, +417 LOC)
-----------------------------------------------------
Audit step (per spec): read CLAUDE.md + AGENTS.md + SKILL.md +
WORKFLOW.md + PR descriptions of #112/#118/#124/#127/#128/#129/#131.
Identified 7 candidate patterns; classified by portability:

- ✅ scout-then-integrate (portable; vendoring pattern, no QR logic)
- ✅ observability-before-wiring (portable; gate-diagnostic pattern)
- ✅ drift-detector-manifest (portable; API surface lock pattern)
- ✅ schema-triple-lockstep (portable; Python/TS JSON contract)
- 🟡 annotate-before-veto (portable; progressive rollout — DEFERRED
   to follow-up issue, lower value vs the 4 shipped)
- 🟡 pre-plan-investigations (subsumed by scout-then-integrate's
   Phase 1 § "Pre-plan investigations" — no separate skill needed)
- 🟡 graceful-degradation-try-except (portable; error-handling
   pattern — DEFERRED to follow-up issue, the wrapper is generally
   1-line so doesn't warrant a dedicated skill)

4 shipped (each ≤ 109 LOC):
  .claude/skills/portable-scout-then-integrate/SKILL.md (99 LOC)
  .claude/skills/portable-drift-detector-manifest/SKILL.md (109 LOC)
  .claude/skills/portable-schema-triple-lockstep/SKILL.md (103 LOC)
  .claude/skills/portable-observability-before-wiring/SKILL.md (106 LOC)

Flat naming convention (`portable-<name>/SKILL.md` at depth 1 from
`.claude/skills/`) because Claude Code's skill registry doesn't
recurse into nested subdirectories per CLAUDE.md ## Conventions.
Confirmed via session reload — all 4 portable + worker-session-
handoff registered correctly.

Each portable skill has:
- YAML frontmatter (name + description + TRIGGER + SKIP)
- ## Pattern section (generic, no QR business logic)
- ## Trigger conditions + ## Skip conditions
- ## QuantRank precedent (1 paragraph, clearly labeled as precedent
  not pattern definition)

Task C constraint check:
- All portable skills core pattern descriptions are project-
  agnostic (read `.claude/skills/portable-*/SKILL.md` ## Pattern
  sections — zero references to OSAP / IPCA / pillar / Top-5
  inside the pattern body; only inside the labeled "QuantRank
  precedent" section at the bottom)
- 3 of 4 portable skills are 103-109 LOC (slightly over the
  100-LOC target — pattern + trigger + skip + precedent sections
  require ~25 LOC each, leaving ~25 LOC of unavoidable scaffold).
  The 99-LOC one (scout-then-integrate) shows the cap is achievable
  but tight.

Files (6 changed, +580 LOC, no deletions)
------------------------------------------
- SKILL.md — schema-version table fixes (Task A)
- 5 new SKILL.md files in .claude/skills/ (Tasks B + C)

Verification ladder all green
------------------------------
- ruff check . → All checks passed
- python tools/check_doc_test_counts.py → exit 0
- python tools/check_branch_collisions.py "skill" "portable" →
  expected ⚠️ on #131 (own adjacent work, not a duplicate)
- python -m compute.output.schema_check → in sync (no schema touch)
- python -m pytest tests/ -m "not network" → 959 passed
  (unchanged; tools/ + .claude/skills/ aren't imported by tests)
- Claude Code skill registry pick-up verified via session reload —
  all 5 new skills (worker-session-handoff + 4 portable-*) appear
  in the available-skills list

Constraints honored
-------------------
- No touch to compute/ / frontend/ / tests/
- No touch to PHASE_STATUS.md / WORKFLOW.md (Task A scope =
  SKILL.md only; PHASE_STATUS.md staleness flagged for follow-up)
- No push to main; no force-push; no --no-verify
- No workflow_dispatch trigger
- Task C portable skills are project-agnostic in their pattern
  description (QR refs confined to labeled "precedent" sections)

Follow-up issue (to file post-merge)
------------------------------------
Title: "Portable Skills Library — extract remaining tacit patterns"
- annotate-before-veto (progressive rule rollout)
- graceful-degradation-try-except (1-line wrapper guidance)
- pre-plan-investigations as standalone (currently subsumed)
- Anything else surfaced by future PR descriptions

https://claude.ai/code/session_01T8FE3MAnmk6hcjvH4SgYNU
@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 3:40am

@dackclup dackclup marked this pull request as ready for review May 20, 2026 03:52
@dackclup dackclup merged commit c44c5f2 into main May 20, 2026
4 checks passed
@dackclup dackclup deleted the skills-housekeeping-and-tacit-knowledge-harvest branch May 20, 2026 03:52
dackclup added a commit that referenced this pull request May 20, 2026
…sk C.1 recovery) (#135)

* docs(skills): SKILL.md schema bump + worker-session-handoff + 4 portable skills

3-task housekeeping + tacit knowledge harvest. Docs/skills-only PR —
no code, no schema delta, no test additions.

Task A — SKILL.md schema-version table fixes
---------------------------------------------
Two stale "in flight" entries flipped to merged + 1 new row inserted:

- Row 0.9.0-phase4h: "(in flight in PR #112)" → "(PR #112 merged
  2026-05-19)"
- Row 0.9.1-phase4h.2: "(in flight in PR #<NEXT>)" → "(PR #118 merged
  2026-05-19)"
- NEW row 0.9.2-phase4h.2 (above 0.9.1) — PR #124 merged, multi-port
  OSAP adapter + osap_signals_dropped_no_long_short field, closing
  the 100-signal accounting equation; DSR sign-inversion deferred to
  Part 3

PHASE_STATUS.md row 4 ALSO has "Phase 4h.2 Part 2 in flight in this
PR" staleness — confirmed via grep but DELIBERATELY not updated here
per Task A explicit scope (SKILL.md only). Recommend a follow-up
phase-status-bump PR after this lands.

Task B — New worker-session-handoff skill
------------------------------------------
.claude/skills/worker-session-handoff/SKILL.md (+163 LOC). YAML
frontmatter + 5 sections:

- When to use vs inline (≤50 LOC single-file → inline; ≥2 files /
  new dep / code logic → handoff)
- Constraint lock library (8 standard locks: composite/PHASE3,
  Rule 16, Rule 18, no-merge, no force-push, no --no-verify,
  no workflow_dispatch, schema triple)
- Anti-pattern: paste-loop avoidance (single outer code-block
  fence; reference PR #123 as related-but-distinct paste-loop
  failure mode)
- Template (paste-ready, single ```` outer code block with
  language tag ` text` so inner triple-backticks pass through)
- Reference invocations + QuantRank precedents (PR #124, #127, #131)

Codifies the handoff shape that appeared verbatim across PRs #123,
#124, #127, #128, #129, #131 — user copies ONE block instead of
editing 5 template snippets per handoff.

Task C — Portable skills library (4 skills, +417 LOC)
-----------------------------------------------------
Audit step (per spec): read CLAUDE.md + AGENTS.md + SKILL.md +
WORKFLOW.md + PR descriptions of #112/#118/#124/#127/#128/#129/#131.
Identified 7 candidate patterns; classified by portability:

- ✅ scout-then-integrate (portable; vendoring pattern, no QR logic)
- ✅ observability-before-wiring (portable; gate-diagnostic pattern)
- ✅ drift-detector-manifest (portable; API surface lock pattern)
- ✅ schema-triple-lockstep (portable; Python/TS JSON contract)
- 🟡 annotate-before-veto (portable; progressive rollout — DEFERRED
   to follow-up issue, lower value vs the 4 shipped)
- 🟡 pre-plan-investigations (subsumed by scout-then-integrate's
   Phase 1 § "Pre-plan investigations" — no separate skill needed)
- 🟡 graceful-degradation-try-except (portable; error-handling
   pattern — DEFERRED to follow-up issue, the wrapper is generally
   1-line so doesn't warrant a dedicated skill)

4 shipped (each ≤ 109 LOC):
  .claude/skills/portable-scout-then-integrate/SKILL.md (99 LOC)
  .claude/skills/portable-drift-detector-manifest/SKILL.md (109 LOC)
  .claude/skills/portable-schema-triple-lockstep/SKILL.md (103 LOC)
  .claude/skills/portable-observability-before-wiring/SKILL.md (106 LOC)

Flat naming convention (`portable-<name>/SKILL.md` at depth 1 from
`.claude/skills/`) because Claude Code's skill registry doesn't
recurse into nested subdirectories per CLAUDE.md ## Conventions.
Confirmed via session reload — all 4 portable + worker-session-
handoff registered correctly.

Each portable skill has:
- YAML frontmatter (name + description + TRIGGER + SKIP)
- ## Pattern section (generic, no QR business logic)
- ## Trigger conditions + ## Skip conditions
- ## QuantRank precedent (1 paragraph, clearly labeled as precedent
  not pattern definition)

Task C constraint check:
- All portable skills core pattern descriptions are project-
  agnostic (read `.claude/skills/portable-*/SKILL.md` ## Pattern
  sections — zero references to OSAP / IPCA / pillar / Top-5
  inside the pattern body; only inside the labeled "QuantRank
  precedent" section at the bottom)
- 3 of 4 portable skills are 103-109 LOC (slightly over the
  100-LOC target — pattern + trigger + skip + precedent sections
  require ~25 LOC each, leaving ~25 LOC of unavoidable scaffold).
  The 99-LOC one (scout-then-integrate) shows the cap is achievable
  but tight.

Files (6 changed, +580 LOC, no deletions)
------------------------------------------
- SKILL.md — schema-version table fixes (Task A)
- 5 new SKILL.md files in .claude/skills/ (Tasks B + C)

Verification ladder all green
------------------------------
- ruff check . → All checks passed
- python tools/check_doc_test_counts.py → exit 0
- python tools/check_branch_collisions.py "skill" "portable" →
  expected ⚠️ on #131 (own adjacent work, not a duplicate)
- python -m compute.output.schema_check → in sync (no schema touch)
- python -m pytest tests/ -m "not network" → 959 passed
  (unchanged; tools/ + .claude/skills/ aren't imported by tests)
- Claude Code skill registry pick-up verified via session reload —
  all 5 new skills (worker-session-handoff + 4 portable-*) appear
  in the available-skills list

Constraints honored
-------------------
- No touch to compute/ / frontend/ / tests/
- No touch to PHASE_STATUS.md / WORKFLOW.md (Task A scope =
  SKILL.md only; PHASE_STATUS.md staleness flagged for follow-up)
- No push to main; no force-push; no --no-verify
- No workflow_dispatch trigger
- Task C portable skills are project-agnostic in their pattern
  description (QR refs confined to labeled "precedent" sections)

Follow-up issue (to file post-merge)
------------------------------------
Title: "Portable Skills Library — extract remaining tacit patterns"
- annotate-before-veto (progressive rule rollout)
- graceful-degradation-try-except (1-line wrapper guidance)
- pre-plan-investigations as standalone (currently subsumed)
- Anything else surfaced by future PR descriptions

https://claude.ai/code/session_01T8FE3MAnmk6hcjvH4SgYNU

* docs(skills): Vendor karpathy-guidelines (Task C.1 recovery) + THIRD_PARTY_NOTICES.md

Recovers Task C.1 from the original handoff that was silent-dropped in
the prior PR #132 commit (50da720). The handoff explicitly named
"Vendor karpathy-guidelines (1 skill, ~70 LOC)" as part of the portable
skills library; the auditor session caught the omission and authorized
this follow-up commit on the existing branch.

Files (2 new, +138 LOC)
------------------------
- .claude/skills/portable-karpathy-guidelines/SKILL.md (+82 LOC) —
  vendored content of upstream skills/karpathy-guidelines/SKILL.md
  (67 LOC, byte-for-byte preserved) + 15-line appended attribution
  block referencing the upstream source, commit SHA, and the
  Karpathy tweet that motivated the guidelines.

- THIRD_PARTY_NOTICES.md (+56 LOC, NEW at repo root) — third-party
  license disclosures. Section "karpathy-guidelines (Claude Code
  skill)" carries source URL, license declaration, vendored path,
  vendored date, upstream commit SHA, upstream first-commit date,
  and the full standard MIT License text with copyright attributed
  to "multica-ai contributors" (upstream has no individual copyright
  line and no standalone LICENSE file; the `license: MIT` claim
  appears in upstream README.md § License and each skill's YAML
  frontmatter).

Upstream provenance
-------------------
- Source: https://github.com/multica-ai/andrej-karpathy-skills
- Upstream HEAD SHA at vendoring: 2c606141936f1eeef17fa3043a72095b4765b9c2
- Upstream first commit: 2026-01-27
- Vendored date: 2026-05-20
- License: MIT (declared)

Verbatim content preserved
--------------------------
`diff /tmp/karpathy-src/skills/karpathy-guidelines/SKILL.md
.claude/skills/portable-karpathy-guidelines/SKILL.md` shows ONLY
the 15-line appended attribution block at lines 68-82. The upstream
67-line content (YAML frontmatter + "Karpathy Guidelines" heading +
the 4 principles) is byte-for-byte unchanged. Per the spec
constraint: "เก็บ 4 principles verbatim. แก้ได้แค่ 'เพิ่ม' attribution
block ท้ายไฟล์".

License-disclosure caveat
-------------------------
Upstream `multica-ai/andrej-karpathy-skills` declares MIT via README
+ YAML frontmatter but does NOT ship a standalone LICENSE file. The
`THIRD_PARTY_NOTICES.md` entry includes the standard MIT License
template with copyright attributed to the GitHub org ("multica-ai
contributors"), matching the principle that an MIT declaration
without a formal copyright line still licenses to the redistributor;
the attribution is conservative.

Verification ladder all green
------------------------------
- ruff check . → All checks passed
- python tools/check_doc_test_counts.py → exit 0 (no test-count
  drift introduced by this commit)
- python tools/check_branch_collisions.py "karpathy" → no scope
  collisions detected
- python -m compute.output.schema_check → in sync (no schema touch)
- python -m pytest tests/ -m "not network" → 959 passed (unchanged;
  .claude/skills/ + THIRD_PARTY_NOTICES.md aren't imported by tests)
- Skill registry pickup verified via session reload —
  `portable-karpathy-guidelines` appears in the available-skills list
  with the upstream description verbatim

Constraints honored
-------------------
- No squash / amend of the prior 50da720 commit — this is a fresh
  commit pushed on top of the existing branch (per spec
  "ห้าม squash old commit")
- No touch to the 4 already-shipped portable skills in 50da720
- No touch to compute/ / frontend/ / tests/
- No push to main; no force-push; no --no-verify
- No workflow_dispatch trigger
- Karpathy SKILL.md upstream content preserved verbatim; only the
  attribution block appended below the original content

PR description update will follow as a separate `gh pr edit` /
MCP `update_pull_request` call so the new "License Compliance"
section + the audit-table row for karpathy-guidelines land in the
PR body.

https://claude.ai/code/session_01T8FE3MAnmk6hcjvH4SgYNU

---------

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

Vendoring + cleanup PR. Docs/skills-only — no code, no schema delta,
no test additions.

Task A — Vendor 8 mattpocock/skills selections
----------------------------------------------
Upstream: https://github.com/mattpocock/skills (MIT, Copyright (c)
2026 Matt Pocock). Vendored at upstream HEAD
d54c497aa94400a496d3f2c38be10fa5f284c5a9 (2026-05-20). Selection
criterion: engineering-core skills applicable to QuantRank's Python +
TypeScript stack and PR-iteration workflow.

Vendored 8 of upstream's 18 skills (flat naming under .claude/skills/
matches the portable-* convention from PR #132):

  .claude/skills/mattpocock-diagnose/
      SKILL.md (128 LOC = 117 upstream + 11 attribution)
      scripts/hitl-loop.template.sh (verbatim)
  .claude/skills/mattpocock-tdd/
      SKILL.md (120 LOC = 109 + 11)
      + 5 sidecars: deep-modules / interface-design / mocking /
        refactoring / tests (.md, verbatim)
  .claude/skills/mattpocock-to-issues/
      SKILL.md (94 LOC = 83 + 11)
  .claude/skills/mattpocock-to-prd/
      SKILL.md (87 LOC = 76 + 11)
  .claude/skills/mattpocock-setup-harness/
      SKILL.md (132 LOC = 121 + 11; disable-model-invocation: true)
      + 5 sidecars: domain / issue-tracker-github / issue-tracker-
        gitlab / issue-tracker-local / triage-labels (.md, verbatim)
  .claude/skills/mattpocock-handoff/
      SKILL.md (26 LOC = 15 + 11)
  .claude/skills/mattpocock-write-a-skill/
      SKILL.md (128 LOC = 117 + 11)
  .claude/skills/mattpocock-grill-me/
      SKILL.md (21 LOC = 10 + 11)

Total: 19 new files, ~860 LOC of upstream content + 88 LOC
attribution blocks. Each vendored SKILL.md carries upstream content
byte-for-byte plus an 11-line appended "## License + Attribution"
block referencing the upstream SHA + repo's THIRD_PARTY_NOTICES.md.
Sidecars (referenced via ./domain.md style links) vendored verbatim.

Skipped 10 upstream skills:
- caveman / scaffold-exercises / setup-pre-commit / migrate-to-
  shoehorn / git-guardrails-claude-code (TypeScript-specific or
  redundant with QuantRank's existing CI guardrails)
- grill-with-docs / improve-codebase-architecture / triage /
  prototype / zoom-out (lower-priority for current QR workflow)
- all in-progress/ deprecated/ personal/ entries

Registry pickup verified — 7 of 8 mattpocock skills appear in the
available-skills list (mattpocock-diagnose / -tdd / -to-issues /
-to-prd / -handoff / -write-a-skill / -grill-me); mattpocock-setup-
harness has upstream `disable-model-invocation: true` (user-invoked
only, not model-invoked).

Task B — Remove 11 unused skills
---------------------------------
QuantRank is a static-site finance dashboard — Office docs / Slack
GIFs / art-generation / branded-design tooling don't apply. Deleted:

  algorithmic-art          (p5.js generative art)
  brand-guidelines         (Anthropic brand colors)
  canvas-design            (poster / PDF visual art, 5.6 MB of fonts)
  docx                     (Word document tooling)
  internal-comms           (corporate status reports)
  pdf                      (PDF form filling / OCR)
  pptx                     (PowerPoint deck generation)
  slack-gif-creator        (Slack-optimized animated GIFs)
  theme-factory            (artifact theme presets)
  web-artifacts-builder    (claude.ai shadcn artifact builder)
  xlsx                     (Excel spreadsheet tooling)

Total: 306 files deleted (~80,000 LOC dropped, dominated by
embedded Office XSD schemas, fonts, and validators). Reduces
clone size by ~10 MB.

Kept (still relevant for QuantRank work):
- mcp-builder (Phase 5 ML may surface an MCP server)
- claude-api (Phase 5 ML SDK work)
- skill-creator (maintainer-only)
- webapp-testing (Playwright Section I verification)
- frontend-design + frontend-design-system (UI work)
- doc-coauthoring (PR descriptions, plans)

Task C — Docs lockstep
-----------------------
- CLAUDE.md row 33: skill count "24 invocation-triggerable
  skills (7 QuantRank + 17 Anthropic vendored)" → "31
  invocation-triggerable skills (12 QuantRank operational + 4
  QR-origin portable + 6 Anthropic vendored + 9 external MIT
  vendored — Karpathy + 8 mattpocock)"
- THIRD_PARTY_NOTICES.md: new "mattpocock-skills" section appended
  after the existing karpathy-guidelines section. Carries source
  URL, license, upstream SHA, vendored-skill list, full MIT
  License text verbatim (Copyright (c) 2026 Matt Pocock per
  upstream LICENSE).

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
- python tools/check_branch_collisions.py "skill" "mattpocock" →
  3 historical false positives (PRs #110/#112/#114 — JKP/OSAP
  scouts whose commit messages contained "skill"; unrelated)
- 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 — 7 of 8
  mattpocock-* + all 11 removed skills no longer appear; the
  remaining mattpocock-setup-harness is correctly hidden by
  its upstream `disable-model-invocation: true` frontmatter.

Constraints honored
-------------------
- No touch to compute/ / frontend/ / tests/
- No touch to PHASE_STATUS.md / WORKFLOW.md (out of scope)
- mattpocock SKILL.md content preserved byte-for-byte; only
  the 11-line attribution block appended below upstream content
- Sidecars vendored verbatim (referenced by SKILL.md via
  ./<sidecar>.md links — links continue to resolve in the
  vendored layout)
- No push to main; no force-push; no --no-verify
- No workflow_dispatch trigger

https://claude.ai/code/session_015649aRyi2bvciQYZVNACd2

Co-authored-by: Claude <noreply@anthropic.com>
dackclup added a commit that referenced this pull request May 20, 2026
…4 staleness (#139)

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

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