mirror of
https://github.com/wassname/jsteer.git
synced 2026-09-09 11:25:03 +08:00
7.6 KiB
7.6 KiB
| file:line | issue | concrete fix |
|---|---|---|
AGENTS.md:3-4 |
Archaeology — CUT: Plan of record: /home/.../.claude/plans/... and experiment-journal pointer are private/dev-process breadcrumbs, not reader guidance. |
Remove the plan path. If needed, keep one stable line: Evidence: docs/evidence/ or link to public docs only. |
AGENTS.md:8-10 |
Archaeology — CUT/SHORTEN: WRITTEN (by the main agent, ported from verified j-steer-dev code -- do not rewrite...) exposes agent/provenance history. |
Replace with: Core math is parity-tested; avoid changing it without rerunning parity checks. |
AGENTS.md:26-29 |
Archaeology — CUT: U1 parity gate, U4 port check, run-524 reference vector are internal run IDs. |
Replace with one durable note: Parity evidence lives under docs/evidence/. |
AGENTS.md:34-40 |
Archaeology — CUT: U4 loop-close, resumable artifact path, scratch scripts, TODO eval notebook are active worklog state. |
Move to issue tracker or scratch notes; keep AGENTS to stable repo conventions only. |
AGENTS.md:46 |
Archaeology — CUT: Comments marked as Claude-authored where opinionated. This preserves exactly the diary comments the library should lose. |
Delete; comments should explain code, not authorship. |
jsteer/jacobian.py:3, jsteer/vjp.py:3, jsteer/applies.py:3 |
Archaeology — CUT: (drafted by Claude, ported from the verified j-steer-dev experiment code). |
Delete from all module docstrings. |
jsteer/jacobian.py:5-6 |
Archaeology — SHORTEN: verified in j-steer-dev... Qwen3-4B, n=3 seeds puts experiment diary in the core module header. |
Move evidence detail to README/docs; module should say only that word_vector is the default verified path. |
jsteer/jacobian.py:20-22 |
Archaeology — SHORTEN: FAILED specificity controls in j-steer-dev... is useful status but too journal-like in the module overview. |
Replace with: Persona variants are experimental and not recommended for targeted steering. |
jsteer/vjp.py:12-13 |
Archaeology — CUT: this is the code path that produced the verified j-steer-dev result is provenance, not API explanation. |
Delete; keep only estimator conventions if needed. |
jsteer/vjp.py:87-90 |
Archaeology + jargon — SHORTEN: verified j-steer-dev method-0 extraction and linearization substrate read like experiment notes. |
Use: Direct word-vector extraction over prompts; matches Jacobian.fit(...).word_vector(...) when settings match. |
jsteer/jacobian.py:84-88 |
Archaeology — CUT/SHORTEN: _to_vector docstring ends with (Claude: found by U4 step-2 crash, pueue 550). |
Keep the reason, drop diary: Always CPU fp32 so cached and VJP paths return device-consistent Vectors. |
jsteer/jacobian.py:202-203 |
Archaeology — SHORTEN: Claude: ... (external review) is attribution/provenance. |
Keep only: Float bands are only resolved during fitting; steering requires explicit layer ints. |
jsteer/jacobian.py:246-250 |
Archaeology — SHORTEN: # read your data: plus # Claude: asymmetry is intentional... is chatty and attributed. |
Keep concise rationale: # Token selection uses unembed/final norm; cotangent uses raw W_U rows to match word_vector. |
jsteer/vjp.py:41-42 |
Archaeology — KEEP rationale, CUT attribution: # Claude: the & with attention_mask.... |
Change to: # Redundant for right-padded batches, but guards other padding layouts. |
README.md:16-18 |
Archaeology — SHORTEN: parity-tested in artifacts/parity_u1.txt brings internal artifact naming into the first explanation. |
Say: The cached pullback matches the direct VJP up to fp16 rounding. Move artifact links to evidence docs. |
README.md:96-104 |
Cleanliness — CUT: Credits include a long “Earlier work” reading list and speculative aside We could generalize SAEs...; also typo-like Antropics works. |
Keep credits to the two deps plus repeng inspiration. Move papers elsewhere if needed. |
README.md:3,16-18 |
Jargon — pulling concept directions back and VJP appear before defining that they are the same operation. |
First use should read: pullback — a vector-Jacobian product (VJP), J_l^T @ w — .... Then use one term consistently. |
jsteer/jacobian.py:20-26 |
Jargon — pullbacks, pulled back, and VJP are all used without saying pullback = vector-Jacobian product. |
Add one early definition after the formula: Here pullback means the VJP J_l^T @ w. |
jsteer/vjp.py:1 |
Jargon — Direct VJP pullback stacks two undefined terms in the first sentence. |
Use: Direct vector-Jacobian product (VJP) pullback for one concept. |
jsteer/jacobian.py:10,25, README.md:13 |
Jargon — position-averaged / pooled Jacobian are coined terms unless the averaging axes are stated. |
Define first use as: averaged over fitting prompts and valid token positions; avoid later switching to pooled. |
jsteer/vjp.py:88 |
Jargon — linearization substrate is not sourced from jlens/repeng and is undefined. |
Replace with plain language: over the fitting prompts or over the prompts used to estimate the Jacobian. |
jsteer/applies.py:112-115 |
Jargon + over-explanation — A "virtual token" injection... is undefined and then explained by edge-case internals. |
Rename plainly: Replace the last k residual directions with v at the original activation norm; no sequence length changes. |
jsteer/jacobian.py:1-39 |
Docstring too long — module docstring repeats README, evidence, variants, cache rationale, layout, and usage; the core sentence is buried. | Cut to ~6 lines: purpose, formula, fit/word_vector usage. Move evidence/status to README. |
jsteer/vjp.py:1-18 |
Docstring too long — repeats cached-path parity and estimator details before the reader sees the function. | Keep a short module docstring; put only necessary estimator notes on pullback_vjp. |
jsteer/applies.py:1-33 |
Docstring too long — explains config, extraction, delivery, protocol, position semantics, and sign conventions all up front. | Replace with: Register jsteer Vector methods with steering-lite and implement apply modes. Move sign conventions to README/API docs if needed. |
jsteer/jacobian.py:94-98 |
Docstring too long/chatty — _word_cotangent includes Pulling THIS back... pure concept->residual map... persona-bundle confound. |
Shorten to: Mean lm_head row for the first sub-token of each word; +C raises those logits. |
jsteer/jacobian.py:146-150 |
Docstring too long — fit buries the action under cost model and checkpoint details. |
First sentence only: Fit per-layer Jacobians on prompts using jlens. Move cost/checkpoint detail to parameter docs or README. |
jsteer/jacobian.py:232-236 |
Docstring too long — persona_topk_vector explains the whole experimental rationale inline. |
Shorten to one sentence plus status: Experimental: contrast top-k unembedded tokens from positive/negative persona means, then pull back like word_vector. |
jsteer/jacobian.py:256-257 |
Docstring/editorial — Any honest demo/eval should show... is moralizing. |
Use neutral text: Norm-matched random control vector for baseline comparisons. |
jsteer/jacobian.py:264,268-269 |
Docstring/comment style — bonus and What the model 'thinks' are demo prose, not clean API wording. |
Rename comment to # -- lens readout --; docstring: Decode the lens readout for a layer and position. |
jsteer/applies.py:94-115 |
Docstrings too explanatory for tiny apply functions; they repeat implementation details visible in the code. | Keep one-line behavior summaries for apply_add, apply_add_last, apply_replace_last; move caveats to README if users need them. |