# ARS v3.5.1 Reading-Check Probe — Design Spec

> **Status (2026-05-04 retrospective):** **SHIPPED in v3.5.1**, 2026-04-22. All §1–§4 components landed; §5 tests landed as `scripts/test_reading_probe_lint.py` covering 7 of 8 specified tests. **§5.1 test 8 (`test_version_bump_sweep`) is OBSOLETE** — superseded by PR #33 which generalised `check_version_consistency.py` to dynamic CHANGELOG-driven version comparison, replacing the per-version pinned-fixture pattern this spec assumed. Pinned fixtures for v3.5.1 strings are no longer the right shape; the dynamic guard already covers the regression class. Filename retains `v3.7.3` because the roadmap slot was originally v3.7.3 before being reshaped into v3.5.1; spec body uses v3.5.1 throughout.
>
> Retained as historical design reference. Implementation evidence: `.claude/CLAUDE.md` `## v3.5.1 Key Additions`, `deep-research/agents/socratic_mentor_agent.md` `## Optional Reading Probe Layer (v3.5.1 ...)`, `scripts/test_reading_probe_lint.py`.

**Status:** DRAFT — pending implementation
**Date:** 2026-04-22
**Target version:** 3.5.0 → **3.5.1** (patch)
**Roadmap slot:** v3.7.3 "Did the user actually read the source?" probe — parked from v3.4 design, reshaped in 2026-04-21 ROADMAP §3.7.3
**Author:** Cheng-I Wu
**Design precedent:** `docs/design/2026-04-20-v3.4-prisma-trAIce-raise-readcheck-design.md` §7.7 (tests) and §8.2 (release plan). The earlier v3.5.0 proposal bundled a standalone `reading_check_agent` + `reading-check` sub-mode. The 2026-04-21 roadmap reshape drops both and keeps only the Socratic Mentor soft-nudge. **This spec is authoritative for v3.5.1.**

---

## 1. Scope & non-goals

### 1.1 What this ships

- An **opt-in honesty probe** inside `socratic_mentor_agent` that asks the user to paraphrase a specific paragraph from a paper they cited during dialogue.
- Gated by env var `ARS_SOCRATIC_READING_PROBE=1` (default OFF).
- Fires at most **once per Socratic session**.
- Fires only when:
  1. Env gate is set, AND
  2. Current intent is **goal-oriented** (not exploratory), AND
  3. User has cited a concrete paper in the dialogue, AND
  4. The Layer 2 → Layer 3 transition moment has been reached.
- User can **decline** the probe. Decline is logged and carries **no penalty** — no gate, no scoring change, no convergence-signal impact, no Mentor disapproval.
- Probe outcome is written inline into the Research Plan Summary as a new subsection "Reading Probe Outcomes". Stage 6 AI Self-Reflection Report transcribes that subsection verbatim when the pipeline continues into `academic-paper`.

### 1.2 What this explicitly does NOT do

- **No new agent file.** Probe lives inside `socratic_mentor_agent.md` as an internal layer.
- **No new SKILL mode.** (The original v3.5.0 design proposed an 8th `reading-check` mode — dropped.)
- **No Material Passport schema change.** Probe output is inline in Mentor's text artifact, not a cross-stage schema field.
- **No orchestrator agent change.** `academic-pipeline` Stage 6 `report_compiler_agent` reads from Mentor artifacts it already reads. One reference doc (`process_summary_protocol.md`) gains a pickup rule; no agent instructions change.
- **No scoring / rubric / gate impact.** The probe is an observation, not an evaluation.
- **No content check.** Mentor does NOT judge whether the paraphrase is factually correct. It records what the user said; a human reader of the Self-Reflection Report decides.
- **No exploratory-mode behaviour change.** Exploratory sessions get no probe, no probe-related prompt, nothing.
- **No compliance-agent interaction.** Probe is decoupled from PRISMA-trAIce / RAISE.
- **No cross-model verification.** Probe is single-model observation.

### 1.3 Out-of-scope alternatives considered and rejected

| Alternative | Rejected because |
|-------------|------------------|
| Standalone `reading_check_agent` (original v3.5.0 design) | Roadmap §3.7.3 collapses to Mentor-only. Adding an agent violates "minimum surface" principle. |
| Probe fires in exploratory mode | Exploratory sessions assume the user has not yet done the homework; the probe premise doesn't hold. |
| Probe fires on every user-cited paper | Violates "do not extend pipeline" constraint; one probe is enough for honesty signal. |
| Probe result stored in Material Passport `reading_probe_history[]` | Requires Schema 9 change and Socratic-only sessions don't produce Passport. Inline storage is lighter. |
| User-initiated probe ("probe me on X") | Removes the detection value. Honesty probes have to be AI-initiated. |

---

## 2. Architecture

### 2.1 Surface

One primary file: `deep-research/agents/socratic_mentor_agent.md`. The Mentor agent is defined by prompt, so "architecture" here means *what the agent prompt instructs the model to do.* No runtime code executes the probe logic — Claude interprets the prompt.

Three supporting files get aligned text updates: `deep-research/references/socratic_mode_protocol.md`, `deep-research/SKILL.md`, `academic-pipeline/references/process_summary_protocol.md`.

### 2.2 Probe trigger state machine

```
           ┌──────────────┐
           │ session start│
           └──────┬───────┘
                  │
                  ▼
         probe_fired = false
         candidate_paper = null
                  │
                  ▼
     ┌────────────────────────────┐
     │ on each user turn:         │
     │ 1. classify intent         │
     │ 2. scan for paper citation │
     └────────────┬───────────────┘
                  │
           ┌──────┴──────┐
           │ paper cited?│
           └──┬────────┬─┘
        no   │        │ yes
             │        ▼
             │  candidate_paper = first cited
             │  (never overwritten this session)
             │        │
             └──┬─────┘
                ▼
    ┌──────────────────────────────────┐
    │ at Layer 2 → Layer 3 transition: │
    │ probe_gate =                     │
    │   env ARS_SOCRATIC_READING_PROBE │
    │   AND intent == goal_oriented    │
    │   AND candidate_paper != null    │
    │   AND probe_fired == false       │
    └──────────────────┬───────────────┘
                       │
              probe_gate?
                 │yes   │no
                 ▼      ▼
         fire probe   continue
         probe_fired = true   Layer 3
                 │
                 ▼
         user response:
         paraphrase | decline | other
                 │
                 ▼
         log [READING-PROBE: ...]
                 │
                 ▼
         Mentor acknowledges briefly,
         continues Layer 3
```

### 2.3 Env gate semantics

- Pattern mirrors existing `ARS_CROSS_MODEL` (`shared/cross_model_verification.md`): agent prompt contains instructions for both set and unset cases; the model checks environment through whatever mechanism the runtime exposes.
- `ARS_SOCRATIC_READING_PROBE=1` — probe layer active
- unset, empty, `0`, or any other value — probe layer **dormant** (as if the section were absent)
- Dormant behaviour is pixel-identical to v3.5.0 (verified by diff on `socratic_mentor_agent.md`'s non-probe sections being zero-delta).

### 2.4 Data flow across stages

```
Socratic session (deep-research, mode=socratic)
  ├─ Mentor emits dialogue turns, possibly with
  │  [READING-PROBE: paper=..., outcome=..., turn=N,
  │                 paraphrase_quote="..."]  ← tag inline
  │
  └─ Session end → Research Plan Summary
                    ├─ existing sections
                    └─ "Reading Probe Outcomes" subsection
                       (populated only if probe fired OR env was set
                        and probe did not fire with reason)

If user continues into academic-paper / pipeline:
  academic-pipeline Stage 6 (report_compiler_agent)
    └─ AI Self-Reflection Report
         └─ "Reading Probe Outcomes" section
            (transcribes Research Plan Summary subsection verbatim,
             with a line noting the probe is a user-honesty observation,
             not an AI-verified claim)

If user stops after socratic mode:
  Probe data persists in Research Plan Summary only.
  No data loss — the downstream Self-Reflection Report simply
  never runs.
```

### 2.5 Components changed

| File | Change type | Approx size |
|------|-------------|-------------|
| `deep-research/agents/socratic_mentor_agent.md` | NEW section "Optional Reading Probe Layer (v3.5.1)" | +60–90 lines |
| `deep-research/references/socratic_mode_protocol.md` | NEW subsection "Reading Probe (opt-in, goal-oriented only)" | +15–25 lines |
| `deep-research/SKILL.md` | Socratic Mode section gains env-var note; INSIGHT Compilation Output template gains "Reading Probe Outcomes" subsection slot | +10–15 lines |
| `academic-pipeline/references/process_summary_protocol.md` | Self-Reflection Report spec gains "Reading Probe Outcomes (if present)" item | +8–12 lines |
| `scripts/test_reading_probe_lint.py` | NEW — probe prompt-lint test suite | ~120 lines |
| `CHANGELOG.md` | v3.5.1 entry | +15–25 lines |
| `README.md` + `README.zh-TW.md` | v3.5.1 key-addition paragraph | +5 lines each |
| `.claude/CLAUDE.md` | Suite version 3.5.0 → 3.5.1, Skills Overview row adjustment if any | 1–2 lines |
| `deep-research/SKILL.md` frontmatter | version 2.9.0 → 2.9.1 (patch, because SKILL.md text changes and mentor behaviour gains optional layer) | 1 line |
| `deep-research/references/changelog.md` | corresponding skill-level changelog entry | +10 lines |

**Not changed:** `shared/handoff_schemas.md`, any orchestrator agent, any other `deep-research` agent, `academic-pipeline/SKILL.md`, any compliance / rubric / scoring file.

---

## 3. Prompt specification for the probe layer

This is the literal content that goes into `socratic_mentor_agent.md` — not full prose, but the key invariants the prompt must encode.

### 3.1 Section header

```markdown
## Optional Reading Probe Layer (v3.5.1 — Internal, Never Mention "Probe" to Users)
```

### 3.2 Activation clause

```
This layer activates only when ALL of the following hold:
- Environment variable ARS_SOCRATIC_READING_PROBE is set to "1"
- Current intent classification (from Intent Detection Layer) is goal-oriented
- The user has, in a prior turn of THIS session, cited a specific paper
  (named authors + year minimum, e.g., "Smith 2024" or full reference)
- The Layer 2 → Layer 3 transition is imminent
- The probe has not yet fired in this session

If ANY of these is false, this layer is dormant. Do not mention the probe.
Do not prepare for the probe. Do not hint that a probe exists.
```

### 3.3 Candidate paper tracking

```
While this session is active, silently track the FIRST concrete paper
citation the user produces. Store internally as candidate_paper. Once set,
never overwrite. If the user cites multiple papers later, they do not
replace the candidate. Rationale: one probe, one paper, fair detection.
```

### 3.4 Probe wording template

```
When all activation conditions hold, at the Layer 2 → Layer 3 transition,
ask ONE question in this form:

  "You mentioned [candidate_paper] earlier. Before we move into evidence
   strategy — could you tell me, in your own words, one specific passage
   from that paper that's shaping your thinking? Feel free to paraphrase
   a paragraph or an argument. Or skip this if you'd rather keep moving."

Do NOT:
- Frame it as a test, check, or verification
- Imply that the user must answer
- Use evaluative language ("make sure", "prove", "demonstrate")
- Preface with "I want to check if..."
- Follow up with a second probe question in the same session
```

### 3.5 Response handling

```
The user's response maps to one of three outcomes:

OUTCOME = paraphrase
  User offers any content that references the paper (even if vague,
  even if arguably wrong — Mentor does NOT judge accuracy).
  Action: Acknowledge in ≤ 15 words. Do not praise, do not evaluate,
  do not grade. Example: "Got it — noted. Let's move into evidence."
  Log: [READING-PROBE: paper="<candidate>", outcome=paraphrase,
                      turn=<N>, paraphrase_quote="<user text, trimmed to
                      first 280 chars>"]

OUTCOME = decline
  User's response is a clear skip/pass signal: "skip", "pass",
  "let's move on", "不用了", "跳過", or similar, AND contains no
  content referencing the paper. If the user's response mixes a skip
  signal WITH paper content (e.g., "skip, but briefly — the paper
  argues X"), classify as OUTCOME=paraphrase and log the paper-content
  portion only.
  Action: Acknowledge briefly. Example: "No problem — moving on."
  Decline is NOT penalised. It does NOT count toward Persistent-Agreement,
  Conflict-Avoidance, or Premature-Convergence indicators. It does NOT
  shift convergence signals. It does NOT affect intent classification.
  Log: [READING-PROBE: paper="<candidate>", outcome=decline, turn=<N>]

OUTCOME = other
  User answers something off-topic or asks a clarifying question back.
  Action: Answer their question, then proceed to Layer 3 without
  re-asking the probe. Probe is fired once per session regardless
  of what the user said.
  Log: [READING-PROBE: paper="<candidate>", outcome=other, turn=<N>,
                      user_response="<first 280 chars>"]

Regardless of outcome, set probe_fired = true and NEVER probe again
this session.
```

### 3.6 Banned phrases in probe and acknowledgement

```
The probe question and the acknowledgement MUST NOT contain:
- "correct", "right", "wrong", "good answer", "well said"
- "make sure", "verify", "prove"
- Any praise of the user's paraphrase content
- Any judgement of the user's decline

(Note: "check" is not banned because it appears in non-evaluative
senses elsewhere in this section — e.g., "activation conditions".)

Rationale: evaluative language turns the probe into a sycophancy hook
(user answers well → Mentor praises → user feels graded). Probe is
observation, not grading.
```

### 3.7 Research Plan Summary subsection

```
When the Mentor compiles the Research Plan Summary at session end, if
ARS_SOCRATIC_READING_PROBE was set at any point during the session,
include this subsection immediately before "Complete INSIGHT List":

  ### Reading Probe Outcomes

  Probe status: <fired | not_fired_no_citation | not_fired_exploratory_mode>
  <If fired:>
  - Paper: <candidate_paper>
  - Outcome: <paraphrase | decline | other>
  - Turn: <N>
  - User text (verbatim, if paraphrase or other): <quote>

  Note to reader: This section records whether the user chose to
  paraphrase a paper they cited. The Mentor did NOT verify factual
  accuracy of any paraphrase. Interpret at your own discretion.

If ARS_SOCRATIC_READING_PROBE was NOT set, omit this subsection entirely.
```

---

## 4. Companion file updates

### 4.1 `deep-research/references/socratic_mode_protocol.md`

Add a subsection after "Dialogue Management Rules":

```markdown
## Reading Probe (opt-in, goal-oriented only)

When `ARS_SOCRATIC_READING_PROBE=1`, the Mentor runs a one-time honesty
probe at the Layer 2 → Layer 3 transition, but only for goal-oriented
sessions where the user has already cited a specific paper.

The probe asks the user to paraphrase one passage from that paper. The
user may decline; the decline is logged without penalty. The probe is
not a gate — it records user self-report only. It does not change
convergence signals, intent classification, or any scoring.

Default is OFF. Exploratory sessions never probe. See
`agents/socratic_mentor_agent.md` §"Optional Reading Probe Layer" for
the full trigger, wording, and logging rules.
```

### 4.2 `deep-research/SKILL.md`

In the "Socratic Mode" section, append:

```markdown
### Opt-in Reading Probe (v3.5.1)

Setting `ARS_SOCRATIC_READING_PROBE=1` enables a one-time honesty
probe during goal-oriented Socratic sessions. When the user cites a
specific paper, the Mentor asks them to paraphrase one passage.
Decline is logged without penalty. Default OFF. See
`agents/socratic_mentor_agent.md` §"Optional Reading Probe Layer".
```

In the INSIGHT Compilation Output template (in the agent's own file, not SKILL.md — SKILL.md only references the template location), add the "Reading Probe Outcomes" subsection slot so the layout is documented in one canonical place.

### 4.3 `academic-pipeline/references/process_summary_protocol.md`

In the Self-Reflection Report structure list, add:

```markdown
- **Reading Probe Outcomes (if present)** — transcribes the
  "Reading Probe Outcomes" subsection from the Research Plan Summary
  verbatim, with a one-line note that the AI did not verify paraphrase
  accuracy. If the Research Plan Summary has no such subsection,
  this item is omitted entirely (no "not applicable" noise).
```

---

## 5. Tests

TDD entry: `scripts/test_reading_probe_lint.py`. Style matches existing `test_check_compliance_report.py` and `_skill_lint.py` — file-content lints, not runtime agent tests.

### 5.1 Test list (failing-first order)

1. **`test_mentor_file_has_probe_section`**
   Assert `socratic_mentor_agent.md` contains heading "Optional Reading Probe Layer" and required subsections (activation, candidate tracking, wording, response handling, banned phrases, summary subsection).

2. **`test_env_var_name_consistent_across_repo`**
   Grep for `ARS_SOCRATIC_READING_PROBE` across agent, protocol, SKILL, README. All occurrences use the exact same string. No typos, no case drift, no alternate names.

3. **`test_probe_gated_by_goal_oriented`**
   Assert Mentor file contains explicit text stating the probe activates only in goal-oriented intent, and there is NO instruction elsewhere that activates it in exploratory mode.

4. **`test_decline_is_zero_penalty`**
   Assert Mentor file's probe section contains the "no penalty" clause and explicitly excludes decline from Persistent-Agreement / Conflict-Avoidance / Premature-Convergence / convergence signals / intent classification.

5. **`test_probe_tag_format`**
   Assert the `[READING-PROBE: ...]` tag regex is defined consistently in the agent file and referenced identically in `process_summary_protocol.md` pickup rules.

6. **`test_no_probe_in_scoring_files`**
   Grep all scoring / rubric / convergence files (`collaboration_depth_rubric.md`, `compliance_report.schema.json`, convergence-signal blocks in `socratic_mentor_agent.md`) for `reading_probe` or `READING-PROBE`. Expected: zero matches. Prevents accidental regression where the probe becomes a gate.

7. **`test_banned_praise_phrases`**
   Assert the probe section's banned-phrases list contains the exact strings: `"correct"`, `"right"`, `"wrong"`, `"good answer"`, `"well said"`, `"make sure"`, `"verify"`, `"prove"`. The word "check" is intentionally excluded from the banned list because it has non-evaluative uses in the surrounding section (e.g., "activation conditions hold").

8. **`test_version_bump_sweep`** — **OBSOLETE (2026-05-04)**
   Spec at draft time assumed extending a pinned-fixture in `check_version_consistency.py`. PR #33 (2026-04-22) generalised that script to dynamic CHANGELOG-driven version comparison, removing the per-version pinned-fixture pattern. Adding v3.5.1 pinned strings would re-introduce the technical debt the dynamic redesign retired. Skip; the dynamic guard already covers this regression class.

### 5.2 Test execution

Part of the existing suite invocation (`pytest scripts/`). No new CI wiring needed — `check_version_consistency.py` guard already triggers on PR.

### 5.3 What tests do NOT cover

- Actual Mentor runtime behaviour with a real LLM. Agent prompt correctness is validated by file-lint + manual calibration sessions noted in release notes. This is consistent with how v3.4.0 compliance agent shipped (lint + fixture validation, no LLM-integration test).
- End-to-end pipeline with probe firing. A real Socratic session is exercised as a post-merge calibration sample; result noted in CHANGELOG.

---

## 6. Release plan

### 6.1 Branch & PR

- Branch: `feat/v3.5.1-reading-check-probe` (already created from `main` at `aded8cc`)
- PR base: `main`
- PR title: `feat(v3.5.1): opt-in Socratic reading-check probe`
- Single PR, not bundled with D (sprint contract) or any v3.6 item.

### 6.2 Version bump

- Suite: `3.5.0 → 3.5.1`
- `deep-research` skill: `2.9.0 → 2.9.1`
- Justification: opt-in, default OFF, zero breaking change, no schema change. Patch semver correct.

The 7 bump sites in this repo (grep targets for `check_version_consistency.py`):

1. `CHANGELOG.md` — new `## [3.5.1]` heading + entry
2. `README.md` + `README.zh-TW.md` — "Version Info" / "版本資訊" section
3. `.claude/CLAUDE.md` — Skills Overview table version column and "Version Info" footer
4. `deep-research/SKILL.md` — frontmatter `version:` field
5. `deep-research/references/changelog.md` — skill-level entry
6. `docs/ARCHITECTURE.md` — any mermaid/table row citing the suite or `deep-research` version
7. Any script docstring or spec that pins a version string (lint script catches these)

Not every change touches all seven; the consistency check fails the PR if any site drifts.

### 6.3 Pre-push public-repo checks

This is a public repo. Before `git push`:

- [ ] `git diff main...HEAD` reviewed for PII: school names, person names, internal URLs, real research topics.
- [ ] All probe prompt examples use synthetic or generic citations (no real affiliated-institution sources).
- [ ] CHANGELOG entry contains no internal-project references.

### 6.4 CHANGELOG entry shape

```markdown
## [3.5.1] — 2026-04-22

### Added
- **Opt-in Socratic reading-check probe.** When
  `ARS_SOCRATIC_READING_PROBE=1` is set, the Socratic Mentor fires a
  one-time honesty probe during goal-oriented sessions where the user
  has cited a specific paper. The probe asks the user to paraphrase
  one passage. Decline is logged without penalty. Outcome is recorded
  in the Research Plan Summary and flows into the Stage 6 AI
  Self-Reflection Report when the pipeline continues. Default OFF.
  Roadmap slot: v3.7.3. See
  `deep-research/agents/socratic_mentor_agent.md` §"Optional Reading
  Probe Layer".

### Changed
- `deep-research/SKILL.md`, `deep-research/references/socratic_mode_protocol.md`,
  `academic-pipeline/references/process_summary_protocol.md` — aligned
  text updates for the new probe section. No behaviour change when the
  env var is unset.

### Version
- Suite: 3.5.0 → 3.5.1 (patch; opt-in, default OFF, no breaking change)
- `deep-research` skill: 2.9.0 → 2.9.1
```

### 6.5 ROADMAP update (memory-sync)

After PR merges, update the private roadmap §3.7.3: mark shipped, cite v3.5.1, note that the original "sub-mode + soft-nudge" dual-track was collapsed to Mentor-only.

### 6.6 Post-merge verification

- [ ] `pytest scripts/` green
- [ ] `scripts/check_version_consistency.py` green
- [ ] One manual Socratic session with probe enabled, one with it disabled, diff the transcripts: only difference should be the probe question/response/acknowledgement sequence.
- [ ] Run `/simplify` on the PR before requesting review (per user's durable instruction).

---

## 7. Risks & mitigations

| Risk | Likelihood | Impact | Mitigation |
|------|-----------|--------|------------|
| Env var set but intent detector misclassifies user as exploratory → probe never fires | Medium | Low | Mentor documents the gate; user can read Self-Reflection Report and see `probe_status=not_fired_exploratory_mode`. Troubleshootable. |
| User games the probe by citing a paper they did not read, then offering plausible paraphrase | High | Low | Feature is not a gate; accuracy is for human reader to judge. "Gaming succeeds but yields no benefit" is acceptable. |
| Probe becomes de-facto sycophancy hook (user answers well → Mentor praises) | Medium | High | Banned-phrases list in prompt; `test_banned_praise_phrases` lint; post-merge manual calibration. |
| Future v3.6.1 Material Passport reset-boundary work wants probe data cross-stage | High | Low | Inline storage now; when Passport schema evolves in v3.6.1, migrate then. Not now. |
| Probe tag format drifts between Mentor emission and Stage 6 pickup | Medium | Medium | `test_probe_tag_format` lints both sides from one regex source of truth. |
| User runs Socratic-only session (no pipeline), expects probe data somewhere formal | Low | Low | Research Plan Summary is the formal output — probe subsection is right there. Acceptable. |
| Affiliated-institution name or internal topic accidentally used as probe example in prompt / CHANGELOG | Low | High | Pre-push PII diff review (§6.3). |

---

## 8. Success criteria

1. All 8 lint tests (§5.1) pass.
2. With `ARS_SOCRATIC_READING_PROBE` unset, `deep-research/agents/socratic_mentor_agent.md` behaviour is byte-identical to v3.5.0 for all sections outside the new probe layer. Verified by diff.
3. `scripts/check_version_consistency.py` passes across all 7 bump sites.
4. PR diff has zero PII / internal-URL hits on manual review.
5. CHANGELOG, README (EN + zh-TW), `.claude/CLAUDE.md`, ROADMAP memory-sync entry all synchronized.
6. Single PR, reviewable in one sitting (< 400 lines net addition).
7. `/simplify` review run before marking PR ready.
8. Manual calibration: one goal-oriented probe session + one exploratory session, both transcripts committed to PR description or linked calibration log.

---

## 9. Decision log

| Decision | Rationale |
|----------|-----------|
| Probe target is user-cited papers, not Phase 2 `bibliography_agent` output | Mentor lifecycle ends before Phase 2. Extending Mentor across phases violates "minimum surface" and contradicts mode boundaries. User-cited papers are the natural artifact Mentor has access to. |
| Inline storage in Research Plan Summary, not Material Passport | Schema change is out of scope for a patch. Socratic-only sessions don't produce Passport anyway. Self-Reflection Report already reads Mentor output. |
| Goal-oriented only | Exploratory sessions assume the user has not done homework; probe premise fails. Cleaner than trying to gate probe on "only if user cites" because both conditions end up equivalent in practice, and goal-oriented-only better matches the roadmap intent. |
| Single probe per session | Roadmap language: "paraphrase ONE specific paragraph from ONE paper". Multiple probes extend pipeline and violate "non-gate" stance (repeated probes feel like interrogation). |
| Mentor does not verify paraphrase accuracy | Content-check requires the actual paper in context. Out of scope. Feature value comes from the presence/absence/quality of response being *visible* to later reviewers, not from AI judgement. |
| Env var name `ARS_SOCRATIC_READING_PROBE` | Matches `ARS_*` prefix convention (`ARS_CROSS_MODEL`). Explicit about scope (socratic) and purpose (reading). |
| Version 3.5.1 patch, not 3.6.0 minor | Opt-in, default OFF, zero breaking change. Patch semver is correct. v3.6 slot reserved for long-running-agent harness themes (§3.6.1-3.6.4). |
| Roadmap label "v3.7.3" kept in memory-sync notes, actual release tag is v3.5.1 | Roadmap slot names are organisational markers, not release tags. Decoupling preserves both: roadmap stays readable, semver stays correct. |
| PR not bundled with D (sprint contract) | Sprint contract is large (1-2 days) and touches orchestrator. Bundling would create a PR too large to review, and rollback granularity would suffer. |

---

## 10. References

- ARS ROADMAP §3.7.3 (2026-04-21): authoritative v3.7.3 spec after reshape from v3.4 design.
- `docs/design/2026-04-20-v3.4-prisma-trAIce-raise-readcheck-design.md` §7.7, §8.2: original v3.5.0 plan (sub-mode + soft-nudge dual-track); partially superseded by this spec.
- `shared/cross_model_verification.md`: `ARS_CROSS_MODEL` env-gating precedent.
- `feedback_version_bump_sweep_checklist.md` (private planning notes): 7-site version bump map.
- `project_ars_v3.6_execution_order.md` (private planning notes, 2026-04-22): execution order rationale (E → A → **B** → D) putting this spec as step B.
