Skip to content

Releases: kitepon-rgb/Throughline

v0.5.0 — close transcript injection investigation, lock path C

24 May 05:01

Choose a tag to compare

This release closes out the v0.5 transcript-injection investigation and
locks in path C (resume-context.mjs v2.1 header + 現在地 anchor) as
the plugin-scope completion form for Throughline.

Changed

  • Strengthened the Claude /clear resume context header with two new
    short-message handling rules so the cleared-me side stops misreading
    follow-up shorts as fresh requests:
    • 短文/相槌の判定: any user message that is ≤50 chars or built solely
      out of acknowledgment / agreement / prompt words (はい / うん / 了解 /
      OK / やって / 進めて / 続き / 次) must be treated as a GO sign on the
      previous assistant's proposed next move, not a new request, and the
      cleared-me must not ask back, re-list options, or pivot to other work.
    • 古い番号リストの再実行禁止: when the latest user references an
      older numbered list (e.g. 2 をやれ) but the most recent assistant turn
      already executed that item, the cleared-me must respond with a result
      confirmation / next move, not by re-executing the already-done item.
      The latest assistant utterance outranks any older numbered list
      referenced from it.

Research (no shipped behavior change)

Two alternative injection routes were spiked end-to-end against real
Claude Code (v2.1.145) and both confirmed dead, locking path C as the
plugin-scope ceiling.

  • D route — transcript JSONL append (Phase 0-2 / Phase 0-5): four
    real-machine runs across SessionStart (chain null orphan) and
    UserPromptSubmit (chain b reachable-from-attachment) timings, with
    both synthetic and real Claude model names. All four runs produced
    「ない」when the cleared-me was asked to quote the spike tracer. Root
    cause: Claude Code decides each new turn's parentUuid from its
    in-process memory state and never re-reads the JSONL, so any text a
    hook writes to transcript_path lives on a parallel chain that the
    next prompt's parent-walk never reaches.
  • hookSpecificOutput.initialUserMessage route (Phase 0-6): real
    Claude Code interactive run on 2026-05-24 13:33 (tracer 9220a79c,
    session 0979ad20-…) returned 「ない」, empirically confirming the
    openclaude source comment that initialUserMessage is consumed only
    for headless orchestrator sessions, not for the interactive /clear
    scenario this project needs.

Both routes are kept in-tree behind marker files
(~/.throughline/spike-inject.flag,
~/.throughline/spike-prompt.flag,
~/.throughline/initial-user-message-test.flag) as research
infrastructure for future re-evaluation; they are no-op when the flags
are absent and have no effect on the shipped path.

Added

  • docs/THROUGHLINE_TRANSCRIPT_INJECTION_PLAN.md: full Phase 0 plan and
    result log for the D / initialUserMessage investigation.
  • docs/RAG/: third-party spec knowledge base (Claude Code hooks
    reference, Anthropic Messages API, sessions docs, openclaude
    initialUserMessage source extract) used as the grounding for the
    no-go calls above.

v0.4.11 - Codex new-thread handoff + Homebrew node path fix

10 May 12:42

Choose a tag to compare

Changed

  • Codex automatic current-thread refresh disabled. The Codex UserPromptSubmit, PostToolUse, and Stop hooks now capture rollout memory and monitor state, then return codex_auto_refresh_disabled without injecting $throughline or sending rollback/inject. The lower-level auto-refresh helper is also default-disabled.
  • $throughline is back to a new-thread handoff flow. Bare $throughline now runs throughline codex-handoff-start --execute, which creates a new Codex app-server thread, injects developer handoff memory, and opens the selected host. Explicit throughline trim --execute --host codex remains available as a diagnostic current-thread rollback / inject command.

Fixed

  • Codex hook Node path now resolves through PATH on Homebrew macOS. throughline install previously hard-coded process.execPath into ~/.codex/hooks.json, which on Homebrew points at a Cellar-versioned binary that disappears on the next brew upgrade. The new resolver prefers a stable PATH entry (e.g. /opt/homebrew/bin/node) that realpaths to the same binary, falling back to process.execPath only when nothing in PATH matches.

Full Changelog: v0.4.10...v0.4.11

v0.4.10 - Fix Codex trim turn-count adjustment

09 May 07:09

Choose a tag to compare

[0.4.10] — 2026-05-09

Fixed

  • Codex current-thread trim no longer refuses execution solely because the
    rollout active turn count differs from the Codex app-server count. When
    thread/read and thread/resume agree, Throughline now treats the mismatch
    as diagnostics and adjusts thread/rollback.numTurns by the app-server delta.
    For example, expectedTurns = 6 and readTurns = resumedTurns = 7 under
    --all now sends numTurns: 7.
  • trim --preflight --host codex now reports the same rollback adjustment
    preview instead of returning preflight-refused for this recoverable
    mismatch.

v0.4.9 - natural resume context

09 May 07:09

Choose a tag to compare

[0.4.9] — 2026-05-09

Changed

  • Resume context overhaul. The Claude /clear resume injection no longer
    carries a verbose meta-instruction ("respond with: I have inherited the prior
    task..."). The header now contains only a one-line natural-continuation cue
    and the Bash invocation contract for throughline detail HH:MM:SS. The L2
    active-work thread is anchored at the very bottom of the injected context so
    Claude's attention falls on the most recent turn instead of on a recap line.
    Older L1 summaries are now timestamped with the original turn body time
    (bodies.created_at MIN) instead of the skeleton row's summarization time,
    so detail commands derived from L1 lines actually resolve.
  • L3 references collapsed into per-line (詳細:…) suffixes. Both the
    Claude resume context and the Codex active-work / new-thread handoff
    renderers no longer print a standalone ### L3 詳細参照 /
    ### Detail References section. Instead, every L1 / L2 line ends with a
    compact (詳細:…) suffix that aggregates the L3 evidence belonging to that
    turn (本文, tool name, 思考, 画像, etc.), with ×N only when count > 1.
    The same-turn user / assistant pair only emits the suffix on the last role to
    avoid duplicating the per-turn L3 hint. MCP tool names are shortened to the
    trailing function name (mcp__plugin_..._playwright__browser_navigate
    browser_navigate) so namespace noise does not dominate the suffix.
  • Codex auto-refresh and current-session $throughline trigger now use a 75%
    verified-usage threshold instead of 80%, so Throughline can fire before Codex
    native auto-compact wins the race.
  • throughline doctor --codex now reads the Codex hook trust gate from
    ~/.codex/config.toml ([hooks.state."<hooks.json>:event:i:j"].trusted_hash)
    and reports a top-level Codex hook trust: summary plus per-hook
    trusted: yes/no. A registered hook that is not yet trusted in the Codex
    hook acceptance menu may not actually run.

Added

  • src/l3-summary.mjs: shared helpers (shortenMcpToolName, localizeL3Part,
    groupL3ByTurn, buildPartsSummary) used by both the Claude resume context
    and the Codex handoff renderers to build the per-line (詳細:…) suffix.

Notes

  • The Codex --max-detail-refs CLI flag is preserved for backwards
    compatibility but is now a validated no-op: the new per-line suffix
    aggregates L3 references at turn granularity, so a separate cap on a
    standalone Detail References list is no longer meaningful.
  • codex-handoff-smoke now reports renderedDetailSuffixes instead of
    renderedDetailCommands / uniqueRenderedDetailCommands. The
    detail_commands_deduplicated check has been retired because the new
    rendering aggregates L3 by turn structurally and cannot emit duplicate
    detail commands for the same turn.

This release rolls up the intermediate 0.4.8 patch:

[0.4.8] — 2026-05-09

Changed

  • Codex install now registers UserPromptSubmit and PostToolUse hooks in
    addition to the Stop hook. These hooks read the current Codex rollout
    token_count directly and, at the verified 80% threshold, inject a
    current-session $throughline instruction before the assistant answers or
    continues a tool loop. This keeps automatic refresh independent of
    token-monitor and available to users who never run the monitor.
  • throughline install now enables both [features].codex_hooks = true and
    [features].hooks = true for Codex hook compatibility.

v0.4.7 - Codex monitor fixes

09 May 07:08

Choose a tag to compare

[0.4.7] — 2026-05-09

Changed

  • Codex Stop hook auto-refresh now uses an 80% verified-usage threshold instead
    of 90%, so Throughline can refresh before Codex native auto-compact while
    still staying above the monitor's 70% warning band. Estimate-only usage and
    estimated context windows still do not mutate the thread.
  • Token monitor now discovers active Codex rollout files directly from
    ~/.codex/sessions/**/rollout-*.jsonl, so current Codex sessions appear even
    when the Codex Stop hook has not written a Throughline state file.
  • Token monitor now displays Codex session ids as the raw first 8 thread-id
    characters (019e085c) instead of the confusing prefixed slice (codex:01).
    Codex in-flight turns still overlay transient output_tokens in the token
    count, but the model column no longer adds a separate live+<tokens> marker.

This release rolls up intermediate same-day patches that were published to npm but not individually tagged on GitHub:

[0.4.6] — 2026-05-09

Changed

  • Codex monitor usage now overlays transient output_tokens while a Codex turn
    is open. During an in-flight turn the row displays input_tokens + output_tokens and marks the model with live+<tokens>; after task_complete
    the row drops back to verified input_tokens only.

[0.4.5] — 2026-05-09

Fixed

  • VS Code detection now treats VSCODE_HANDLES_SIGPIPE as a VS Code-family
    environment signal. This lets throughline install provision the monitor task
    in Codex / VS Code sessions where TERM_PROGRAM, VSCODE_PID, and
    VSCODE_IPC_HOOK_CLI are absent.

[0.4.4] — 2026-05-09

Changed

  • Token monitor now treats Claude transcript and Codex rollout files as live
    inputs. State-file usage snapshots remain a fallback, but the display and
    stale hiding no longer wait for Stop hook completion when the live files are
    still changing.
  • throughline install now provisions or repairs the current project's VS Code
    Throughline Monitor task when running under VS Code / Cursor / VSCodium, so
    monitor auto-start setup no longer depends solely on the first hook event.

[0.4.3] — 2026-05-09

Changed

  • Changed the installed Codex $throughline skill so bare $throughline runs
    the scripted current-thread refresh directly:
    throughline trim --execute --host codex --all --json. Doctor, dry-run,
    preflight, restore-safety analysis, host primitive audit, and fresh-thread
    handoff remain available only when explicitly requested instead of being the
    normal skill path.

[0.4.2] — 2026-05-09

Fixed

  • Codex trim no longer falls back to the latest project session when --session
    is omitted. For --host codex, the default memory session is now the current
    Codex thread (codex:<thread_id> from --codex-thread-id,
    CODEX_THREAD_ID, or THROUGHLINE_CODEX_THREAD_ID), so Claude-side work
    cannot accidentally become the injected memory for a Codex rollback.

v0.4.1 — /clear writes baton for deterministic handoff

09 May 07:07

Choose a tag to compare

[0.4.1] — 2026-05-09

Changed

  • /clear も baton を書き込むように変更。UserPromptSubmit hook で /clear
    を検出した時点で当該セッションの session_idhandoff_batons に書き、
    次の新規 SessionStart が確定的にそのセッションを引き継ぐ。これにより、複数
    VSCode ウィンドウなどで「最新更新セッション ≠ /clear したセッション」になる
    シナリオで findLatestClaudePredecessor heuristic が誤った前任を選ぶ問題を
    解消。
  • 2 経路の優先順位を入れ替え: baton path が primarysource='clear'
    の auto path は fallback。auto path は /clear が UserPromptSubmit hook
    に届かない経路 (例: VSCode 拡張のメニュー由来) のためのフォールバック扱い。

Added

  • src/prompt-submit.mjs: isClearCommand 判定 (/clear, /clear ...,
    前後空白許容、/cleared / /clearcache 等の prefix 偽陽性は拒否)。
  • ~/.throughline/logs/baton-write.logtrigger フィールドに
    'tl' | 'clear' を記録。
  • src/prompt-submit.test.mjs: isBatonCommand / isClearCommand の判定
    テスト 14 件。
  • src/hook-entrypoints.test.mjs: /clear baton の subprocess+DB 実体テスト
    3 件 (/clear 書き込み / /tl/clear 後勝ち上書き / 通常 prompt は no-op)。

Notes

  • 既存の THROUGHLINE_DISABLE_AUTO_HANDOFF=1 env は fallback path のみに作用
    するようになった。typed /clear は env に関係なく baton 書き込み → 引継ぎ発火
    する (= ユーザーが明示的に /clear を打った時点で「続けたい」という意思表示
    と解釈する)。auto path (VSCode メニュー由来) には引き続き env が効く。

Repository hygiene

  • .vscode/tasks.json を git 追跡から外す (.gitignore に追加)。
    ensureMonitorTaskFile が hook 発火ごとに絶対パスを書き換えるため、追跡
    対象に置くと別 OS / 別マシンで毎回 dirty diff が出続けていた。各マシンでは
    初回 hook 発火時に自動生成される。

v0.4.0 — /clear auto-handoff (breaking)

09 May 07:07

Choose a tag to compare

[0.4.0] — 2026-05-08

Breaking changes

  • /clear で自動引継ぎがデフォルト ON に変更。Claude Code 2.1.128 で
    SessionStart hook の source='clear' が reliable になったため、/clear 後の
    新セッションは自動的に前セッションの memory を merge + 注入する。
    (GitHub issue #49937
    は解決済み)
  • THROUGHLINE_DISABLE_AUTO_HANDOFF=1 env var で auto path を OFF にできる。
  • /tl の役割を明示意思マーカーに簡素化。memo 4 項目入力の指示を削除し、
    baton を立てるだけの slash command に。/tl は env で auto OFF にしている
    ユーザー、または /clear を経由しない引継ぎに使う逃げ道。
  • /tl-trim slash command 廃止。memo 入力 + dry-run preview の役割を持って
    いたが、memo 廃止と軽量化方針で役割なしに。Codex 経路の throughline trim
    CLI は維持 (--host codex での guarded execute / preflight など)。
  • throughline save-inflight CLI 削除。memo 廃止に伴う除去。
  • updateBatonMemo 関数削除src/baton.mjs の export から外した。
  • schema v8 migration: handoff_batons.memo_text 列を drop。
  • 注入内容を L1 + L2 + L3 references のみに簡素化。memo セクション、
    中断直前 thinking セクション、Claude 向け footer の使い方説明を削除。L2 全文
    に「次に何をしようとしていたか」が含まれているため redundant。

Added

  • src/db.mjs: schema v8 migration (handoff_batons.memo_text 列 drop)。
  • src/session-start.mjs: 引継ぎ判定の 2 経路ロジック:
    1. baton path: consumeBaton 先発で baton ありなら merge + 注入
    2. auto path: baton 無し + source='clear' + env disable 無し で同 project の
      最新 Claude unmerged session を自動 predecessor に merge + 注入
  • inheritance-decision.logtriggered_path / auto_handoff_disabled
    フィールドを追加。baton_has_memo フィールドは削除。
  • src/resume-context.mjs: L3 references 一覧を注入テキストに追加
    (Codex renderCodexRolloutMemoryPreview 形式の - ${kind}: \throughline detail ``)。Reading Contract / Continuation Instruction
    も Codex 風 framing に揃えた。

Notes

  • src/handoff-record.mjs の memo / thinking projection は 維持: Codex 側
    (codex-handoff.mjs, codex-resume.mjs, codex-handoff-smoke.mjs など) が
    memory.inflightMemo / memory.latestThinking を参照しているため。Claude
    側は resume-context.mjs で「使わない」だけ。
  • src/cli/trim.mjs維持: Codex 経路 (--host codex) と doctor
    (--trim --host claude) で使う describeTrimHost('claude') の dry-run 表示
    が依存しているため。/tl-trim slash command が無くなっても CLI は残る。
  • 既存 ~/.throughline/logs/inflight-memo.log ファイルは新版で書き込まれない。
    ユーザー側で手動削除可能。

v0.3.25 — Codex sidecar groundwork + Codex primary trim foundations

09 May 07:07

Choose a tag to compare

[0.3.25] — 2026-05-08

Added

  • Claude-primary / Codex-sidecar groundwork:
    HandoffRecord projection, throughline handoff-preview,
    throughline_handoff example context, and codex-sidecar-diagnostics /
    codex-sidecar-dry-run command surfaces.
  • Optional codex-sidecar L2→L1 summarization path. When the sidecar is
    configured for the summarize-l1 preset, Throughline uses it for the only
    subagent-like external model call; disabled/unavailable/run-failed sidecar
    states keep the existing Claude Haiku route.
  • /tl-trim dry-run surface:
    throughline trim --dry-run, --host, --keep-recent, --all,
    --memo-stdin, --codex-thread-id, and throughline doctor --trim.
  • Codex app-server protocol helpers for the verified trim flow: newline JSON
    framing, initialize / resume / rollback / inject / turn-start request
    builders, and parser coverage.
  • Codex rollout-backed trim source for explicit --codex-thread-id plans.
    This lets Codex dry-run / preflight / guarded execute use the active rollout
    even when the Throughline DB has no Codex bodies rows.
  • throughline codex-capture, which captures explicit Codex rollout active
    turns into a namespaced codex:<thread_id> Throughline DB session. Re-capture
    rebuilds that session so rolled-back tail turns do not survive as current L2.
  • Codex capture now stores rollout function-call L3 details as well as L2
    bodies: function_call becomes details.kind = tool_input, and
    function_call_output becomes details.kind = tool_output.
  • Host-mode L2→L1 backend selection. Claude-primary keeps the existing
    codex-sidecar / Claude Haiku compatibility route, while Codex-primary uses
    the Codex CLI backend and reports failure explicitly instead of falling back.
  • throughline codex-summarize, which writes L1 skeletons for captured
    codex:<thread_id> sessions through the Codex CLI backend once the captured
    body count exceeds the L2 window.
  • throughline codex-resume, which renders captured codex:<thread_id> memory
    as Codex active-work context. --format handoff emits a concise fresh-thread
    handoff prompt for safe continuation without mutating the current Codex
    thread; the handoff view caps recent L2 entries, long body text, and detail
    references while preserving the full context in the normal text renderer.
    --format item-json emits a Codex developer message item so hosts can
    inject the memory as current-task context instead of a passive archive.
    --memo-stdin prepends a Codex-primary in-flight memo without touching Claude
    /tl batons.
  • throughline codex-handoff-smoke, a read-only validator for the
    codex-resume --format handoff prompt. It checks fresh-thread header /
    current-task contract / source session / start instruction / mutation
    boundary / prompt size / detail-command deduplication before a user starts a
    new Codex thread with that prompt.
  • throughline codex-handoff-model-smoke, an explicit opt-in model smoke for
    the same handoff prompt. It first requires the structural handoff smoke to be
    ready, then runs codex exec --ephemeral --ignore-user-config --ignore-rules --sandbox read-only with a marker prompt. --dry-run inspects the exact
    readiness / command boundary without starting Codex exec, and
    --print-prompt can include the combined prompt for audit. Live model smoke
    requires THROUGHLINE_EXPERIMENTAL_CODEX_HANDOFF_MODEL_SMOKE=1 and does not
    mutate the current Codex thread.
  • throughline codex-handoff-start, a guided read-only fresh-thread start plan
    for Codex handoff. It reports the structural smoke command, model-smoke dry-run
    boundary, handoff render command, optional live model smoke command, and can
    include the handoff prompt with --print-prompt. When --memo-stdin is used,
    the replay commands include --memo-stdin and the output reminds callers to
    pipe the same memo.
  • throughline doctor --codex, a read-only Codex-primary diagnostic that shows
    current thread env identity, rollout candidates for the cwd, captured
    codex:<thread_id> DB sessions, context refresh blockage, new-thread
    handoff readiness, and the next capture/resume commands.
  • Global throughline install now also registers the Codex Stop hook in
    ~/.codex/hooks.json with absolute node + installed bin/throughline.mjs,
    async: false, and timeoutSec: 300, and enables
    [features].codex_hooks = true in ~/.codex/config.toml. Existing non-
    Throughline Codex hooks, including Caveat / Spotter hooks, are preserved.
  • Global install now also installs a $throughline Codex skill under
    ~/.codex/skills/throughline, giving Codex a natural-language entrypoint for
    Throughline status, resume, summarize, dry-run, preflight, and explicit
    execute workflows. The rollback / inject execute path is enabled again after
    controlled rollback model-visible smokes failed to reproduce rollback marker
    resurrection.
  • A bare $throughline Codex skill invocation now runs the safe inspection
    shape: doctor --codex, guarded dry-run, and preflight. Explicit
    trim --execute --host codex --all mutates the current Codex thread when the
    user asks for it and the guard checks pass.
  • Codex Stop hook automatic refresh now attempts guarded rollback + Throughline
    DB memory injection at the 90% verified-usage threshold. Estimate-only usage
    still never triggers mutation.
  • throughline codex-visibility-smoke, an experimental opt-in Codex app-server
    smoke that injects the Codex active-work developer message and starts a
    marker-check model turn. It requires
    THROUGHLINE_EXPERIMENTAL_CODEX_MODEL_VISIBLE_SMOKE=1 and supports explicit
    model-turn timeouts with --request-timeout-ms / --timeout-ms; it also
    accepts the same --memo-stdin active-work memo surface as codex-resume.
    --resume-after-inject re-runs thread/resume after injection before
    starting the marker turn, so resume persistence can be checked explicitly.
  • Codex-first roadmap docs that set the next implementation order: Codex
    primary support with a Codex CLI L2→L1 backend, then Codex rewind-compatible
    trim, then Claude rewind finalization.

Changed

  • Resume context now frames recent L2 as an active work thread with explicit
    reading/continuation instructions at both the top and bottom of injected
    memory. Older L2 entries may be superseded by later entries and are not
    blindly treated as still-current truth.
  • Hook entry modules are import-safe and expose run() so subprocess tests can
    cover the Claude path without touching the user's real database.
  • VSCode task tests suppress Claude-facing <system-reminder> notices by
    default and opt in only for notice assertions, keeping test output from
    looking like fresh user-facing instructions.
  • codex-sidecar subprocess calls now shell-wrap on Windows so npm global
    .cmd shims resolve consistently, matching the existing Claude CLI handling.
  • L2→L1 sidecar summarization accepts the stable SidecarResult JSON shape
    (summary without status: "ok") as well as the older test fixture shape.
  • codex-sidecar-dry-run --turn-timeout-ms now forwards the timeout into the
    normalized sidecar request instead of only changing the local subprocess
    timeout.
  • .codex-sidecar.yml no longer denies every path containing token, so
    legitimate source files such as src/token-monitor.mjs remain reviewable.
  • .codex-sidecar.yml allows release docs and Claude slash commands, so
    review/risk-check sidecars can inspect the same contract surfaces that are
    shipped in the npm tarball.
  • .codex-sidecar/logs/ is ignored as a runtime artifact from real sidecar
    smoke runs.
  • Codex trim host status now distinguishes verified app-server rollback/inject
    primitives from guarded execution requirements. Codex Stop hook automatic
    refresh is enabled only at the 90% verified-usage threshold and still uses the
    same explicit thread identity, injectable DB memory, and rollout/app-server
    turn-count guards.
  • Trim dry-run now carries an explicit Codex thread identity separately from
    the Claude/Throughline session_id, avoiding latest-rollout guessing.
  • Codex trim can now use THROUGHLINE_CODEX_THREAD_ID or CODEX_THREAD_ID as
    a current-thread identity signal when --codex-thread-id is omitted; the CLI
    flag remains authoritative and Throughline still does not guess from the
    latest rollout.
  • throughline doctor --trim --host codex now reports whether a current Codex
    thread id is available from env and adjusts its dry-run example accordingly.
  • throughline doctor --trim --host codex now also reports the read-only host
    primitive audit status as diagnostic evidence rather than an execute blocker.
  • throughline trim --preflight --host codex --codex-thread-id <id> now
    performs a guarded Codex app-server initialize/read/resume check and stops
    before sending rollback or inject. When the plan source is codex-rollout,
    preflight compares rollout active turns with app-server read/resume turns and
    refuses the plan if they differ.
  • Codex rollout-backed trim source now excludes the current in-flight turn from
    rollback planning, including the latest post-rollback assistant continuation.
    This keeps preflight aligned with app-server thread/read / thread/resume,
    which only report completed host-visible turns during an ongoing Codex turn.
  • throughline trim --execute --host codex --codex-thread-id <id> no longer
    requires THROUGHLINE_EXPERIMENTAL_CODEX_TRIM_EXECUTE=1 and no longer treats
    host primitive audit or restore-safety diagnostics as mutation blockers.
    Execute still refuses before mutation when Codex thread identity, injectable
    Throughline DB memory, or rollout/app-server turn-count agreement is missing.
  • Codex guarded execute now polls post-inject thread/read until the injected
    memory item is visible when the app-server reports an injected turn count, and
    reports `postInjectVisibilityChe...
Read more

v0.3.24 — gitignore recommendation

01 May 16:37

Choose a tag to compare

Added

  • shouldRecommendGitignore in src/vscode-task.mjs:
    when ensureMonitorTaskFile transitions to created / merged / repaired
    inside a git repository whose .gitignore lacks a .vscode/tasks.json-
    matching entry, emit a one-time <system-reminder> to stdout recommending
    .gitignore registration. Suppressed by a .throughline-gitignore-noted
    marker so it does not repeat. Negation patterns (!.vscode/tasks.json) are
    treated as explicit-track intent and still trigger the recommendation.

Why

  • .vscode/tasks.json always contains environment-specific absolute paths
    (process.execPath, the install location of throughline.mjs). Even though
    v0.3.23 auto-repairs stale paths after the fact, the right answer is to not
    commit it in the first place. The published npm tarball was already clean of
    absolute paths (files field excludes .vscode/, no hardcoded paths in
    source); this release strengthens runtime advice for the consumer side.

v0.3.23 — cross-environment fixes

01 May 16:37

Choose a tag to compare

Added

  • Cross-environment .vscode/tasks.json repair: when an existing Monitor task
    references absolute paths that don't exist on the current machine
    (e.g. a Windows path on a WSL2 clone), ensureMonitorTaskFile now rewrites
    just command / args while preserving any label / presentation /
    isBackground customization. New helpers findMonitorTaskIndex and
    isMonitorTaskBroken (absolute-path + non-existent test) drive the new
    action: 'repaired' branch, and buildSetupNotice('repaired') returns a
    one-time Reload Window notice.
  • resolveThroughlineOnPath in src/cli/install.mjs:
    after throughline install completes, walk PATH to confirm throughline
    resolves. If not, print a stderr fix recipe (npm prefix -g → add to
    ~/.bashrc → re-run doctor). Catches the silent-fail case where
    ~/.npm-global/bin is exported in ~/.profile but not ~/.bashrc (VSCode's
    interactive non-login bash skips .profile).

Documentation

  • README Troubleshooting now covers PATH resolution, WSL2 ↔ Windows PATH
    crossover, cross-OS DB separation (each os.homedir() is its own DB), and
    the auto-repair behavior for stale tasks.