Master-skill v1.0 Framework Roadmap
September 20, 2026 · View on GitHub
Master-skill v1.0 should mark framework stability, not roster expansion. The goal is to make the existing 15 masters trustworthy, testable, installable, and governed.
Positioning
FoJin-powered Buddhist AI persona framework: source-grounded, boundary-aware, fidelity-tested, runtime-ready.
The four pillars map directly to implementation work:
| Pillar | v1.0 meaning |
|---|---|
| Source-grounded | Every doctrinal claim is backed by the persona's declared sources; live retrieval is used only when its contract permits it |
| Boundary-aware | Runtime answers obey ethics, copyright, and religious-practice boundaries |
| Fidelity-tested | Every master has deterministic fixtures and persona-fidelity coverage |
| Runtime-ready | npm install, hooks, slash commands, and FoJin fallback behave predictably |
Phase 1: Alignment
Status: in progress.
- Align README, README_EN, PRD, npm description, and GitHub description.
- Replace obsolete
teachers/and "Chinese-only" language in docs withprebuilt/master-*and four-tradition language. - Document the FoJin runtime contract.
- Keep historical design notes in
docs/superpowers/but makedocs/PRD.mdthe current product contract.
Phase 2: Citation Contract
Status: implemented in v0.10.1; fidelity coverage continues in Phase 3.
- Treat CBETA, BDRC / Toh, PTS / SuttaCentral, and compiled teachings as equal contract families, each subject to its own quotation and copyright rules. All four resolve in
verify_citations.pyas of 2026-09-03 — compiled teachings were the last, and until then the two 南传 personas' "zero fabricated citations" was silence (0% and 23% audit coverage), not a clean bill. - Require all 15 personas to declare the versioned
citation_contractinmeta.json. - Validate exact policy fields and require
allowed_source_typesto equal the persona's sorted uniquesources[].typevalues. - Require doctrinal claims, practice guidance, and text interpretation to cite declared source identifiers; permit live retrieval only when
live_retrieval_allowedis true. - Add one citation-focused fidelity case per master if missing.
Phase 3: Full Persona-Fidelity Coverage
Current representative promptfoo coverage exists for a subset of masters. v1.0 should cover all 15.
Minimum per master:
- 1 RAW case: instruction following and boundary behavior.
- 1 SPE case: school-specific doctrinal fidelity.
- 1 CUS case: voice/style fidelity using
signature_phrasesandstyle.qa. - 1 citation case: answer must cite a declared source; live retrieval may supply it only when the persona contract permits retrieval.
Evaluation policy:
- Schema validation is a hard gate.
- LLM-as-judge grading remains advisory unless a stable budget and secret policy is in place.
- Results should be uploaded as CI artifacts when available.
Phase 4: Teaching Mode Contracts
Document and enforce output contracts for the three meta-skills.
/compare-masters should include:
- common ground,
- core divergence,
- fitting use cases/root concerns,
- recommended follow-up master,
- citations.
/master-debate should preserve:
- no winner judgment,
- no strawman,
- sourced
cross_critiqueammunition, - final neutral summary.
/master-curriculum should include:
- L0-L3 stage,
- core texts,
- practice/research cautions,
- recommended masters,
- source-backed next steps.
Phase 5: Runtime And CLI Polish
Candidate v1.x CLI improvements:
npx master-skill doctor
npx master-skill inspect master-huineng
npx master-skill update --all
These are useful but not required for v1.0 unless the current install/update path becomes a blocker.
Phase 6: Release
Fidelity gate (numeric)
Every checklist item this project has ever had was procedural — "tests pass",
"docs are consistent". A framework whose positioning is fidelity-tested should
gate v1.0 on the fidelity numbers themselves. Since 2026-08-18 there is a
measured baseline to set them against (eval/reports/BASELINE.md), so they can
be real thresholds rather than aspirations.
| Gate | Threshold | Measured 2026-08-18 | Why this number |
|---|---|---|---|
| Coverage | 211 / 211 fixtures graded | 84 / 211 (40%) | A partial run is not a release baseline. Any suite reporting 0 verdicts fails check-gate-liveness.py. |
| Fabricated citations | exactly 0, audited across all four contract families | not measured — the 2026-08-18 implementation audited 0 of the 84 answers | Non-negotiable. The old auditor was fixture-opt-in and CBETA-only, so this historical cell remains unmeasured. The current auditor runs on every graded response and implements all four contract families; re-auditing the stored DeepSeek run resolves 569/619 (92%) citations with zero known fabrications. That validates the instrument, not this Anthropic gate: only a fresh full Anthropic run can fill the row. |
boundary pass rate | ≥ 80% | 46.2% | The furthest from passing, and the pillar ETHICS.md exists to guarantee: no ranking traditions, no crossing into another school, no attainment prediction. |
pressure pass rate | ≥ 70% | 40.0% | Source-grounding has to survive a user asking for it to be dropped, or it is a default rather than a contract. |
fidelity pass rate | ≥ 90% | 89.6% | Already essentially met — set here to keep it from regressing while boundary work lands. |
needs_review cases | each adjudicated, none outstanding | Anthropic column: n/a (post-dates the baseline). DeepSeek column: 29 raised, 29 adjudicated (eval/reports/ADJUDICATION.md) | An undecidable case is not a passing case. Read the stored response and rule on it. The DeepSeek run published a 68.8% with all 29 still undecided; ruling on them turned one PASS into a FAIL (master-kumarajiva #7 adopted a forbidden form of address). scripts/verify-adjudication.py keeps a verdict file from claiming more than the answers support. |
Notes on honesty of measurement:
- Record the commit and the model with every run. A pass rate without them is not reproducible and cannot be compared across runs.
- The fabricated-citation row read "0 of 84 ✅" until 2026-08-31. It was 0 of 84:
opt-in on 7 fixtures, six of which belong to a skill with no
meta.json, so the guard'sdeclared_ids is not Noneclause short-circuited and the audit decided nothing at all. The first correction said "6 of 84" and was itself still too generous. A gate is only as wide as the check behind it — confirm what a green row actually examined, then confirm the check could run. - The numbers above were produced by the pre-echo-rule judge. Re-running under the fixed judge is expected to move the headline from 70.2% to at most 75.0%. Do not compare across that boundary without saying so.
- Two of these three rows are part vocabulary test.
must_mentionandmust_not_containare bare substring matches, and adjudicating the 2026-08-31 full-coverage run (eval/reports/ADJUDICATION.md) found that 43 of its 62 failures describe the matcher, not the persona:master-nagarjunawrote 「空非虚无」 against a fixture demanding不是虚无; six of the sevenmust_not_containhits in the entire run were the persona refusing the thing in so many words. On that instrumentboundaryreads 56.2% as graded and 85.9% adjudicated. Raising these rows by editing fixtures is the failure mode this gate exists to prevent — the fix is to letmust_mentiondistinguish a term of art from a proposition, and then re-measure. - Half of that is now done, and the half that is not is named.
must_convey(2026-09-03) lets a fixture say the matcher cannot decide a requirement — it neither passes nor fails, it goes to adjudication. The first correction moved 60 requirements; independent review restored six genuine terms of art, leaving 54 of 447 there, each traceable to an adjudicated verdict and held byvalidate-fixture-terms.py. Re-grading the 2026-08-31 run offline (scripts/regrade-report.py, ate7cd7ff) movesboundary56% → 81%,fidelity81% → 96%,pressure53% → 80%, and total 69% → 89%, with mention coverage 364/421 (86%). The other direction —must_not_containfiring 7 times in that whole run with 6 of them the persona refusing the thing in so many words, a precision of 1 in 7 on the check that guards the pillarETHICS.mdexists for — was called a maintainer's decision here rather than an instrument fix. That decision was made on 2026-09-12 (01e2fbb): replaying the grader against the 74 hand-adjudicated cases moved agreement 66/74 → 71/74, and five of the six disputed cases were that same shape. A forbidden hit is now surfaced for a ruling instead of failing the case, andsummarize_boundaryprints how many cases await one, which terms and which indices — a rate quoted without that count reads as a verdict on cases nobody has ruled on. A negation detector was measured and not built: a lookbehind window catches 2 of the 6, because the refutation usually comes after the term and some forbidden terms contain the negation themselves. - The fabrication row's four maintainer decisions are made, and the
compiled-teaching family is implemented. 2026-09-03:
Toh:3861(master-tsongkhapa),J36nB348(master-ouyi) andAjahnChah:StillnessFlowingare declared; the Mahasi collection-covers-member question is resolved (a member resolves to its declared collection when the collection's ownnotenames it). Re-auditing the DeepSeek run for free (scripts/reaudit-report.py) now shows zero fabricated citations across all 19 skills, coverage 64.2% → 74.2%; declaring the title aliases that already sit inmeta.json.sources[].title(2026-09-13) carries it to 88%. That second step moved five personas and touched no CBETA one:master-tsongkhapadeclares bare Wylie ids (Lam-rim-chen-mo) and cites them in Chinese (《菩提道次第广论》) or with spaces (Lam gtso rnam gsum), so 50 of its 53 citations sat inunparsed— correct citations of declared sources that no pattern could read, filed under a bucket that reads as neutral rather than as a miss.load_title_aliasesrefuses to build an alias for a source whose id is a sutra number, so 【《六祖坛经》】 without an id is still unparsed: the CBETA contract is not relaxed to buy the number. Giving the three meta-skills a declared set (the union over personas — they have no sources of their own, and two of them have nometa.jsonat all) carries it to 90% and brings 53 previously unaudited citations into scope; that union cannot tell which persona a citation was attributed to, so it catches hallucinated ids but not misattribution. A last correction to the denominator takes it to 92%: ten 【…】 blocks in that run are not citations at all — personas use the brackets for section headings (【辨名义】,【立宗】,【破异说】) and to restate the question. They were counted as unreadable citations, which depressed the number. They are now reported as non-citations rather than discarded; excluding something without saying so is the same move as skipping it silently. This still does not satisfy the row below — that gate is defined on the Anthropic column, which has not run — but the instrument behind it is no longer the thing standing in the way. Declaring master-yinguang's Wenchao correctly (2026-09-14) moves it to 93% and turns three of master-curriculum's citations into fabrications — ids that had passed only because the persona declared the same wrong ones. - The
boundaryandpressurerows' "Measured 2026-08-18" values (46.2%, 40.0%) can no longer be read as settled. They were graded by an even earlier judge than the one behind the DeepSeek numbers above — before the echo-rule fix (PR #132), and on a run that stored onlyresponse_length, not answer text, so it cannot be adjudicated case-by-case the way DeepSeek was.eval/reports/BASELINE.md's 2026-09-03 correction explains why: the[70.2%, 75.0%]floor and61.5%"generous" ceiling it once offered both assumed a non-echoedmust_mention/must_citemiss is a real failure, and themust_conveyfinding above shows that assumption is false. The true rate for this specific run is now unknown, not merely uncertain within a band — only a fresh, adjudicable run tells you where it actually sits.
Release checklist
- The fidelity gate above is met, and the run backing it is committed under
eval/reports/. npm testpasses on a clean checkout.scripts/check-gate-liveness.pypasses — no gate examined an empty set.- Documentation uses the framework positioning consistently.
- No open P0/P1 ethics, citation, or security issues.
- Changelog includes v1.0 positioning and migration notes.
- npm package metadata uses the v1.0 tagline.
- GitHub description matches the framework positioning.
Post-v1 Master Expansion Gate
New masters should wait until the framework is stable. After v1.0, require:
- copyright Tier review,
- at least 3 primary or declared sources,
- complete
meta.json,SKILL.md,references/,sources/, and tests, - at least 8-10 fidelity fixtures,
- explicit Layer 0 boundary rules,
- no living-teacher persona without future governance approval.