mirror of
https://github.com/Imbad0202/academic-research-skills.git
synced 2026-09-14 13:51:17 +08:00
main
122 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
a366e39e2e |
Add conservative es-ES trigger keywords to the four skills (#856)
* add conservative es-ES trigger keywords to the four skills * address review: re-pin pipeline content lock, add verificar citas, fix reseñas typo * address review items 4-6: trim deep-research es subset under 1,024, drop standalone investigación, add es-ES routing fixtures |
||
|
|
88725b8a55 |
fix(academic-paper): advertise revision-coach rebuttal triggers in the SKILL.md description (#851) (#853)
The revision-coach phrases "I got reviewer comments", "revision roadmap", "should we push back", "conference rebuttal", "grant panel response" lived only in the SKILL.md body, which the model reads after deciding to load the skill. Add them (plus zh-TW/ko equivalents) to the frontmatter description (699 chars, under the 1,024 Claude Code allowance) and add the three missing English phrases to the body Trigger Keywords line. Verification: plugin-evals/03-iclr-rebuttal-en skill-fired 0/2 -> 7/7. The case's two llm rubrics are rewritten in enumerate-then-quote style; the earlier claim-list phrasing drew 3-vote FAILs from the runner judge on outputs a reasoning judge passed. README caveats updated. Closes #851 Claude-Session: https://claude.ai/code/session_013fbc5qpXkAac1o4HLMGinE Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> |
||
|
|
6b7ee6dcae |
fix: Astra request compat, no-delegation citation transport, hedge/quota prompt repairs, audit provenance (#823–#826) (#827)
* fix: Astra request compatibility, no-delegation citation transport, hedge/quota prompt repairs, audit provenance (#823 #824 #825 #826) #823 — OpenAI request builders (smoke entrypoint + documented example) drop `temperature`, which GPT-6 Astra rejects; the per-model effort vocabulary lives in scripts/cross_model_verification/openai_effort_guard.sh, sourced by both, and an unsupported explicit Astra value fails before curl. Hermetic fake-curl test runs both surfaces. #824 — the contained Codex citation transport rejects effort=ultra with REASONING_EFFORT_REQUIRES_DELEGATION before detection/auth/tempdir/launch on both entry paths (codex-cli 0.153.4 defines ultra as the multiAgentMode replacement). Model-independent by design. #825 — hedging can no longer rescue an unsupported claim (writer recovery tree, CER fallback row, temporal rule 5 in writer + both compiler mirrors, writer contract D2); universal prose quotas in the writer, compilers, writing_quality_check.md, academic-paper/SKILL.md, and contract D6 become diagnostics subordinate to author/venue requirements. Audit inventory corrected in place; held-out seed evals/heldout/unsupported_claim_recovery (NOT_RUN) registered. #826 — run_codex_audit.sh pins gpt-6-astra/xhigh and records both in a new sidecar `model` block; claim_audit_pipeline binds an unknown judge identity to a run-local cache key (no cross-run reuse) instead of defaulting to gpt-5.5-xhigh. Review: /simplify (4 angles), codex gpt-5.6-sol xhigh 2 rounds (r1: 1 P1 + 1 P2 + 2 P3 fixed; r2: 0 P1/P2), /security-review 0 findings; all 102 spec-consistency steps + pytest manifest replayed locally. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BNKiXpdHx1T5F5RbXT2Ueu * docs(claude): record the #824 ultra reversal in the v3.21.2 key-additions line The v3.21.2 bullet still said the contained Codex citation transport accepts ultra; #824 on this branch rejects it as a delegation request. Add the reversal so the live instruction surface matches the transport. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K7emV5r2aqZDJzAyYVuuDo --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> |
||
|
|
37bd060294 |
docs: fix duplicated word in MLA citation key rules (#805)
Docs-only: academic-paper/references/citation_format_switcher.md MLA key rules line read "No year in in-text"; now "No year in-text", matching the in-text format documented above it. No lint or hash lock pins this file. Contributed by @LeslieLi46. |
||
|
|
7ef93e0cb5 |
docs: re-derive data_access_level for academic-paper and academic-paper-reviewer (#773) (#793)
* docs: re-derive data_access_level for academic-paper and academic-paper-reviewer under the dirtiest-input rule (#773) Applying the #756 derivation to the two carried-over pins the lint docstring flagged as un-derived: - academic-paper: redacted -> raw. Standalone modes ingest ungated user drafts and third-party reviewer comments, and literature_strategist's search-fills-gap flow ingests external-index search results inside the skill. The former value described only the post-Gate-2.5 pipeline path. - academic-paper-reviewer: verified_only -> raw. The standalone /ars-reviewer entry (Routing Step 1 routes "review my paper" directly) legitimately consumes an ungated pasted manuscript; the rule quantifies over ALL entry paths. Pipeline positioning unchanged. - deep-research: raw survives by a ceiling argument (no derivation can dirty the dirtiest value); recorded so no pin remains an un-derived carryover. EXPECTED_LEVELS provenance note rewritten per-pin; ARCHITECTURE §4 diagram + rules now separate the per-skill intake annotation from the per-stage output data level (§3 column, unchanged). Declarative only. Closes #773 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015NZwcSFBwiJBZEtsSTcCxq * review: address codex findings on #773 — precise gate-sequencing claims, deep-research derivation - academic-paper's former 'redacted' is described as the orchestrated pipeline path (Stage-1 sanitized inputs), not "post-Gate-2.5" — Stage 2 precedes Gate 2.5. - academic-paper-reviewer's former 'verified_only' is stated as at best true for the initial Stage 3 dispatch; Stage 3' re-review consumes a freshly revised manuscript before Stage 4.5. - deep-research's raw is re-affirmed on its actual inputs (raw queries + unverified search results); the ceiling argument becomes supplementary rather than the derivation itself. Applied consistently across the lint docstring, ARCHITECTURE §4, and the CHANGELOG entry. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015NZwcSFBwiJBZEtsSTcCxq --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
6837b4dfea |
docs(release): prepare v3.20.1 (#748)
Promote all release-worthy changes since v3.20.0, align suite and component versions, refresh all five release summaries, and close merge-provenance coverage for v3.20.1. [doc-aligned: 2026-08-15] |
||
|
|
54507ece69 |
fix: harden v3.20 review and integrity contracts (#747)
Closes #734 Closes #735 Closes #736 Closes #737 Closes #738 Closes #739 Closes #740 |
||
|
|
3af9f03d5a |
docs(release): prepare v3.20.0 (#727)
Promote the accumulated Unreleased changes, align the suite and component versions, refresh all five release summaries, and close merge-provenance coverage for the v3.20.0 release. Release gates: - version and spec consistency - CHANGELOG merge coverage - pipeline boundary content locks - pytest manifest and agents mirror checks - 197 focused tests [doc-aligned: 2026-08-14] |
||
|
|
b0fd742ed4 | Bind review criteria across consumers (#684) (#706) | ||
|
|
ece4af0bb8 | feat: add cross-document consistency advisory (#672) | ||
|
|
86bf0e5c2c |
feat: add hermetic tortured-phrase screening (#699)
Refs #660. Measurement and issue closure follow in the separately preregistered post-main mechanical conformance PR. |
||
|
|
917860b0f8 |
feat: add non-ranking revision roadmap contract (#697)
* feat: add non-ranking revision roadmap contract (#670) * fix: isolate revision authority prompt budget |
||
|
|
74540f8e9f |
feat: add deterministic retraction status (#691)
* feat: add deterministic retraction status (#651) * fix: keep retraction policy within prompt budget (#651) |
||
|
|
033491c1b6 | feat: add committee correspondence tracker (#668) (#690) | ||
|
|
20c937aa22 | chore(prompts): complete August harness-retirement audit (#617) (#688) | ||
|
|
682b30a200 |
feat: harden integrity and evaluation contracts (#685)
* feat: harden integrity and evaluation contracts Refs #657, #664, #665, #671, #674, and #678. * fix: close integrity review blockers * fix: support frozen rows in shallow CI |
||
|
|
eba1d3842d | fix(disclosure): move Frontiers checks to submission actions (#619) (#621) | ||
|
|
99ceffe93e |
feat(disclosure): add medical venue policies and fail-closed rendering (#599)
* docs(disclosure): add medical venue entries incl. first Chinese-language venues (#596) venue_disclosure_policies.md moves to v2, growing from 6 to 15 venues: the ICMJE umbrella recommendations (referral baseline for its member journals, mirroring the EMNLP->ACL referral structure), NEJM, The Lancet, JAMA, BMJ, PLOS, Frontiers, and the database's first two Chinese-language entries — Chinese Nursing Journals Publishing House (中华护理杂志社) and International Eye Science (国际眼科杂志), with verbatim policy language kept in the original Chinese plus English paraphrase. Every Source URL is official (never a third-party summary): 6 entries live-verified 2026-07-27; NEJM / The Lancet / JAMA serve bot-protection challenges to non-browser clients, so their official URLs are verified against Internet Archive snapshots of those same URLs (noted per-row). Venue-count surfaces synced: Scope line, disclosure_mode_protocol dispatch table + venue input + failure cases + references, academic-paper/SKILL.md venue list, /ars-disclosure command text, mode_selection_guide, ARCHITECTURE stage table, and the 5 READMEs (release-history lines kept intact, amended with a since-expanded note). Held back on purpose: the Chinese Medical Association Publishing House GenAI regulation. Its primary text was verified first-hand on the publisher's official WeChat channel, but only session-signed URLs exist and archive capture is captcha-blocked, so there is no durable official URL to cite. Accuracy over completeness. No policy-anchor track changes (4-anchor inventory closed), no format-profile content (#439 boundary), no detection-threshold numbers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(disclosure): address medical venue review feedback (#596) * fix(disclosure): harden medical venue policy gates (#596) * docs: credit medical disclosure contribution (#596) * fix(disclosure): close medical venue review gaps (#596) --------- Co-authored-by: 直播 <zhibo@zhibodeMacBook-Air.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: ktao732084-arch <254419203+ktao732084-arch@users.noreply.github.com> |
||
|
|
af11397597 | feat(reviewer): harden protocol text consistency (#611) (#618) | ||
|
|
6cd560690e |
feat(re-review): #576 Spec B PR-B2 — three-gate contract becomes Stage 3' default (protocol + orchestration) (#606)
* feat(re-review): #576 Spec B PR-B2 — three-gate contract becomes Stage 3' default (protocol + orchestration)
Second leg of the B1→B2→B3 chain. §16 delivery-surface map, all rows:
A. reviewer surfaces: re_review_mode_protocol.md rewritten around the
three-gate orchestration (replaces the read-letter-first Traceability
Rule; verdict vocabulary +CANNOT_VERIFY; §6 G0-G2/B1-B6/floors with
mechanized p2_addressed_rate; generic P2 MADE_WORSE discriminator;
dissent/new-issue/escalation/routing/input-manifest sections; legacy
flag; Judge Independence REPLACEs — author's claim leaves judge
inputs, explicit-supersession convention, §9 resolution-state
derivation, per-emission cross_model_status note; Judge Record gains
Pre-committed criteria / Routing / Apply-report chain lines; ordered
chain REPLACES the single-report output_draft_hash rule; input list
gains the original draft). sprint_contract_protocol §7 row →
dedicated family; reviewer SKILL 3 spots; contracts README;
reviewer_re_review removed from the Schema 13 enum + rejection
regression test (§5.4).
B. pipeline surfaces (seven parallel Stage 4→3' lists in one commit):
orchestrator § Stage 3' Re-Review Contract Dispatch (manifest before
Phase 1, three validated gates, three post-2B passes ORDER NORMATIVE,
MANDATORY checker before any outcome, deferral loop, abort surfacing,
producer obligations, legacy boundary); Stage 4→3' row + NEW Stage
3'→4.5 row + extended 4/4'→4.5 row (frozen previously_missed/
indeterminate records as gate INPUT); integrity agent consumes BOTH
attributions; state tracker Recommended column; state machine Normal
Flow row + matrix three changes (sidecar row, Verified Paper Draft
per-stage qualifier, Apply report(s) ordered-chain pointer); pipeline
SKILL narrative + Step-4 enumeration; two_stage_review_protocol;
team_collaboration_protocol; CONTENT_LOCKS re-pinned same commit.
C. schema/template surfaces: Schema 11 sidecar note + status enum
CANNOT_VERIFY + legacy-scoped authors_claim flag consequence; Schema
7 consensus_level SINGLE-VERIFIER; Schema 6 judge_record 3 optional
fields (precommitment_hash / routing_status oneOf / apply_chain_
witness); R<n>-follows-must_fix-order ordinal contract pinned in the
letter template + synthesizer (R side only); revision_patch_protocol
consumer rule → §11 ordered chain.
D. degradation registry 1.1.0 registers all 14 #576 mechanisms (marker
family + apply-chain not-run states) with fixture tests; §8 routing
fixtures (Accept-direct + Major-via-4') prove frozen records reach
AND are ingested at 4.5; CHANGELOG Unreleased entry (no version
bump).
Spec collision resolved: check_decision_contract's score-threshold
residency scan false-fired on §6's item-proportion quantifiers (50% of
P1, 80% addressed rate — a different decision system, recomputed by the
executable checker); the lint gains a scoped RE_REVIEW_PROTOCOL
exemption and its authority-table re-review row (which anticipated
'until #576 Spec B replaces its contract') is updated in the same
commit.
All spec-consistency lints + the 78-entry CI pytest manifest green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMxWsnnFwkyU7NxknbuM1R
* fix(re-review): close round-1 three-track findings (2 P1 + 3 P2 deduped) + CI line budget
Codex track (gpt-5.6-sol xhigh) P1s:
- check_decision_contract exemption narrowed from file-scoped to
literal-scoped: the three sanctioned §6 item-proportion literals are
MASKED before the score-scale scans, which then run on the residue —
a reintroduced 0-100 score rule in the protocol fails again; reverse
mutation test + sanctioned-literal presence test added.
- Stage 3' execution roster de-conflicted with §10: Phase 1/2A verify
each P1/P2 item UNDER its routed seat persona (frozen Round-1 cards;
routing changes the persona, not the call count), EIC/synthesizer own
Phase 2B + integration — protocol Execution-shape paragraph, reviewer
SKILL mode row + reference-consumers row, orchestrator dispatch step 2.
Shared P2s (both tracks):
- Seven parallel Stage 4→3' lists now ALL carry Round-1 review findings
(Schema 6 reports, the §4 level-3 layer) and the paired revision
patch/diff files (reports-without-patches = manifest_incomplete);
protocol § Input Manifest gains the revision_patches[]/apply_reports[]
co-presence + by-position pairing policy; state-machine matrix Review
Reports row extends to Stage 3', Apply report(s) row names the pair.
- §8 REV-PM-<n> closed mapping delivered in full on the operative
protocol surface (description prefix back-reference, reviewer =
found_by, type/priority/target_section/suggested_action/
verification_criteria/consensus_level + all four transported fields);
full-field prose fixture pins every derivation.
- Adjustment table carries the complete basis-discriminated source_ref
contract (acceptance:<id> REQUIRED on user_accepted_fail_closed,
reapplication:<id> on cross_model_adjudication, FORBIDDEN elsewhere).
General track (Opus 5 xhigh) P2:
- The three unconditional scoped-2B'-call sentences gain the §6
dissent-ONLY judge-shortcut exception (divergence rows never shortcut);
stale Judge Record 'verification-logic sections' reference updated.
CI: test_v3_6_7_phase_6_6 gains the #576 Stage 3' dispatch block measure
(+30-line dedicated budget) subtracted from the v3.6.7 scope, mirroring
the #390/#394/v3.10 precedent. CONTENT_LOCKS re-pinned (4 files, same
commit). Security track round-1: CONVERGED 0/0. All lints + 78-entry
manifest green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMxWsnnFwkyU7NxknbuM1R
* fix(re-review): round-2 convergent P2 — apply-chain witness back-reference re-numbered (Input item 7 → 8)
Both non-security tracks independently converged on the single finding:
round-1 fix #4 inserted Round-1 findings as Input item 6, shifting the
apply reports to item 8, but § Input Manifest's apply-chain sentence
still pointed at item 7 (now the config cards). One-token fix; protocol
bytes untouched elsewhere (re_review_mode_protocol.md is not CONTENT_LOCKS-
pinned, no re-pin needed). Security round-2: 0/0; CI green at
|
||
|
|
3939b4cf0d |
feat(re-review): #576 Spec B PR-B1 — contract schemas + synthesis checker + patch_digest (format 1.2) (#605)
* feat(re-review): #576 Spec B PR-B1 — contract schemas + synthesis checker + patch_digest First leg of the B1→B2→B3 implementation chain for the three-gate evidence-before-persuasion re-review contract (design: PR #604): - shared/contracts/re_review/{precommitment,verdict_record,traceability, input_manifest}.schema.json — §5/§11 field-for-field, all record types and closed sets; NewStandardRecord gains new_standard_id (spec §5.1 amended in-place: new_standard_ref needs a stable target) - scripts/check_re_review_synthesis.py — §13 recomputation checker, stdlib-only (#510 architecture class); graded exit codes 0/1/2 - scripts/test_check_re_review_synthesis.py — 148-test mutation suite: 3 hand-pinned goldens, one violating fixture per invariant, §10 card fixtures pinned from both example files (DA synthetic), §6 unit table, jsonschema parity - scripts/ars_apply_revision_patch.py — apply report gains patch_digest, REPORT_FORMAT_VERSION 1.1→1.2 (1.0→1.1 precedent; + protocol doc row) - CI: unified pytest manifest entry (spec-consistency runs it) No behavior change: nothing emits these artifacts until PR-B2 turns the contract on as the Stage 3' default. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWFfSwbbixMNDHXQhQ8nRo * fix(re-review): close round-1 three-track findings (2+6 P1, 2+4 P2) General track (Opus 5 xhigh) + codex (gpt-5.6-sol xhigh) round-1 closures: - §3.4 Direction column enforced in schema + checker: valid_rebuttal upgrades to FULLY_ADDRESSED only (the sole letter-anchor basis can no longer move a verdict sideways into the p2_addressed_rate numerator); author_pointer_located_evidence is a strict upgrade to PARTIALLY/FULLY - superseded reapplications keep their dispatch-time pre_reapplication _verdict — only CURRENT records take the chain-tail fallback (a legal successful retry no longer aborts); retry golden + double-current fixture - G2(d) acceptance backs exactly ONE user_accepted_fail_closed adjustment (an orphan acceptance cannot clear the deferral) - CrossModelResolution must reference a reapplication whose answer_refs contains its intent (cross-wiring closed) - challenged-proposal drafted bodies are NEVER booked (content-equality exclusivity) + per-item drafted-body uniqueness - §11 degradation (iii): escalation exceptions unsubstantiatable without the original manuscript - source_reviewer bound VERBATIM to the Schema 7 reviewer field - half-transported P1 items (transported markers present, severity absent) refuse driving_severity null (B1 suppression closed) - apply-report grammar strict: JSON object, numeric dotted version (the pre-1.2 absence policy needs a VALID version below 1.2), 12-hex hashes - path: refs are RELATIVE only (no absolute/drive/traversal), schema+checker - §13 aborted-emission exemption scope: abort precedence over deferral; criteria_drift stays bidirectionally recomputed - letter-present-but-blockless letters get a visible empty-layer NOTE Security track round 1: CONVERGED 0/0. Suite 148 -> 167 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWFfSwbbixMNDHXQhQ8nRo * fix(re-review): close round-2 findings (codex 2 P1; general 1 P1 + 2 P2, two shared) - superseded reapplications are now verified, not skipped: supersession is defined for FAILED (CANNOT_VERIFY) attempts only, and a failed attempt appends nothing, so its dispatch-time pre_reapplication_verdict must equal its direct retry's — closes the G2(b) covering-predicate rewrite channel through stale user-form resolutions (codex #1 / general P1-1) - an aborted emission claiming manifest_incomplete / manifest_hash_mismatch / synthesis_mismatch as root cause fails: the checker reached recomputation, so the §11 manifest layer validated against the same hash-bound inputs (codex #2 / general P2-2) - §5.3 letter-tag condition implemented: letter-tagged anchors on a reapplication (and its mechanically-copied cross_model_adjudication adjustment) are valid exactly when the re-examined chain carries a booked valid_rebuttal record — the §3.4 "assertion in the letter with no locatable manuscript evidence changes nothing" machine witness (general P2-1) Security round 2: CONVERGED 0/0 (second consecutive). Suite 167 -> 171. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWFfSwbbixMNDHXQhQ8nRo * fix(re-review): close round-3 findings (codex 1 P1, general 1 P2) - the supersession guard is now UNCONDITIONAL: a verdict-changing successful reapplication carrying its derived adjustment can no longer be superseded past the failed-only check (§6 — a retry names the FAILED attempt it supersedes); the stale-resolution rewrite channel is closed on the derived-adjustment path too (codex round-3 P1) - §7 judge adjudication scope enforced: a cross_model DissentAdjudication is valid only for dissents on P1 (must_fix) items — the judge's scope EQUALS the §9 pass's P1 coverage, and P2 dissents always take the G2(a) user path even on an active setup (general round-3 P2) Security round 3: CONVERGED 0/0 (third consecutive). Suite 171 -> 173. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWFfSwbbixMNDHXQhQ8nRo * fix(re-review): close round-4 findings (codex 2 P1, general 1 P1; one codex half adjudicated against) - §6 trigger binding: a divergence-only re-application (answer_refs with intent refs only) and a system ResolutionIntent both require an EVALUATED P1 row (cross_model_verdict present, implying an active configuration) — the forged intent→reapplication→resolution chain can no longer rewrite a committed P1/P2 verdict on a not_configured run (general round-4 P1; closes the §18 "Phase 2B cannot silently relax" acceptance surface on the reapplication side) - a G2dAcceptance referencing a SUPERSEDED reapplication fails — a stale acceptance can no longer override the successful current retry (codex round-4 #2) - adjudications below an untripped §7 bound are rejected ("dissents below the bound stand unadjudicated by design") (codex round-4 #1b) - ADJUDICATED AGAINST codex round-4 #1a (reject user adjudicator on active-setup P1 dissents): the §6 deferral loop records a user-adjudicated DissentAdjudication DIRECTLY with no activity qualifier, and the §9 pass can be per-row unavailable — a one-way rule would make judge-transport failure unrecoverable. General round-4 independently reached the same conclusion; pinned by a stays-legal test. Security round 4: CONVERGED 0/0 (fourth consecutive). Suite 173 -> 178. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWFfSwbbixMNDHXQhQ8nRo * fix(re-review): close round-5 findings (codex 1 P1, general 1 P1) - forged-divergence closure (codex): a divergence-only re-application now requires a REAL dispatch-time divergence (cross_model_verdict != pre_reapplication_verdict — §6 identifies diverges BEFORE the system intent is emitted) and its chain must carry the ORIGINAL mandating system intent; an originally-agree row can no longer manufacture its own diverges status after the fact - ghost-dissent closure (general): every DissentRecord must be APPLIED — the item's verdict record carries applied_criterion dissented:<id> (§7 reverse witness); an unapplied dissent can no longer trip the §7 bound and authorize an original_upheld re-application second chance Both are siblings of the round-4 trigger-binding rule: no committed verdict moves without its genuine triggering divergence/dissent. Security round 5: CONVERGED 0/0 (fifth consecutive). Suite 178 -> 181. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWFfSwbbixMNDHXQhQ8nRo --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
3e90e14f2d |
fix(reviewer): re-review yardstick continuity + Stage 4→3' handoff completeness + apply-report output hash (#574/#576 pre-work) (#577)
* fix(reviewer): re-review yardstick continuity + Stage 4->3' handoff completeness + apply-report output hash (#574/#576 pre-work) Three bug-class gaps fixed ahead of the #576 contract design: 1. Yardstick continuity: re-review reuses the Round-1 Reviewer Configuration Cards instead of re-running field_analyst over the revised manuscript (new § Yardstick Continuity; visible [YARDSTICK-REGENERATED] fallback marker on a new Judge Record line). 2. Stage 4 -> 3' handoff: the orchestrator transfer row gains the Revision Roadmap + #390 apply report(s) + Round-1 configuration cards; the re-review protocol input list gains the same entries. #528 orchestrator content lock re-pinned per documented procedure. 3. Apply report format 1.1: new output_draft_hash binds the report to the exact revised-draft bytes it describes; consumers instructed to check it before relying on untouched-block evidence. 3 new tests (TestReportOutputHash, red-first); full suite 3518 passed / 3 skipped / 1 xfailed; check_390 / check_268 / boundary-semantics / spec-consistency lints green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * refactor: /simplify pass — terse SKILL.md mode cell, STALE-REPORT vocabulary alignment, trimmed version comment - SKILL.md re-review agents cell shrunk to sibling shape + section pointer (marker literal lives in the protocol authority only) - revision_patch_protocol.md names the submission verifier's STALE-REPORT guard as the sibling freshness pattern (single-source vocabulary) - REPORT_FORMAT_VERSION comment trimmed to the load-bearing facts Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * fix: close codex round-1 findings — Stage 4->3' lockstep across all six authority surfaces + tiering roster + Schema 6 reviewer_configuration - P1: the new re-review inputs (Roadmap, apply report, Round-1 cards) now appear on every Stage 4->3' authority: academic-pipeline SKILL.md, pipeline_state_machine.md (transition row + artifact lineage rows), team_collaboration_protocol.md, state_tracker_agent.md, academic-paper-reviewer SKILL.md re-review input line, and two_stage_review_protocol.md (surface codex round 1 did not name). Three #528 content locks re-pinned per documented procedure. - P1: shared/model_tiering.md prompt-caching roster no longer re-dispatches field_analyst at Stage 3' (Round-1 cards passed as data instead). - P2: Schema 6 judge_record gains optional reviewer_configuration member carrying round1_cards_reused / [YARDSTICK-REGENERATED ...] verbatim. Full suite green; boundary-semantics / model-tiering / check_390 / check_268 / spec-consistency lints green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * fix: close codex round-2 findings — examples lockstep, any-path regeneration fallback, canonical reviewer_configuration token, #390 spec §0.1 amendment - P1: three registered examples updated to the new Stage 3' contract (full_pipeline + revision_recovery show reused Round-1 cards and EIC-only verification; mid_entry gains an explicit note that its field_analyst run is legitimate FULL-mode behavior, not re-review) - P1: the regeneration fallback now covers ANY path where Round-1 cards are unavailable (standalone, mid-entry, lost artifacts) — silent regeneration is a protocol violation on every path; resolves the standalone-only wording that left mid-entry pipeline runs undefined - P2: model_tiering roster note qualified (normal-path freeze, marked fallback preserved as the sole exception) - P2: Judge Record template emits the Schema 6 canonical token round1_cards_reused - P2: #390 spec gains §0.1 amendment recording apply-report format 1.1 + output_draft_hash Full suite green; all five lints green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * fix: close codex round-3 findings — example mode labels + EIC-only synthesis narrative + corrected mid-entry rationale - P1: full_pipeline_example Stage 3' relabeled re-review mode (was declaring full mode around an EIC-only dispatch) - P1: revision_recovery synthesizer narrative no longer claims a five-reviewer concurrence the EIC-only contract never ran - P2: mid_entry rationale records the true history (ARS quick-mode Round 1 + user-requested fresh full review), not an external-human round that never happened Full suite green; spec-consistency + boundary-semantics green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * fix: close codex round-4 findings — mode-gated Roadmap prerequisite + apply-report sidecar path - P1: state_tracker Stage 3' Roadmap requirement gated on re-review mode (a user-requested fresh full review at 3' — mid-entry quick->full path — legitimately has no Roadmap) - P2: orchestrator handoff names the apply report at its real location (<output>.apply-report.json beside the revised draft; only the patch document lives under phase6_*) Two #528 content locks re-pinned. Full suite green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * fix: close codex round-5 finding — mode-gate the orchestrator Stage 4->3' transfer row The authoritative handoff row now states it is the re-review-mode transfer (the default Stage 3') and defines the fresh-full-review alternative (mid-entry quick->full path): Revised Draft + available context only, full-mode dispatch, not marked a verification round — consistent with the state_tracker exception added in round 4. #528 orchestrator content lock re-pinned. Full suite green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * fix: close codex round-6 finding — propagate the Stage 3' mode gate to SKILL.md, state machine, and collaboration mirrors The fresh-full-review branch (mid-entry quick->full path) is now named on all remaining Stage 4->3' authorities, matching the orchestrator and state_tracker rows from rounds 4-5. Two #528 content locks re-pinned. Full suite green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * fix: proactively close the remaining mode-gate class — two_stage protocol, ARCHITECTURE row, lineage cards row Same class as codex rounds 4-6 (unconditional Stage 3' surfaces vs the fresh-full-review branch); swept the remaining mirrors in one pass instead of one per review round. State-machine lock re-pinned. Full suite green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * fix: close codex round-7 findings — mode-gate the adjacent Mode/Output/dependency/checklist declarations - P1 x4: two_stage Mode+Output bullets, ARCHITECTURE mode+artifact cells, state-machine Roadmap lineage row, team-collaboration handoff checklist all now carry the re-review-default / fresh-full-review split - P2: state_tracker cards marked re-review-only (no spurious warning on the quick->full path); full_pipeline_example Stage 4 deliverables list the apply-report sidecar it later transfers Two #528 content locks re-pinned. Full suite green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J * docs(changelog): record the 8-round dual-track review trajectory and full lockstep scope Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017bHgbm9bstvmorumtPa65J --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
7b28147695 |
feat(integrity): #569/#570 revision-round claim-drift guards (claim-strength ladder + token conservation) (#571)
* feat(integrity): #569/#570 revision-round claim-drift guards (claim-strength ladder + token conservation) Closes the epistemic and token halves of the #390 honest-claim residual: the block-anchored patch confines silent-distortion exposure to touched blocks but never checks a touched block's interior (DELEGATE-52, arXiv:2604.15597 — the round-trip subtle-modification finding #390 already anchors). Two complementary advisory layers, mechanism shape borrowed from Yila-AI/sci-ssci-skills (@MissOrangePeel — its sci-ssci-polishing claim-strength ladder + check_invariants.py): - #569 Claim-strength ladder (shared/references/claim_strength_ladder.md): an ordered epistemic scale whose invariant is "no silent move, either direction, without an authorizing roadmap item". Wired into draft_writer_agent revision mode (a patch op changing a claim's rung must name the item authorizing the strength change) and a new advisory Phase E6 in claim_verification_protocol.md + its integrity_verification_agent executor mirror (STRENGTH-DRIFTED -> ADV-E6-<n>, mirroring ADV-E4/E5, never gating). The orchestrator's advisory-checkpoint template generalized to every ADV-*-<n> family to end per-feature enumeration churn (content lock re-pinned). - #570 Deterministic token conservation (scripts/check_revision_token_ conservation.py): stdlib checker over numeric tokens, <!--ref:-->/<!--anchor:--> markers (canonical grammar keyed on slug so bare<->resolved churn is not a spurious delta and a dropped resolved marker still surfaces), bracketed/ author-year citations, and protected terms; pair mode or per-op against a #390 patch with roadmap_item_ids attribution and Unicode fold-before-split (#524 ordering). Necessary-but-not-sufficient, mirroring the v3.11 deterministic/ LLM-semantic split. Wired as orchestrator revision step 3a next to E6. Rather than cite an earlier-generation-model study as motivation (#569 precondition), a held-out set (evals/heldout/revision_claim_drift/, codex-generated scenarios, cross-model + maintainer-adjudicated judging) measured the CURRENT frontier model's baseline first: 2/8 = 25% claim-strength/ hedge drift under hedge-drop and null-reframe pressure, 0/8 unauthorized numeric/citation drift (the one authorized change correctly isolated), 2/2 controls clean — the evidence the ladder earns its place rather than closing as documented-negative-scope. 27 mutation tests, registered in the CI pytest manifest. /simplify pass applied (ref-marker grammar reuse from the canonical verify_submission_package form; small tightenings). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VAVMz9dLBjNgCo1re74Tyq * fix(integrity): #569/#570 close dual-track pre-ship review (6 codex findings) /security-review: 0 findings (read-only stdlib lint, empty attack surface). /codex review xhigh: 6 findings (4 P1 + 2 P2), all closed: - [P1] Number regex kept no sign inside brackets / after commas and truncated scientific exponents: CI [-0.45,..] read as 0.45 and 6.02e23 as 6.02, so [-0.45]->[0.45] and 6.02e23->6.02e24 both false-reported conserved. Sign now attaches after [ and , ; exponent (e/E[+-]NN) is part of the token. - [P1] Narrative author-year citations captured only the parenthesized year, so Smith (2020) -> Jones (2020) on the same <!--ref:--> slug false-reported conserved. The token now includes the narrative author phrase. - [P1] E6 declared inputs (prior draft, roadmap, patch) the Stage 4->4.5 handoff never transferred. Rewired E6 to consume the durable per-round revision-patch sidecars via a new declared Revision-Evidence Bundle (orchestrator handoff + section), satisfying context hygiene without a prior-draft diff. - [P1] E6 audited only the last pair; on a 3->4->3'->4' path it missed drift introduced in an earlier round and retained. Now consumes every round's patch in the bundle. - [P2] step 3a misstated attribution: the checker emits ADV-REV for every token-moving op and copies its IDs; it does NOT judge authorization (E6 does). Corrected, and --protected-terms guidance added. - [P2] E6/ADV-REV had no report table or checkpoint option defined. Added both to the Integrity Report Output Format and the advisory-checkpoint template. Re-ran the baseline eval under the stricter checker: 8 revisions score identically (7 conserved, rp-07 still isolates only the authorized 0.17->0.21) — no false-positives introduced; the measurement stays valid. 31 tests (was 27). Orchestrator content lock re-pinned. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VAVMz9dLBjNgCo1re74Tyq --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
f5402b114d |
feat(provenance): #513 read_scope attestation + anchor-aware finalizer promotion (#568)
* feat(provenance): #513 read_scope attestation + anchor-aware finalizer promotion - /ars-mark-read: optional --scope {full_text,sections,abstract_only, toc_only,unknown} + --locator (repeatable, requires sections) + --note; declaration-only, absent = unknown, contradictory attestations refused, attestation args rejected with --unmark, batch all-or-nothing preserved - new sidecar schema shared/contracts/passport/human_read_log.schema.json (version_records precedent; test-time validation, CLI dependency-light) - Cite-Time Provenance Finalizer: read-scope-aware LOW-WARN->ok promotion (legacy/unknown/full_text promote; abstract_only/toc_only keep LOW-WARN + coverage note; sections promote only on unambiguous locator containment; quote anchors need full coverage); degradation is always retained LOW-WARN + note, never a new WARN class or hard gate - commands/ars-mark-read.md + formatter LOW-WARN remediation in lockstep; #528 orchestrator content lock re-pinned - tests: +10 attestation cases incl. sidecar-schema validation Closes #513 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(provenance): #513 round-1 cross-model review closures (5 P1) - presence checks use 'is not None' (--note '' no longer bypasses the requires-scope rule or the unmark rejection) - locator/note length bounds enforced at write time in lockstep with the sidecar schema (CLI can never produce a schema-rejected ledger) - governing attestation rides the settled latest-timestamped-event-wins precedence (a latest rescind wins; no resurrection of older marks) - idempotency evidence enumeration names the attestation explicitly - partial acknowledgment resolves to draft-visible LOW-WARN-PARTIAL-COVERAGE (formatter passes it as acknowledged with the coverage note surfaced; same severity tier, suffixes unchanged) - tests 10→14 attestation cases; #528 lock re-pinned Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(provenance): #513 round-2 cross-model review closures (3 P1) - LOW-WARN-PARTIAL-COVERAGE added to every base-status enumeration: check_v3_10_policy _BASE_STATUS, hard-gate handoff, contamination / policy-stamp sections (suffixes + policy_hash apply as LOW-WARN; freshness gate never refuses partial markers) - citation anchor joins the idempotency/revision-loop evidence enumeration (anchor edits under partial coverage re-resolve markers) - sidecar schema mirrors locators-require-sections via if/then so audit-time validation matches the writer contract; +1 schema test - #528 lock re-pinned Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
7f878f7ad2 |
feat(integrity): #512 PDF read-integrity preflight for locally-extracted page anchors (#566)
* feat(integrity): #512 PDF read-integrity preflight for locally-extracted page anchors Closes the local-extraction-channel gap between v3.7.3 locator presence and the #182 existence gate: a page anchor derived from a silently truncated/mispaginated PDF read passes every existing gate. - scripts/pdf_read_preflight.py: three independent page-count signals (raw root /Count, own cycle-guarded /Kids walk, pypdf page list) -> PASS/FAIL/UNAVAILABLE JSON sidecar with file sha256 + parser warnings. pypdf-backed with the verify_submission_package ImportError precedent. - R-L3-1-D firm rule in the three v3.7.3 emitters (+ agents/ mirrors): local-PDF page anchors require a PASS sidecar in context, else anchor:none or an independently-visible locator + explicit warning. - claim_ref_alignment_audit_agent Step 4: precondition bound to ref_retrieval_method == manual_pdf, sidecars joined on ref_slug (sha256 confirmatory until #513), [pdf_read_integrity_unverified] advisory tag - never UNSUPPORTED on this basis alone. - pipeline_orchestrator_agent §3.6: preflight once per locally-read corpus PDF, upstream of the writers; #528 content lock re-pinned. - 15-test synthetic-PDF suite (in-test assembly, no binary fixtures). Closes #512 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(integrity): #512 round-1 cross-model review closures (3 P1 + 2 P2) - preflight: trailing-data-after-final-%%EOF veto (truncated incremental update otherwise PASSes on the older revision's agreeing counts); parser warnings survive early exits (appended in capture finally) - orchestrator: preflight moved to Stage 1 corpus intake, independent of the opt-in audit mode (audit-gated preflight left default runs sidecar-less at R-L3-1-D, gate-refusing valid citations); #528 content lock re-pinned - executable path: run_audit_pipeline(pdf_preflight_sidecars=...) tags manual_pdf page-anchor rows at the Step-6 emission point after cache resolution (cache hits cannot bypass; tag never enters cache body) - finalizer: [LOW-WARN-PDF-READ-INTEGRITY-UNVERIFIED] advisory on SUPPORTED rows carrying the tag (content-based-fallback support no longer renders the advisory invisible) - tests: preflight 15→18, +8 pipeline, +3 finalizer Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(integrity): #512 round-2 cross-model review closures (7 P1) - preflight: xref-coverage cross-check (stale startxref pointing at a previous revision's xref with its own %%EOF now vetoes PASS); /Count must be a real integer object (float/string coercion rejected) - R-L3-1-D: FAIL vs UNAVAILABLE split - positive truncation evidence refuses the page anchor; absence of verification (standalone dispatch, no-Python installs, unpreflighted files) is an explicit-warning advisory, never a manufactured refusal (mirrors detection-vs- terminality precedent) - pipeline: retrieve_fn receives pdf_preflight_verdict on page-anchor citations so passage selection can go content-based BEFORE the judge reads a page-scoped passage; freshness (sha256 re-check) documented as the orchestrator's contract - orchestrator: sha256 re-check before dispatch; cross-runtime coverage (standalone deep-research/academic-paper dispatch, skipped Stage 1); tagged-SUPPORTED row added to the operational finalizer matrix; content lock re-pinned - tests: preflight 18→20, pipeline +1 (verdict-passing contract) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(integrity): #512 round-3 cross-model review closures (2 P1) - xref-coverage: redefined-object variant caught - the newest raw copy of every directly-stored object must be the copy the active xref chain references (calibration guard skips offset-shifted files rather than mass-flagging) - trailing-data predicate uses ISO 32000 PDF whitespace: NUL padding after %%EOF passes, vertical tab is data - tests: preflight 20→23 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(integrity): #512 round-4 cross-model review closure (1 P1) Object-header scan recognizes bare-CR line boundaries (ISO 32000 permits CR-only line endings; Python's (?m)^ does not treat CR as a line start, blinding both xref-coverage checks on CR-only files). Tests 23→25. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(integrity): #512 round-5 cross-model review closures (2 P1) - header scan boundary/separator class extended to full ISO 32000 whitespace (NUL-preceded replacement headers are seen) - compressed-object variant: a direct raw replacement of an object whose active copy lives in an object stream, appended after its container with a stale startxref, vetoes PASS; a raw copy before the container (legitimate superseded-into-objstm update) stays clean - new ObjStm + cross-reference-stream fixture; tests 25→28 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(integrity): #512 round-6 cross-model review closure (1 P1) Header scan accepts ten-digit object numbers (\d{1,9} blinded the coverage checks to replacements with object IDs >= 1e9). Tests 28→29. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(integrity): #512 round-7 cross-model review closure (1 P1) Header-scan separators implement the full ISO 32000 lexer model: %-comments-to-EOL are token separators, so comment-obfuscated headers (e.g. '2 0%note\nobj') no longer hide from the coverage checks. This closes the lexical-variant family structurally rather than per-case. Tests 29→30. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF * fix(integrity): #512 round-8 cross-model review closure (1 P1) Header-scan numeric tokens implement the full ISO 32000 integer form: optional sign and leading-zero padding (pypdf coerces via int(), so '+2 0 obj' / '00000000002 0 obj' are valid headers). Together with r7's separator model, both halves of the lexer are now structurally complete. Tests 30→31. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EA3EvegVqKrkM62u7k9PHF --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
7a7b8d6e07 |
feat(reviewer): #539 re-review judge independence + judge record (#559)
* feat(reviewer): #539 re-review judge independence + judge record Stage 3' Priority-1 addressed-ness verdicts get an independent cross-model pass when ARS_CROSS_MODEL is set (dispatching-layer transport per #523; [CROSS-FAMILY-DIVERGENCE] rows are a review trigger for the EIC, never a vote); single-provider runs carry a never-omitted §8.1.2 disclosure line. Judge Record block (verification vs revision-driving judge, rubric version, evidence seen, judging budget separate from generation) + Schema 6 optional judge_record field. External motivation: Ren et al. (2026, arXiv:2607.13104 §8.1.2). Closes #539 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(reviewer): #539 codex round 1 — dispatchable pass, fillable Judge Record, defined output surfaces, §8.1.2 precision P1: the per-item pass is integrity-sampling-style direct dispatch by the dispatching layer (no #527 envelope — no fenced owner hands off); full verdict set incl. MADE_WORSE; results land in a new R&R matrix Cross-model column (agree / diverges / unavailable) with diverges as a Phase 2 review trigger. P1: Judge Record made fillable — Round-1 panel provenance copied seat-level from the #540 provenance block (singular revision-driving judge undefined for a mixed-family panel); cross-model status is a three-way enum; prompt/rubric surfaces recorded. P2: disclosure line verbatim in the output template; Schema 11 optional per-row fields; §8.1.2 attribution tightened + calibration claim qualified. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(reviewer): #539 codex round 2 — judgment-specific transport, letter carried into Stage 4->3', usable matrix, not_configured status P1: the per-item pass uses the provider transport with a judgment-specific request (no grounding gate, closed verdict set, non-conforming -> unavailable, never coerced) instead of the citation handlers. P1: the Editorial Decision Letter joins the Stage 4->3' handoff on both locked surfaces (orchestrator + pipeline SKILL; locks re-hashed) so the Judge Record's Round-1 provenance is actually fillable post-#540. P1: the R&R matrix template fixed to eight delimiter/example cells with real Cross-model values. P2: not_configured added to the cell/status vocabulary (single-family rows have a defined value). P2: "exact configuration" softened to the analogous family-level correlation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(reviewer): #539 codex round 3 — letter named on all handoff surfaces, status scoped to Priority 1 rows, CHANGELOG synced P1: the Editorial Decision Letter joins the Stage 4->3' handoff on the remaining three operative surfaces (state-machine transition + material rows, lock re-hashed; reviewer SKILL re-review input line; protocol input list). P1: cross_model_status always-carried requirement scoped to Priority 1 rows (the pass does not evaluate P2/P3; their tables omit the column). P2: CHANGELOG entry synced to the softened/consented/diverges-vocabulary text. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(reviewer): #539 codex round 4 — letter on team/state-tracker/example surfaces, neutral provenance fallback P1: the Editorial Decision Letter joins the Stage 4->3' transfer in the team collaboration protocol, the state tracker's prerequisite row (lock re-hashed), and both pipeline examples. P2: the absent-provenance fallback is neutral — "unknown (provenance block absent)" with an optional recorded reason (guided Round 1 emits no letter; pre-#540 letters lack the block) instead of falsely labeling #540-era guided runs as pre-#540. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(reviewer): #539 codex round 5 — letter on the two-stage protocol + recovery example; partial status for mixed runs Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(reviewer): #539 codex round 6 — partial + N/M counts in the Schema 6 enum; shared-doc disclosure scoped to not_configured / all-unavailable Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
65be66507e |
feat(novelty): #548 search-bounded novelty claims + Phase E novelty-claim classification (#556)
* feat(novelty): #548 search-bounded novelty claims + Phase E novelty-claim classification draft_writer emits novelty/priority language search-bounded by default (filled from Schema 2 search_strategy, nearest prior work named, qualifier protected as an upstream-marked hedge); absolute form only on explicit user confirmation, recorded for AI disclosure. Phase E gains E5 novelty-claim classification (SUPPORTED_WITHIN_SEARCH / UNRESOLVED, never "globally verified", advisory-only) with claim_verification_protocol.md as authority. failure_paths.md Insufficient Novelty guidance routes through the bounded form instead of bare "strengthen the novelty claim". External motivation: Ren et al. (2026, arXiv:2607.13104 §7.4) — discovery agents cannot easily verify novelty on their own and may exploit weak proxies. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(novelty): #548 codex review round 1 — hedge wiring to abstract path + executable advisory resolution P1: abstract_bilingual_agent gains § Protected Hedges (consumes the roster incl. the #548 search-bounded qualifier; dropping it under word pressure = compression overclaim); draft_writer rule 3 names both consumers. P1: advisory rows gain stable ADV-E4-<n>/ADV-E5-<n> IDs with an explicit non-gating resolution path — proceed-open default, or user-requested reword routed through the existing integrity-correction dispatch (gate stays PASS); draft_writer accepted-ID grammar extended. P2: citation-density gate gains the absence-claim exception. P2: Schema 2 search_strategy gains optional last_searched_at; bounded template standardized to [date_range] (+ as-of); SUPPORTED_WITHIN_SEARCH made testable (exact database/date match, nearest-prior-work selection rule). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(novelty): #548 codex round 2 — in-body hedge transport + executable advisory contract + D2 consistency + date-required classification P1: Protected Hedges transported as an in-body closing list of the Draft Body (draft_writer emits, abstract_bilingual consumes) — no separate payload, no new output section. P1: advisory reword rides the existing Integrity Report -> Stage 3 roadmap -> Stage 4 revision; ADV grammar clause reverted from the integrity-correction path; Stage 4.5 record-only. P2: the #548 citation-density exception mirrored to all D2 surfaces (Quality Criteria, SKILL Writing Quality, writer/full.json D2 description). P2: SUPPORTED_WITHIN_SEARCH now requires last_searched_at (absent -> UNRESOLVED); schema note upgraded to SHOULD-record. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(novelty): #548 codex round 3 — producers emit last_searched_at, comment-based hedge transport, no-adjacent-work D2 case, E5 descoped to executable facts P1: bibliography_agent + literature_strategist Search Strategy templates emit last_searched_at (F2 ownership hash re-baselined same-commit per the documented procedure); ordinary generated inputs now carry the date E5 requires. P1: E5 contract descoped like E4 — decisions live in the checkpoint conversation, no downstream obligations, rewords are ordinary revision instructions, Stage 4.5 rows remain in the Final Integrity Report deliverable. P2: hedge transport moved to a <!--protected-hedges: ...--> comment (ref/anchor convention, invisible in rendered output); formatter checklist marks stripping it as required-not-content-loss; abstract_bilingual consumes the comment. P2: the explicit absence-of-adjacent-work statement satisfies D2 across all five surfaces (no forced inapplicable citation). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(novelty): #548 codex round 4 — search_strategy wired into both consumers + absence-claim exception in active enforcement contracts P1: Phase 4b declared inputs name the Annotated Bibliography's Search Strategy (the bound the writer fills); Stage 2->2.5 and 4->4.5 handoff rows carry Schema 2 search_strategy as the E5 comparison basis (orchestrator lock re-hashed). P1: the Knowledge Isolation Directive rule 2 and evaluator/full.json D3 gain the #548 exception so a valid no-adjacent-work statement is neither forced into [MATERIAL GAP] nor penalized downstream. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(novelty): #548 codex round 5 — integrity handoffs carry the Schema 2 bibliography (search_strategy + source relevance metadata) so E5 can ground the nearest-prior-work check Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
b286bed610 |
feat(scope): #547 per-sub-question scope bindings + Phase E scope-conformance advisory (#552)
* feat(scope): #547 per-sub-question scope bindings + Phase E scope-conformance advisory RQ Brief Schema 1 gains optional sub_question_bindings (inherits + user-approved deviations, absent = full-scope inheritance); research_question_agent records bindings per sub-question and never silently broadens; structure_architect sections name the sub-question they serve and inherit its bindings; Phase E gains an E4 scope-conformance advisory (SCOPE-BROADENED rows, advisory-only, never gates) with claim_verification_protocol.md as authority. External motivation: Ren et al. (2026, arXiv:2607.13104 §5.1) — decomposition fails when sub-problems stop preserving the original task's constraints. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * docs(changelog): #547 unreleased entry Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(scope): #547 codex review round 1 — E4 inputs on the pipeline path + schema-conformant producer output P1: Stage 2->2.5 and 4/4'->4.5 handoff rows now carry the #547 scope context (RQ Brief scope, sub_question_bindings, section->sub-question map) so E4 can execute at both gates; orchestrator content-lock hash updated same-commit. E4 gains an explicit inputs contract + [E4-SKIPPED: no scope context] fallback. P1: research_question_agent emits the separate Schema 1 sub_question_bindings block instead of inline annotations. P2s: effective-scope resolution defined (omitted axes inherit parent; approved deviations replace their axis, no re-flagging), advisory rows declared outside the zero-issues PASS count, changelog compat claim narrowed, Ren §5.1 "fails" softened to "becomes vulnerable" + design-inference label. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(scope): #547 codex round 2 — executable advisory contract + fallback-vs-skip precedence P1: drop the unwireable PASS-time reword dispatch; advisory rows (stable ADV-E4-<n> IDs) offer proceed-open / accept-with-justification, with rewords riding the existing Integrity Report -> Stage 3 roadmap -> Stage 4 revision path; Stage 4.5 record-only into the Process Record. P2: E4 skips only when the parent scope object itself is unavailable — absent bindings/section map fall back to whole-scope comparison (the promised pre-#547 behavior), never a skip. Orchestrator row marks scope as the required input; lock re-hashed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(scope): #547 codex round 3 — advisory contract descoped to fully-executable facts The E4 contract no longer promises any downstream fold: rows offer proceed-open / accept-with-justification only; a requested reword is an ordinary user revision instruction (rows are visible wherever the Integrity Report travels, citable by ADV-E4 ID); Stage 4.5 open rows remain recorded in the Final Integrity Report deliverable (Stage 6 carry claim dropped). CHANGELOG aligned. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE * fix(scope): #547 codex round 4 — MANDATORY integrity checkpoint displays advisory rows and records per-row responses The checkpoint template gains an advisory-rows line + a per-row prompt/record instruction (proceed-open default / accept-or-confirm; never blocks). Closes the last unwired promise: per-row decisions now have a defined display and recording surface. Orchestrator content-lock re-hashed same-commit. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hi625UBf6GX7aeWJpJpSnE --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
48bde6a0b1 |
feat(tiering): #517 model tiering — judgment/execution split, two opt-in directions, default untouched (#520)
* feat(tiering): #517 model tiering — judgment/execution split, two opt-in directions, default untouched One tiering mechanism per the frozen #517 design (Lance Martin, "Cost effective harnesses with Fable", 2026-07-10): - Default (ARS_MODEL_TIERING unset): byte-equivalent — every agent stays model: inherit. Same opt-in philosophy as terminal_policies. - economy (frontier session): 13 execution-type agents dispatch one tier below the session model, floor Opus-class, never Sonnet; draft_writer flagged as the highest-savings / most quality-sensitive downgrade. - quality-boost (below-frontier session): judgment-type agents at the Stage 2.5/4.5 gates + final-review surfaces step up to the frontier tier; nothing is ever downgraded. - Both directions carry explicit no-op announcements; unknown values warn once and behave as unset. Tiers are relative positions, never hard-pinned model ids (v3.7.0 opus-floor lesson). Classification: 39 agents (26 judgment / 13 execution; issue header's 25/12 arithmetic corrected, membership unchanged) in scripts/model_tiering_manifest.json + the canonical table in shared/model_tiering.md, pinned to each other and to the *_agent.md files on disk by scripts/check_model_tiering.py (11 mutation tests; wired into spec-consistency.yml + local pytest manifest, 60 -> 61). Consumers: compact "## Model Tiering (#517, optional)" block in the four SKILL.md files; SETUP en/zh-TW env-table rows; prompt-caching guidance (same-stage calls reuse the same worker) in the canonical doc. No agent-file edits (sha256-locked bibliography_agent.md untouched), no schema change, no hook. Spec: docs/design/2026-07-12-517-model-tiering-spec.md All CI lints + 61-entry pytest manifest green locally. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FczvB1WJjfumdJTg9YyL3X * fix(tiering): #517 round-1 codex fixes — dispatch-as-subagent mechanism, exact-set lint, caching scope, wording unification Addresses the round-1 codex review (2 P1 + 6 P2; 2 no-change with reasons): - P1 routing reality: canonical doc now states the mechanism honestly — a tier is selectable only at subagent dispatch; when a direction applies to an inline role, the session dispatches it as a subagent pinned to the target tier (that IS the mechanism); impossible-dispatch falls open to inline-on-session-model with a one-line announcement. PERFORMANCE.md en/zh "no separate model routing layer" reconciled. - P2 caching-vs-default: same-worker guidance scoped to active directions; unset default byte-equivalent incl. dispatch shapes. - P2 semantics drift: quality-boost = jump TO the frontier (not one increment); warn-once wording unified; SETUP rows name the final-review surfaces. - P2 lint subset-only + hardcoded dirs: exact per-(tier,skill) token-set comparison (missing/extra/duplicate tokens, per-row counts, duplicate rows) + repo-wide stray sweep; tests 11 -> 15. - P2 stale verification record: 60 -> 61 manifest entries in the spec. - No-change (documented): the PR-body session link is the repo's established harness attribution convention (48 occurrences in recent main history); Lance Martin/Anthropic is published-source author attribution consistent with the repo's citation norm. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FczvB1WJjfumdJTg9YyL3X * fix(tiering): #517 round-2 codex fixes — dispatch-time tier resolver, claim-ref audit surface, Stage 3' roster, PERFORMANCE cost qualification - P1 tier resolver: new "Resolving a tier at dispatch time" section — the no-hard-pinning rule governs repo files; the dispatch call resolves the relative target from the runtime's own model information (alias or current-generation id, ephemeral only); unresolvable -> announced no-op. - P1 claim_ref_alignment_audit: quality-boost surface corrected to its real dispatch slot (opt-in Stage 4->5, ARS_CLAIM_AUDIT=1), removed from the 2.5/4.5 gate list; SKILL blocks + SETUP rows updated. - P2 Stage 3' roster: canonical text now matches ARCHITECTURE (narrow re-review team; judgment roles there = eic + editorial_synthesizer); caching example rewritten accordingly. - P2 PERFORMANCE en/zh: plugin-agent cost-unchanged claim qualified with the unset condition + economy behavior for plugin-exposed execution agents (report_compiler). - P2 PR body refreshed (dispatch-as-subagent wording, 15 tests). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FczvB1WJjfumdJTg9YyL3X * fix(tiering): #517 round-3 P2 residuals — caching example covers the full 3' narrow team; PR body audit surface - Caching example names the authoritative Stage 3' re-review roster (field_analyst + eic + editorial_synthesizer) and states the reuse rule is tier-independent — field_analyst is the economy-affected role. - PR body quality-boost bullet gains the opt-in Stage 4→5 claim-ref audit surface (was omitted after the round-2 canonical correction). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FczvB1WJjfumdJTg9YyL3X --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
8c572ff483 |
feat(i18n): Korean trigger keywords + routing boundary fixtures (#452 PR 1) (#509)
Closes #452. Adds a Korean trigger-keyword line to all four SKILL.md files plus a conservative Korean subset in each frontmatter description — intent-specific compounds only, avoiding the broad standalone terms the proposal flagged (연구/논문/작성/검토). Keyword design and the six boundary phrases follow @devCharlotte's issue #452 proposal (the native-reviewed Korean README half shipped earlier in #469/#471). Two new routing smoke-test fixtures pin the key disambiguation with the proposer's native-authored phrases: 수정 (revise) -> academic-paper:revision, 심사 (referee) -> academic-paper-reviewer:full. All six issue boundary cases pass a routing smoke test on the current primary model (6/6). No changes to agents, IRON RULEs, integrity protocols, schemas, modes, or output-language behavior. Version Info Last-Updated synced (spec lint). Claude-Session: https://claude.ai/code/session_01UMzbXv6Q1NkCaGmaza3p5r Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
773dcfe152 |
feat(socratic): sharpen WP advisory exemption clause — decorated title-form shells (#505) (#507)
* feat(socratic): sharpen WP advisory exemption — decorated title-form shells (#505) Closes #505. Narrows the exemption clause in both socratic_mentor_agent.md files to require a named or operationalized specific (instrument/scale name, named theory/model/dataset/policy instrument, named site or population, specified causal pathway, or stated tension), declares domain-flavored topic-label pairs swappable, and adds the decorated-compound-title rule (noun-swap the part after the colon on its own). Measured against the held-out acceptance set per its README protocol (2 replicates, claude-sonnet-5 judges): overall miss 0.375/0.344 -> 0.094 in both replicates, off-list 0.778 -> 0.222/0.111, false-fire 0/16 held in both; no shell missed in both replicates; on-list gold set non-regression (regex detector untouched, sentinel tests 7/7). New in-prompt example strings substring-checked against every held-out item (zero hits). Deliverables: measurement-2026-07-11-505.json, README post-#505 section, judge reasoning excerpts appended, audit report. CHANGELOG also documents the already-merged #506 (#484 FARS caveat) for the pre-tag coverage gate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UMzbXv6Q1NkCaGmaza3p5r * feat(socratic): refine #505 exemption per codex P2s + final-wording re-measurement Round-2 refinements from cross-model review: generic demographic descriptors excluded from "named population"; decorated-title rule extended to single-topic subtitles ("X in/among Z"). Audit "5 of 7" corrected to 4 of 7; CHANGELOG "decorated title shells" corrected to "off-list shells". Measurement re-run from scratch on the final wording (2 replicates): overall miss 0.094 in both, false-fire 0/16 in both, no shell missed in both replicates; one judge prose-verdict inversion recorded faithfully. JSON now carries all four post-#505 runs (round1 + final). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UMzbXv6Q1NkCaGmaza3p5r --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
c9728d6d68 |
feat(socratic): WP advisory illustrative note + noun-swap test (#501 Part 1) (#503)
* feat(socratic): WP advisory illustrative note + noun-swap test, both mentors (#501 Part 1) Both socratic_mentor_agent.md files gain a paragraph after the WP01-WP20 table: the table is illustrative, not exhaustive; the operative judgment is the noun-swap test; clearly-failing off-list shells may fire at the same high-confidence bar; domain-native phrasing must not trigger. Advisory stays non-blocking, surface-phrasing-only; sentinel contract strings unchanged. Direction from the PR #468 review thread (@brycewang-stanford). Part 2 (held-out miss-rate measurement) stays open in #501. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J5H6Y91XDjmnGcQbkZTWuE * fix: align noun-swap wording with its own definition (codex P1) Shell-like phrasing survives the swap; domain-native phrasing does not. The first draft said off-list shells 'fail' the test, inverting the stated definition. Unified on survive/does-not-survive in both agent files and the CHANGELOG entry. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J5H6Y91XDjmnGcQbkZTWuE --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
f417bc63cf |
feat(academic-paper): intro rhetoric (CARS) + title-crafting reference (#500) (#502)
* feat(academic-paper): intro rhetoric (CARS) + title-crafting reference (#500) Adds references/intro_title_rhetoric_guide.md: CARS three-move Introduction guidance (licensed-gap rule, universal-negative trap, purpose-sentence discipline, common-failures table) plus a title-crafting section (anatomy, four title types with claim-level cautions, checklist, worked examples, WP06/WP17/WP18 shell cross-check). Wiring: draft_writer_agent Step 1 setup checklist item; SKILL.md File Structure reference list gains the entry (stale count 20 corrected to the actual 28). CHANGELOG [Unreleased] entry included. Gap surfaced by PR #485 (@lorenzo392); the new-skill shape there stays declined, this lands the two uncovered content areas as a reference file per the maintainer response. Closes #500 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J5H6Y91XDjmnGcQbkZTWuE * fix(academic-paper): address codex P2s — enumerate all 28 references, split CARS 1990/2004 provenance, fix scoped-negative example (#500) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UMzbXv6Q1NkCaGmaza3p5r * fix(academic-paper): provenance states 1990 CARS steps are adapted, not followed verbatim (#500) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UMzbXv6Q1NkCaGmaza3p5r --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
cf973a8f7f |
fix(harness): retire expired scaffolds from 17-agent continuation audit (2 P1 + 9 P2) (#490)
* fix(harness): retire expired scaffolds from 17-agent continuation audit (#489) Apply the 11 user-accepted findings from audits/harness-retirement-2026-07-04.md (4-batch Fable 5 audit + codex cross-model challenge; 2 P1 + 9 P2): - B2-F01/B2-F02 (P1): deep-research socratic_mentor — delete stale 10/15-round constants contradicting the v3.0 40/60 + exploratory carve-out; merge the duplicated Auto-End machinery into one 6-condition authority - B3-F02 (P1, threshold=30 per user): academic-paper socratic_mentor — Auto-End Rules table becomes the single authority; conflicting 15-round bullets removed - B3-F01: 12-row question-template tables -> 1 canonical example per type - B3-F03: visualization Steps 2-6 narration -> pointer lines (6.5/6.6 untouched) - B1-F01/B1-F02: orchestrator — drop happy-path resume example; dispatch sub-list -> Checkpoint Confirmation Semantics pointer; add missing `view progress` row; fix duplicate step numbering - B1-F03: state_tracker — compress zero-information stage "2"/"3p" exemplars - B2-F03: report_compiler — trim basic citation few-shot, keep non-obvious rules - B4-F01: stale "prompt-level only / hook deferred to #134" enforcement sentence rewritten at 23 agents + 4 SKILL.md (guard shipped in #294); mirrors resynced - B4-F02: SETUP.md + zh-TW — gpt-5.4/Opus-4.8 lineup drift (6 lines each) User-rejected: B3-F04 (keyword mapping table stays), B4-F03 (field_analyst examples stay). 2026-06-10 F-007 closed as verified-no-rewrite-needed. Verification: run_ci_pytest_manifest 58/58 green; phase-boundary, write-scope, spec-consistency, collaboration-depth, mirror-sync lints green; personal-boundary scan 991 files / 0 violations. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YBdGUAb184hmuiRiWAm4A9 * fix(harness): carry stop-here/change-settings aliases into semantics table (codex review P2) The B1-F02 dedup made the Checkpoint Confirmation Semantics table the single authority but dropped two aliases documented only in the deleted dispatch sub-list. Table is now a strict superset of the removed copy. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YBdGUAb184hmuiRiWAm4A9 * refactor(harness): /simplify pass — tighten enforcement sentence, fix pointer label - S1/Efficiency: enforcement sentence body 39->35 words across 23 agents (+2 mirrors resynced); drops non-semantic slack (~16 tok/dispatch x 24 surfaces), keeps all five load-bearing facts and spec vocabulary (deterministic, rescope). Lint pins only the prefix marker — green. - S2: visualization Step 4 pointer label aligned to the actual heading "Figure Numbering and Captions (APA 7.0)". - ALT-1 (defrift lock: canonical-string pin in the phase-boundary lint + SETUP model-token parity) deliberately NOT done here — tracked as #491. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YBdGUAb184hmuiRiWAm4A9 * chore(lint): bump bibliography_agent F2 baseline hash after B4-F01 sentence rewrite The v3.9.4 F2 ownership guard pins bibliography_agent.md by sha256 so any edit forces review. Reviewed: the B4-F01 apply changed only the Phase Boundary enforcement-status sentence; no M6 citation-provenance / M5 version-family / temporal logic moved, so the invariant holds. Baseline updated per the lint's documented procedure. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YBdGUAb184hmuiRiWAm4A9 --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
96e4f98b6e |
chore(prompts): retire expired writing-harness scaffolds in 4 Bucket A agents (#476 P2) (#478)
Applies the 5 P2 findings from the 2026-07 harness-retirement audit plus one adjacent duplication found while applying F-004. All reductions; no behavior added; every domain convention and load-bearing constraint preserved. - abstract_bilingual (F-001): dedupe the "Common Errors" list against the Independence red flags above; keep only the non-overlapping per-language points. - citation_compliance (F-002): collapse the 3-step format auto-detect ladder to a signature table + the one-line "default APA 7th" fallback (fallback preserved). - research_question (F-003): rewrite the Socratic "What It Does NOT Do" negatives as positives; preserve the failure_paths F1 escape-hatch (its only definition). - draft_writer (F-004): collapse the triple-templated drafting block (step-by-step algorithm + duplicate TEEL framework + duplicate register table) to the TEEL convention + drafting order; TEEL now single-sourced at Paragraph Structure. - draft_writer (F-005): 4 basic citation-format examples -> one rule + the page-locator direct-quote example. - draft_writer (adjacent, user-approved): citation-method decision tree deduped to the two non-redundant cases (contrastive + secondary citation). Net -112 lines. Full CI pytest manifest green. Report-scope only; no contract, no lint-mirrored prose, no Phase Boundary / citation-contract / formatter-gate touched. Refs #476. Claude-Session: https://claude.ai/code/session_01N9rzRUcxhpjJsY5zTEPtKQ Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
502e0e2b97 |
#439: user-declared format_profile (schema + intake + formatter) (#441)
#439: user-declared format_profile (schema + intake + formatter) A scholar-declared layout/format profile the Phase 7 formatter follows when rendering — fonts, caption placement, line spacing, margins, table borders. ARS ships the contract, never any school's or journal's profile content. Closes the gap surfaced by #436 (a downstream fork had to fork+add a whole layer because there was no upstream way to declare a layout profile). Decision B (standalone format_profile, not a venue_profile extension): verifier-input vs renderer-input is a schema smell, lifecycle + data semantics differ. Design-first (docs/design/2026-06-15-439-format-profile-design.md), through codex design review, two /simplify passes, and a dual-track ship gate (codex review + security-review, 0 P1/P2, 0 vulns). - Schema: minimal field set (body_font, caption incl. latin_font_family for the #436 CJK case, line_spacing fixed_pt biconditional, margins_cm, table_border_style), additionalProperties:false, no provenance machinery. - Intake: Step 5 follow-up (DOCX/PDF/LaTeX) -> YAML by path in a new PCR row; a declined follow-up writes nothing (Invariant 7 byte-equivalence). - Formatter: reads by path, applies declared fields, first-line byte-equivalence guard, fail-closed STOP on bad/empty/escaping paths, declared-only no-inference, best-effort-per-target, venue-compliance-wins precedence. - POSITIONING boundary: ships the mechanism, never a specific institution's profile content (out-of-tree, user-supplied). 8-invariant lint, 43 tests (mutation discipline), CI green. Fail-closed is prose-tier this release; the deterministic-reader parity gap vs venue_profile is recorded in design §10 as a future slice. Closes #439 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
209c221eb0 |
Integrate PR #433 as modes: three-way-scan + rebuttal-audit (#437)
* fix(lint): exempt docs/superpowers/ from invariant 6 forward-version check superpowers skill specs/plans intentionally plan the next release, so a forward version reference there is their job, not published-doc drift. Carve-out is scoped to superpowers/ (control test proves other docs/ still gated). Surfaced by running version-consistency lint on a branch carrying this PR's own plan doc. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(deep-research): add three-way-scan mode (WHY/HOW/WHAT paper triage) Rescued from PR #433 (@Yaobin29), fixing its two defects: the Operational Modes table row was missing and the bottom Version Info contradicted the frontmatter (2.9.4 vs 2.10.0). Adds trigger keywords, decision-tree branch, mode-selection-guide entry, the mode table row, and the WHY/HOW/WHAT section. deep-research 2.9.4 -> 2.10.0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(academic-paper): add rebuttal-audit mode (standalone rebuttal-draft QA) Rescued from PR #433 (@Yaobin29)'s audit concept. Advisory-only QA of an existing rebuttal draft against reviewer comments (per-comment coverage + gaps + risk flags). Explicitly suppresses Schema 11 / Material Passport / ready_to_submit since a standalone invocation bypasses pipeline integrity gates — enforced by a new check_rebuttal_audit_guard() lint + mutation tests. Also extends revision-coach trigger/docs to cover pushback posture and non-journal scopes (conference / grant-panel / transfer-after-review). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * chore: sync mode-count across registry/lint/docs/READMEs for 2 new modes (25->27) Updates MODE_REGISTRY (25->27, deep-research 7->8, academic-paper 10->11, + 2 mode rows + summary), tri-lingual check_spec_consistency pins (EN/JP/ Traditional/Simplified), mode_spectrum, .claude/CLAUDE.md skills table + new Routing Rule 6 (rebuttal-audit input-shape gate), ARCHITECTURE mode table, and all 4 README mode headings/examples. ja failure-checklist '7 モード' prose deliberately untouched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(commands): add /ars-3w and /ars-rebuttal-audit slash commands Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * release: bump suite 3.12.0 -> 3.12.1 + CHANGELOG + credit @Yaobin29 Version bump across all current-version surfaces (plugin/marketplace manifests, academic-pipeline SKILL frontmatter+title+table+last_updated, .claude/CLAUDE.md suite version + skills table, ARCHITECTURE title+graph+component markers, MODE_REGISTRY last-updated, 4 README badges + skill-detail headings, lint pins). Historical references preserved: the v3.12.0 (2026-06-08) CHANGELOG entry and its README mirrors are untouched. CHANGELOG [3.12.1] entry added (inserted after the nonempty [Unreleased] section). README Contributors credits @Yaobin29. academic-pipeline last_updated synced to 2026-06-15 to satisfy date-sanity. All six spec-consistency-workflow lints green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: sync spec-consistency README fixtures to v3.12.1 + 8/11 mode headings The lint's own self-tests hardcoded 3.12.0 badges and 7/10 mode headings; after the suite bump + mode-count change they no longer matched the lint's expectations. Updated the aligned/stale README fixtures to v3.12.1 and the deep-research/academic-paper mode headings to 8/11. Full pytest: 2763 passed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: sync deep-research v2.10.0 + new modes in ARCHITECTURE/READMEs (codex review) Codex review of the actual version-bump diff caught a lint blind spot the mechanical checks could not: deep-research was bumped to 2.10.0 in its frontmatter/table, but the ARCHITECTURE stage table + graph and all 4 README skill-detail sections still showed v2.9.4 and omitted three-way-scan / rebuttal-audit — and the lint PINS were stale too, so pin-and-file agreed at the wrong version and the lint stayed green. Fixed all surfaces + pins + fixtures; also synced .claude/CLAUDE.md Last Updated to 2026-06-15. All 6 lints green; full pytest 2763 passed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs: backfill mode_selection_guide to detail all 11 academic-paper modes (codex ship-gate P3) Codex ship-gate review caught that academic-paper/references/mode_selection_guide.md detailed only 8 of the skill's modes — the flowchart and per-mode sections never covered revision-coach or disclosure (both pre-existing baseline staleness), and the new rebuttal-audit mode was absent. Meanwhile SKILL.md's file-inventory note was bumped to "mode_selection_guide (11 modes)", making the claim-vs-reality gap larger. Backfills the three missing per-mode sections (revision-coach / disclosure / rebuttal-audit) plus matching flowchart branches, Quick Decision Table rows, and trigger examples — including the revision-coach vs rebuttal-audit input-shape gate and rebuttal-audit's integrity boundary (no Schema 11 / Material Passport / ready_to_submit). The guide now details exactly 11 modes, matching SKILL.md's Operational Modes table 1:1, so the "(11 modes)" reference is now true. Docs-only; no lint asserts this file (which is why it could drift). All 6 lints green; full pytest green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
5082006e7e |
fix: route integrity-FAIL correction rounds through patch sequencing (#89 Item 8) (#429)
Route integrity-FAIL correction rounds (Stage 2.5 / 4.5) through the §390 patch-mode revision dispatch instead of unspecified full-mode re-drafting, closing the #89 Item 8 adoption gap. Adds an integrity-correction variant (no Schema 8 response items; applied output returns to the issuing integrity gate for re-verification) and a stable IL-<SEVERITY>-<n> Issue List correction-ID scheme. Records the no-action audit verdict for the remaining three Item 8 loops. Cross-model review (codex gpt-5.5, xhigh) converged at 0 P1 / 0 P2 over 4 rounds; spec-consistency lint + CI pytest manifest pass. Prose-only (3 agent prompt files). Refs #89 (Item 8), #390, #423, #426 |
||
|
|
893e45ae31 |
feat: diff/patch revision mode Slice B — revision-mode adoption (#89 Item 7) (#426)
Closes #424 Slice B of #89 Item 7 (spec #390), building on the Slice A deterministic toolchain (#423). `academic-paper` revision mode now runs **anchorize → patch → deterministic apply → finalizer** instead of asking `draft_writer_agent` to re-emit the complete paper — confining the DELEGATE-52 silent-distortion surface to the blocks an operation explicitly touches. ## What landed (the 6 deliverables) 1. **Writer patch-output contract** — `draft_writer_agent.md § Patch-Document Revision Emission`: patch as a `phase6_*/revision_patch_round<N>.json` sidecar (#424 emission decision), hashes copied from the block manifest never computed, `[PATCH-ESCALATION-REQUIRED:]` pre-drafting tag, retry-once, provisional Schema 8 items with mechanical fields left to the orchestrator. 2. **Orchestration sequencing** — `pipeline_orchestrator_agent.md § Revision-Round Patch Sequencing`: five normative steps with a no-rewrite window between manifest generation and apply (a finalizer pass in between would produce spurious hash mismatches). 3. **Escalation gate** — two trigger layers (pre-drafting classification / apply-time `refused_structural`), MANDATORY checkpoint wording, never auto-fallback to full re-emission, escalated rounds re-anchorize under a new ID generation and stamp `mode: full_reemission_escalated`. 4. **Schema 8 delta** — `ResponseItem.change_block_ids` (optional), orchestrator-populated from the apply report (§3.5 role split — inserted block IDs are post-apply facts). 5. **Protocol doc + Mode B commands** — `academic-paper/references/revision_patch_protocol.md`: exact anchorize/apply command sequence, exit codes, apply report as a required re-review input, marker lifecycle. 6. **Lint** — `scripts/check_390_revision_patch_discipline.py` (8 invariants) + 30 mutation tests, wired into `spec-consistency.yml` + the pytest manifest. ## Recorded ship decisions (spec §0 amendment, cross-model concurrence) - **`touched_ratio` threshold = 0.6** — now the apply-script CLI default, strict `>` comparator, `1.0` disables. - **`insert_after` heading-anchor exemption** — anchoring on a heading no longer fires the heading trigger when the inserted text carries no headings (routine "insert body text after a section heading"); heading replace/delete and heading-bearing inserted text still flag. ## §10 open items closed (verified, not assumed) First-party check found that `formatter_agent.md` had no marker-strip rule for ANY marker kind and `word_count_conventions.md` had no comment-exclusion rule — the spec's "expectation" pointed at nothing. Both added: Phase 7 strips all ARS markers (`ref`/`anchor`/`block`) from converted final outputs after the marker-dependent gates run (working drafts + `phase6_*/` keep theirs); word counts strip `<!--...-->` before splitting. Max single-op `new_text` size folded into the existing triggers (no separate cap). `preserved_ratio` surfaces next to the #389 round-trip count. ## Quality - Full CI pytest manifest green (52 entries; +1 new entry). - `/simplify` pass extracted the shared `h2_section_body` / `check_section_literals` helpers into `scripts/_skill_lint.py` (check_390 + check_394 now import them) and de-duplicated the protocol-doc marker lifecycle into authoritative pointers. - Dual-track ship gate: personal-boundary lint PASSED (0 violations); codex `exec` read-only review (gpt-5.5, xhigh); diff carries no `HEEACT`/`Springer`/`hei-platform` strings. 🤖 Generated with [Claude Code](https://claude.com/claude-code) |
||
|
|
c7f42d4b88 |
feat: submission-package verifier Slice 4 — terminality (#394) (#418)
The fourth and final #394 slice: terminality. terminal_policies.submission_package (closed enum, citation_existence pattern); --policy / --check-freshness CLI with fail-closed VERIFICATION-INCOMPLETE (exit 4), STALE-REPORT (exit 5), tokens-not-exit-codes contract, inputs_fingerprint over external inputs, fresh-report verdict re-emission, and reuse-side roster guard; orchestrator Submission-Package Terminal Gate (Stage 5, post-formatter; advisory path re-dispatches the formatter append-only); formatter Submission Package Advisories section; check_394_submission_policy.py lint (5 invariants incl. the AST single-homed guard) + CI wiring; policy_hash scoped to citation-time keys; spec §5.2/§5.3 amendments per the gate-1 Option B adjudication. Review trail: gate-1 plan review (1 P0 → Option B + 4 P1 + 2 P2), /simplify, gate-2 diff review (2 P1 + 1 P2), independent context-reviewer pass (2 P1 + 4 P2), final confirmation round (2 P2 + 1 P3), security review (0 findings) — every finding adjudicated and adopted or skipped with recorded reasons. TDD throughout; five killed mutations; full suite 2584 passed. Closes #394 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
9dca765db5 |
feat: submission-package verifier Slice 2 — scholar-declared venue profile + Family B limits checks (#394) (#408)
* feat(scripts): slice 2 round 1 — venue_profile schema, Family B roster, NOT-CHECKED without profile (#394) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * feat(scripts): slice 2 round 2 — Family B limits checks B1-B5 + --venue-profile (#394) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(scripts): slice 2 round 3 — partial profile, tolerance boundary, invalid profile, tex detex declaration (#394) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs+feat(intake): slice 2 — intake Step 3 venue-profile follow-up, spec B-ids/§10.4 adjudication, CHANGELOG (#394) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(scripts): adopt codex slice-2 review — schema-strict profile validation, scope-all counts everything, canonical manuscript selection (#394) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * refactor(scripts): apply /simplify slice-2 review — registry-bound signal class, schema-derived profile gate, single refs-title source, one bib parse (#394) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
ddeea7df73 |
feat(intake): surface citation-verification level at the configuration interview (#392) (#402)
* feat(intake): surface citation-verification level at the configuration interview (#392) Adds Step 13 to the intake interview: "mark only (default) / strict", one sentence of field guidance. A strict answer seeds terminal_policies.citation_existence: strict on the Material Passport at materialization (finalizer stays the sole policy evaluator); a mark-only or absent answer records the PCR row and writes nothing — per-key absence already means advisory (Invariant 7), so unprompted runs stay byte-identical. Plan mode exempt (mirrors Step 12). No default changes anywhere. New lint check_392_citation_verification_intake.py (4 invariants, mutation-verified), incl. the anti-orphan guard: the no-handoff directive must affirmatively reach Step 13 — the exact #327 P1 failure that orphaned Step 12. 8 unit tests; wired into spec-consistency.yml + CI pytest manifest. SKILL.md Phase 0 summary updated (the stale "9 items" line now enumerates Steps 9-13 too). Closes #392 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test: anchor C8 negation fixture on the period-less directive core (#392) test_neg_h2_step12_mentioned_but_negated replaced the exact directive sentence including its final period; the #392 directive-tail extension (", then Step 13 (Citation Verification Level).") moved the period, so the replace no-opped and the fixture precondition failed. Anchor on the period-less core phrase so tail extensions don't break the mutation fixture. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
b84e48aa4c |
feat(socratic): extend Layer-5 contribution probes into plan mode + revision coaching (#393) (#400)
* feat(socratic): extend Layer-5 contribution probes into plan mode + revision coaching (#393) Mirrors the socratic_mentor Layer 5 (SIGNIFICANCE & CONTRIBUTION) question patterns into two later-stage surfaces (blindspot-audit F-2, adjudicated shape 1): - academic-paper plan mode: new Step 2.5 CONTRIBUTION SHARPENING between chapter negotiation and the argument stress test, anchored to the user's Chapter Summaries, extracting [INSIGHT: contribution_claim]; Source & Boundary section maps each instantiated question back to its Layer-5 pattern. - academic-paper-reviewer Phase 2.5: new step 3 contribution framing probe (5 -> 6 steps; no external step-number references existed). Single-sourcing: Layer 5 owns the pattern family; both surfaces are labeled instantiations, and Layer 5 gains a downstream-consumers note (re-derive, don't fork). Boundary per Kong L2 verb test: questions only — never propose / substitute / rank / expand / select; an unanswered probe is recorded, not filled in. Pattern-protection, line-budget, spec/version-consistency, RQ-framing and reading-probe lints all green. Closes #393 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(393): adopt codex review — true single-sourcing via L5-W IDs, verb-test tightening (#393) Codex cross-model review of the first draft: 1 P1 + 2 P2 + 1 P3, all adopted. - P1: the draft carried labeled copies of the questions in three files. Layer 5 now owns three later-stage anchored forms with IDs (L5-W1/2/3); plan mode Step 2.5 and reviewer Phase 2.5 step 3 reference the IDs and carry no question text. - P2 (verb test): "probe the contribution argument the outline now implies" let the mentor infer-and-offer; reworded to "ask the user to articulate the contribution their Chapter Summaries claim; quote only user-written text". - P2 (third divergent consumer): the orchestrator Stage 3->4 coaching sketch now defers to the reviewer SKILL.md six-step list as authoritative (net-zero line edit; surface has 1 line of v3.6.7 budget headroom). - P3: [INSIGHT: contribution_claim] extraction is now conditional — unanswered probes are recorded as open questions carried into Step 3. All lints re-verified green incl. the v3.6.7 line-budget test. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(393): adopt independent-reviewer findings — wrong-file resolution + anchor permission (#393) Independent context reviewer (third gate) on the post-codex diff: 1 P1 + 1 P2, both adopted. - P1 (execution-time reachability): the repo has TWO same-named socratic_mentor_agent.md files; plan mode dispatches the academic-paper variant, which has no Layer 5 — and its own prompt flow went Step 2 -> Step 3 with no Step 2.5, so the probe defined in plan_mode_protocol.md would never have fired. The agent prompt gains a Step 2.5 Contribution Sharpening section that references L5-W1/2/3 by full path (deep-research/agents/...), and the protocol's inline reference is path-disambiguated against the same-named local file. - P2 (one-way carve-out): L5-W3's "consumers may adapt the anchor noun" read as an unbounded edit permission when reached via the by-ID cross-reference; tightened to noun-phrase-swap-only, never re-anchoring to a contribution the user did not state. All lints green incl. write-scope and v3.6.7 line budget. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
f9a5ad6d9f |
fix(harness): retire Fable 5-stale model pins — opus command floor, display names, gpt-5.5 lineup (#383)
Harness-retirement audit 2026-06-10, second model-generation pass (follows the #301/#347 Opus 4.7->4.8 pattern). Trigger: primary session model moved to Fable 5. - commands: the v3.7.0 `model: opus` frontmatter floor on /ars-full, /ars-reviewer, /ars-revision-coach inverted into a silent downgrade ceiling under a stronger-than-Opus session model; the three heavy commands now inherit the session model. The 11 light-mode `model: sonnet` pins are deliberate cost routing and stay. - cross_model_verification.md: primary-model row made generation-agnostic (named "the inherited Claude Code session model") so it stops needing a per-release bump; OpenAI verifier lineup unified gpt-5.4 -> gpt-5.5 / gpt-5.5-pro (judge default was already gpt-5.5-xhigh while the doc taught 5.4, and the `gpt-5.4*)` case glob rejected 5.5 ids; web_search-on-Responses + pricing verified first-party 2026-06-10; legacy gpt-5.4* ids remain accepted; cost table re-anchored on gpt-5.5 $5/$30). - announce hook + PERFORMANCE(+zh-TW): the per-session "$4-6 on Opus 4.7" anchor (two generations stale) reworded to name its measurement provenance (Opus 4.x) and order-of-magnitude status; recommended-model line no longer pins a generation. - issue-133 routing smoke: acceptance threshold reworded from "100% on Opus 4.7" to "100% on the current primary model"; Fable 5 recalibration run 2026-06-10: 8/8 routing-class pass (clarify/proceed + all three escape-hatch behaviors). - compliance surfaces: two bare anti-hallucination tails kept as annotated debt (high-stakes domain, silent failure mode). - disclosure protocol: e.g. model list refreshed. Deferred, tracked separately: #272/#273/#274 premise re-baseline against the Fable 5 system card; negative-framing sample-reframe of the top-3 agent files at the next minor. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
d0663404ff |
#260: Experiment Provenance Intake + claim→experiment alignment (schema-first) (#374)
## #260 — Experiment Provenance Intake + claim→experiment alignment (schema-first) Adds the **intake + alignment** layer for experiment-backed claims (Kong et al. 2026, arXiv:2605.18661, §3.3 + §7.4.3). ARS deliberately keeps experiment **execution** outside the pipeline — the scholar runs experiments externally and brings results back; this change records that provenance and audits manuscript claims against it. Explicit non-goals (carried verbatim into the gate wording): does not run experiments, does not judge whether one was correctly designed/run/statistically-adequate/reproducible, does not auto-fill provenance, does not require provenance for literature-only pipelines. ### What ships **Block A — `experiment_provenance[]` aggregate** (`experiment_provenance_entry.schema.json`): each scholar-entered entry carries a nested `repro_lock` (same inline-object shape as the passport-level lock, re-declared — not `$ref`'d — because the source is inline prose, not a schema file), a `planned_vs_executed[]` record (each `executed:false` unit carries a gate-checked `skip_reason`), and `negative_results[]` / `known_limitations[]` whose **key must be present** (empty `[]` = well-formed advisory; absent key = malformed → gate FAIL, the absent-key rule ported from #261 C3). **Block B — claim→experiment alignment**: the claim manifest gains an optional per-claim `planned_experiment_ids[]` join field, plus a **fourth ref_slug-less aggregate** `experiment_alignment_results[]` (`experiment_alignment_result.schema.json`) with a MECE verdict enum `{ALIGNED, OVERSTATED, NOT_SUPPORTED_BY_PROVENANCE, PROVENANCE_INSUFFICIENT}`. The verdict is **produced by the integrity verification agent AT the gate** (Stage 2.5 sampling / 4.5 full), mirroring #261 C3 — so the row is emitted and gated in the same pass, avoiding the stage-ordering race. A **mixed-evidence claim** (both `planned_refs` and `planned_experiment_ids`) is audited by both paths; the gate decision is **worst-verdict-wins**. `PROVENANCE_MISSING` is deliberately NOT a verdict — a dangling `experiment_id` is a structural lint FAIL, never a fake judge row. ### Invariants + enforcement layering Seven cross-array lint invariants in `check_claim_audit_consistency.py`: EP-INV-1 (experiment_id unique), EP-INV-2 (planned_experiment_ids resolve — rename + forward-reference guard), EP-INV-3 (experiment ids ⟹ empirical; mixed allowed), EP-INV-4 (declaration↔provenance symmetry), EP-INV-5 (declaration well-formedness when present), EA-INV-1 (finding_id unique), EA-INV-2 (alignment-row references resolve). The persisted passport-level `experiment_intake_declaration` gives a **fail-closed legacy boundary, split by enforcement layer (stated precisely)**: the lint deterministically enforces declaration↔provenance *symmetry* (EP-INV-4) and *well-formedness* (EP-INV-5); the **integrity gate — not the lint — owns the `ars_version` numeric legacy decision and the declaration-presence FAIL** (a passport is `legacy_unknown` only with positive `ars_version < #260-constant` proof, everything else is treated-as-post-#260 so the declaration is REQUIRED). The `ars_version` numeric half is kept at the gate layer by design: the release constant it compares against is frozen at ship time, not at intake. ### Three documented departures from the issue's literal text Each corrected after a first-party read of the **tracked** repo: 1. `repro_lock` is an inline-prose object, not a schema file — so "inherit repro_lock" means nesting the shape, not `$ref`'ing a non-existent file. A shared `repro_lock_validation.py` single-sources the field set (imported by both checkers) with a drift test. 2. The claim manifest had **no** experiment pathway (`additionalProperties:false`, `planned_refs` is literature-only) — the join field is **added**, not assumed. 3. "Path X / Tier-1 required / writer-binding" are not named conventions in the tracked repo — the discipline is **described**, not cited by a name a reader cannot find. Two spec-table typos found during implementation were also corrected (the `report_compiler_agent` path and the pytest invocation path). ### Producers (taught in lockstep) Three manifest writers (`synthesis_agent` / `draft_writer_agent` / `report_compiler_agent`) emit `planned_experiment_ids` when an experiment backs a claim; the integrity agent gains a disclosure-only Phase carrying the POSITIONING non-goal verbatim; the orchestrator carries the aggregate + declaration forward; README intake detection sets the declaration. ### Tests `examples/passport_with_experiment_provenance.yaml` (2 experiments, a mixed-evidence claim, an OVERSTATED row) + full TDD suite: schema ±, fail-closed symmetry, declaration well-formedness, mixed-evidence two-row, verdict-derivation, mutation-verified non-vacuous invariants (each fixture flips fully clean when its invariant is neutralised), reverse-invariant producer pins, repro_lock drift, literature-only regression, and a documented D4-c carve-out boundary (the experiment carve-out is the LLM-caller's job; the deterministic detector is manifest-unaware — pinned explicitly so a future deterministic caller is on notice). Full suite green (2347 passed, 0 regression). ### Not a release CHANGELOG `[Unreleased]`. All schemas, the manifest field, and all seven invariants are additive and backward-compatible. Closes #260 🤖 Generated with [Claude Code](https://claude.com/claude-code) |
||
|
|
4464abe04c |
feat(#261): Figure/Table Fidelity Gate — caption-claim trace + Stage 4.5 check (#372)
Closes #261 ## What Adds the **Figure/Table Fidelity Gate** — the visual analog of the §F.3.2 partial-evidence trap addressed for prose citations in #213 and review synthesis in #214 (Kong et al. 2026 §3.4, arXiv:2605.18661). The existing VLM Figure Verification Protocol checks *"does the rendered figure match the source data?"*; it cannot check *"does the caption's interpretation follow from the data, and does the manuscript cite this artifact for a claim it actually supports?"* This PR closes that gap. ## Approach — prose-layer only (mirrors #214, not #213) The `figure_table_trace[]` producer (`visualization_agent`) and consumer (`integrity_verification_agent`) are both LLM agents reading a markdown Figure Package — there is **no deterministic downstream parser**, so this ships as a prose contract with **no JSON Schema, no lint invariant, no gold fixture**. Machine-validating the YAML shape would be false rigor (it proves field presence, not visual claim fidelity) and an unrequested maintenance surface. This is the same scope decision #214 made; #213 got schema+lint only because it has a machine consumer. ## Changes (5 files, +244 / -1, prose/protocol + doc example only) - **`academic-paper/references/vlm_figure_verification.md`** — new Figure/Table Trace section: the `figure_table_trace[]` block (six required keys: `artifact_id`, `source_data`, `transformation`, `caption_claim`, `supported_manuscript_claims`, `limitations`) + field rules. - **`academic-paper/agents/visualization_agent.md`** — emits the trace in the Figure Package (new Step 6.6); claims identified by text + locator (not a bare id — the agent can run before the draft's claim manifest exists). - **`academic-pipeline/agents/integrity_verification_agent.md`** — Phase **C3. Figure/Table Caption Fidelity** at Stage 4.5: entry well-formedness (malformed → short-circuit FAIL) + four fidelity checks (trace completeness / caption-claim support with compound-caption sub-claim decomposition / bidirectional manuscript-claim linkage / limitation visibility), with an explicit FAIL-vs-advisory severity table and per-entry precedence. - **`examples/figure_table_trace_example.md`** — 3-figure + 1-table ML ablation walkthrough (normal trace, decomposed compound caption, empty-limitations advisory, reverse-linkage omission). - **`CHANGELOG.md`** — `[Unreleased]` entry. ## Key design points - **Severity is split, not blanket-advisory.** A caption that contradicts *or is unsupported/overstated by* the data, an untraceable claim-bearing artifact, a missing/overstated/omitted manuscript link, or a dropped known limitation → **FAIL (block)**. Only uncertainty signals are advisory: empty `limitations: []` → `[FIGURE-LIMITATIONS-EMPTY]` (never a silent pass), VLM skipped with reason, legacy figure with no package. - **Anti-skip:** an updated Figure Package missing the trace is a FAIL, not the legacy advisory case. - **Bidirectional linkage:** every *substantive* manuscript use of an artifact must be listed (incidental/structural mentions exempt) — catches one-sided traces that declare only flattering support. - **Inherits, doesn't duplicate:** C3 reuses the C1 data-cross-referencing layer; it does not re-render figures (VLM) or re-verify raw data (C1). Its new coverage is interpretation + linkage. ## Verification - Regression green: **2291 passed / 3 skipped / 1 xfailed**. - Reviewed across multiple independent passes to convergence; severity table verified exhaustive and mutually exclusive. 🤖 Generated with [Claude Code](https://claude.com/claude-code) |
||
|
|
36ee7df81f |
feat(#274): concise output discipline + pressure-stable boundary reinforcement (#369)
## Summary Closes #274 — a guidance-layer follow-up to the Claude Opus 4.8 system card §4.1.4, which documents two behavioral signals: (1) refusals/responses trend longer and more over-caveated than 4.7, and (2) a small number of multi-turn cases where a correct refusal was retracted under sustained pressure. Both are quality-of-output issues a user feels directly in a review tool — a verdict buried in hedging, or a boundary that quietly gives way. Guidance layer only. This strengthens prompt text; it makes **no** claim of having proven 4.8's runtime behavior. ## Changes - **Concise output discipline** inlined (before `## Output Format`) into the report-producing reviewer agents — `domain` / `methodology` / `perspective` / `eic` / `devils_advocate` / `editorial_synthesizer` reviewers and `academic-paper/peer_reviewer`. State findings and verdicts directly; don't pad with repeated qualifiers or restated caveats. **Concise explicitly does NOT mean under-caveated** — preserve every material uncertainty; cut only redundancy. - **Pressure-resistance reinforcement** — one general "pressure is not evidence" rule added to the Devil's Advocate Anti-Sycophancy Rules and the editorial synthesizer's arbitration discipline: repeated pushback / authority appeals / bare softening requests do not change a finding; only a substantive rebuttal meeting the existing concession threshold (≥4 normally, 5/5 after a prior concession) does. Framed by evidence standard, not as an attack catalogue — public-repo safe. - **Epistemic-status line** on every block: these are prompt-surface instructions; they cannot prove the model stays pressure-stable at runtime — that would need a separate non-deterministic behavioral eval. ## Honesty bound (the crux of this issue) The issue's acceptance "confirm boundaries hold under 4.8 after pushback" is an LLM-behavior property. It is **not** ticked by self-simulating a pushback dialogue (that is theater, not verification) and **cannot** be pinned by a deterministic CI test. Acceptance #2 is therefore reframed as a *prompt-surface confirmation* — the pressure-resistance instructions are present and explicit — with the limit stated plainly. This mirrors the #272 discipline (guidance layer ≠ runtime enforcement). No "confirmed 4.8 behavior" claim appears anywhere. No lint / mutation test / xfail pebble: "be concise" is style guidance, not a contract invariant with a downstream consumer. ## Verification - Full suite: 2291 passed / 3 skipped / 1 xfailed. - Phase-boundary lint green (the added `## Output Discipline` H2 trips no count/budget assertion). - Independent pre-merge review converged clean over two rounds (a DA concession-threshold contradiction was found and fixed); honesty and public-repo-boundary axes clean — no runtime claim, no jailbreak recipe, no leakage. Related: #272 / #273 (Opus 4.8 cluster); #247 (CLOSED — ethics-gate override recording). Design: `docs/design/2026-06-08-274-concise-pressure-guidance-design.md`. |
||
|
|
a38757d74a |
fix(disclosure): reground ACL/EMNLP rows to ACL Admin Wiki canonical (#242) (#364)
The ACL row pointed at the 2023 conference blog (still live, HTTP 200) but its content had drifted from ACL's current Exec-approved policy. The Admin Wiki — which ARR / EMNLP 2026 link to for current paper-integrity guidance — places disclosure in the Acknowledgements section and graduates it by use type, contradicting the old row's "dedicated Use of AI Assistance subsection". First-party verification: Admin Wiki returns HTTP 200 via browser navigation with the full "Guidelines for Generative Assistance in Authorship" section present (the 418 reported in #242 was a curl-UA challenge, not a stable block). Repo has no CI link-checker, so the humans-vs-tooling URL tension recorded in #242 does not apply. - ACL row: Source URL -> Admin Wiki anchor; access date 2026-06-07; summary, required phrasing, disclosure location, prohibited uses, authorship, notes regrounded verbatim/closely-paraphrased from the first-party wiki text. Graduated disclosure stated per wiki clauses a-f: language-only and short-form input not disclosed; literature search needs no special disclosure but normal citation-accuracy rules apply; low-novelty text and AI-suggested ideas disclosed. - EMNLP sibling row: Source URL -> EMNLP 2026 Paper Integrity Policy page (first-party verified, HTTP 200), which refers authors to ACL's generative-authorship guidelines; consolidated to "see ACL row" rather than duplicating; disclosure location aligned to Acknowledgements. - disclosure_mode_protocol.md prose: aligned the ACL example to Acknowledgements (was mirroring the old subsection wording). - Top snapshot date clarified as the original v1 build date (per-row access dates record re-verification). Faithfulness pass: independent cross-model review against the first-party wiki + EMNLP pages corrected two fluent-wrongness overstatements (literature search no-disclosure bucket; EMNLP "adopts wholesale"). Closes #242 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
539af2f78c |
fix(citation-gate): carry advisory lookup_verified=false visibility via provenance_summary + resolve spec self-contradiction (#333 item 1) (#342)
* fix(citation-gate): carry advisory lookup_verified=false visibility via provenance_summary, resolve spec self-contradiction (#333 item 1) #333 item 1 reported a spec-vs-impl conflict: spec C-V6(b) said an advisory lookup_verified==false is "co-emitted in the ref marker", impl said it adds NO marker suffix. Independent codex review found the SPEC was internally self-contradictory — C-V6(b) claimed both "byte-equivalent to v3.9.x" AND "co-emitted in the ref marker", which cannot both hold for a firing false row — and that adding a marker suffix would break the v3.7.3 one-advisory-token grammar cap (a ref can be both CONTAMINATED-* and lookup-false; the single advisory slot is already taken by contamination). Resolution (third path, user-approved): keep the marker byte-equivalent to v3.9.x (no new suffix, no grammar/back-compat churn) and carry the advisory's visibility in the formatter's output package instead, so the safety intent — the warning travels with the human-reviewed deliverable — is honored without a marker suffix. - formatter_agent.md: new "Citation Existence Advisory (v3.11 / C-V6(b))" section (symmetric with the Kong #258 and contamination advisories) requiring a mandatory provenance_summary.md "Citation Existence Advisories" section that lists every advisory false row (ref_slug, citation_key, the falsifiable DOI/arXiv ID, resolvers_unmatched). Advisory: no block, no auto-fix. - orchestrator + formatter prose: the false "why" lives in the aggregate AND the mandatory provenance_summary section; the marker stays byte-equivalent. - spec C-V6(b) (lines 24/186): replaced "co-emitted in the ref marker" with the byte-equivalent-marker + provenance_summary-carrier form, removing the self-contradiction. - check_v3_10_policy.py: new C-V6(b) lint asserting the formatter documents the mandatory provenance_summary Citation Existence Advisories section; 2 mutation tests (drop the section / detach it from provenance_summary → lint fails). Marker behavior is UNCHANGED: test_citation_existence_policy's advisory-no-suffix assertions still pass (the marker was never touched). Full suite 2138 pass / 3 skip; v3.9.0 + v3.10 lints clean. Refs #333 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(citation-gate): reconcile all citation_existence advisory mirror points to no-marker-suffix (codex dual-track) Addresses six codex P2 findings across the #333 dual-track review, all the same class: stale "advisory annotation/suffix in the marker" wording for citation_existence (which, unlike contamination, adds NO marker advisory suffix in either mode — the v3.7.3 grammar caps the marker at one advisory token, taken by contamination's CONTAMINATED-* suffix). - spec §0 line 24 (advisory) + line 26 (strict): no marker suffix; visibility via aggregate + provenance_summary; strict token is additive to base-status, the "why" in reason= + aggregate. - spec C-V6(c)/(e) (187/189) + Rule 12 (103): removed the "co-emitted alongside the advisory annotation" contamination analogy for citation_existence. - formatter_agent.md: new "Citation Existence Advisory" section now also lands provenance_summary.md in the Output Package "Files Delivered" table (it is the ONLY deliverable-visible carrier for an advisory false, so it cannot be dropped). - check_v3_10_policy.py: the C-V6(b) lint now scopes the carrier check to the CE subsection (a whole-prompt scan false-passed on pre-existing provenance_summary mentions) AND requires the exact 'Citation Existence Advisories' label inside it. 3 mutation tests pin: drop section header / detach provenance_summary within the section / rename the in-body label. Verified the contamination strict clause (orchestrator 847) is untouched — it legitimately co-emits a CONTAMINATED-* suffix; only citation_existence is no-suffix. Full inventory grep confirms no stale citation_existence advisory-suffix mirror remains. codex converged to PASS 0 findings at round 4; security-review 0 findings (prose + lint string-check only). Full suite 2139 pass / 3 skip. Refs #333 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
3ab2b2247a |
fix: wire domain evidence profiles end-to-end (#327) (#339)
Three real feature-logic defects from the #259 post-ship review, all on main and uncaught by the C1-C7 documentation-surface lint: - [P1] Step 12 (Domain Evidence Profile producer) was orphaned from the no-handoff control-flow directive, which bounded the most common full-mode entry at "Step 1-11". The profile silently never activated on that path. intake_agent.md now affirmatively reaches Step 12; new lint C8 pins the directive's bound (requires "then Step 12", not bare token presence, so a "do not run Step 12" regression still fails). - [P2] A reserved-fallback row "unknown_user_defined (requested: reserved)" was misparsed as case (c) and emitted [PROFILE-UNRESOLVED] (the malformed signal) for a valid reserved request. The consumer now parses the effective token + parenthetical and emits a distinct [PROFILE-RESERVED-FALLBACK]; (c) is narrowed to genuinely unresolvable rows (typo'd reserved, ship-enum-with-suffix coherence violation). New lint C9 requires both the tag and the parse instruction. - [P2] The screening decision tree's currency (time-range) node was not profile-aware, so a canonical humanities source admitted at the peer-review node was re-excluded at the currency node unless cited>100 — an INVARIANT 5 monotonic-admit violation, and the "peer-review node only" prose both encoded the bug and contradicted four other passages. The currency node now has a humanities admit branch (union/loosen-only, continues through the universal relevance+methodology nodes, does not short-circuit; the neutral cited>100 seminal Include is untouched). New lint C10 pins the branch (on its branch-exclusive "recency is not a quality signal" rationale) and forbids the fossil wording. TDD throughout (RED mutation fixtures before each fix). Dual-track ship gate: codex gpt-5.5 review (2 P2 lint-strength findings fixed + covered by new fixtures) + security review (no findings). 24 lint tests pass. Refs #327 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |