Skip to content

fix(neopi): resume native sessions across workspace aliases - #132

Merged
PsychedelicShayna merged 2 commits into
nightlyfrom
fix/session-paths
Oct 22, 2026
Merged

PsychedelicShayna merged 2 commits into
nightlyfrom
fix/session-paths

Conversation

@PsychedelicShayna

@PsychedelicShayna PsychedelicShayna commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner

Note

GPT-6.1 Sol on behalf of PsychedelicShayna

What

Match NeoPi workspace and journal paths by their filesystem identity, so symlink and canonical spellings find the same session and bound NeoCode thread.

Make unregistered sessions in All projects selectable. Explicit resume resolves an existing project or an exact known worktree, or creates a project for the validated native working directory. Discovery remains read-only. Bound thread IDs, native session IDs, provider instances and history restoration ordering remain intact.

Why

Refs #127.

Lexical cwd comparisons excluded valid sessions when NeoPi and NeoCode used different spellings of one directory. All projects disabled sessions without a registered project, while resume treated the currently selected project as the only permissible destination.

Missing, relative and non-directory native working directories now fail before persistent mutation. Prefix-sharing and nested directories do not count as the same workspace.

The parent integrator owns documentation, verification, merge and installation. This PR does not change the separate native-history/tree authority work.

Testing

Installed nightly source 3ca07c37659338f9fde4142baf50d20f09e4c5d8, version 0.0.42-nightly.20261022.39742893669.1. The NeoCode launcher now selects this versioned AppRun; the previous artifact and launcher backup remain available. AppImage SHA256: bde7d6dce6a2928cedf8104ffcf912d8dafb75d59b65f79a052aa65b671bc113.

Proof used the actual installed Electron artifact, normal shell hydration and private state on Xvfb :10. The owner's live window, database and wallet were not used or restarted.

PR #132 is delivered. Four genuine native-format journals were created through NeoPi's SessionManager in private storage, including one in a real isolated Git worktree. No model inference or owner-session resume was used.

  • This project listed both /home/shayna/repos/neopi and its canonical /home/shayna/source/github/PsychedelicShayna/neopi fixture, while excluding the unrelated directory.
  • All projects exposed the foreign-directory and worktree rows as actionable. Both resumed through the UI, registered their correct directories and displayed their native fixture history.
  • Canonical and alias fixtures both resumed into the existing neopi project. The project selector had one neopi entry plus the two newly registered foreign directories, not duplicate alias projects.
  • Each resulting URL retained the selected native session ID. Listing alone did not register the foreign projects.

The catalog file passed 55 tests after canonical fixture-root correction; both picker files passed their 19 tests. Web types passed. Actual server types retain only baseline235; an earlier mistyped package filter that selected nothing is not counted as verification. Targeted lint/format passed.

Project scope · All projects · Foreign resume · Worktree resume · Canonical resume · Alias resume · Structured proof.

Full journal/tree fidelity remains #134 and live synchronization remains #135; these path repairs do not claim those features complete.


  • vp check and vpr typecheck pass (CI runs both; locally run only the checks for the touched scope, per AGENTS.md › Verifying). Focused checks above; no full suite.
  • Tested locally. Installed private-state proof and focused checks are recorded above.
  • Before/after images (video for motion) uploaded to GitHub for UI changes, not committed (if user-facing). Linked above.

Model: openai-codex/gpt-6.1-sol. Harness: NeoPi.

Installed integration: GPT-6 Astra in NeoPi; focused execution by GPT-6 Luna.

Compare native workspace and journal paths by filesystem identity rather than spelling. Keep bound NeoCode threads and their provider authoritative, and match known worktrees only by their exact directory identity.

Allow All projects to resume sessions whose folders are not registered. Resolve an existing project or create one for the validated native cwd after history validation, without changing projects or bindings during discovery. Reject missing, relative and non-directory native workspaces before persistent mutation.

Add focused catalog regressions for symlink identities, foreign and nested workspaces, known worktrees, invalid cwd handling and bound live sessions. Add picker coverage for unregistered foreign-session restoration. Tests, builds, lint and formatting were not run, as assigned; the parent owns integrated verification while the polite relay is unavailable.

Model: openai-codex/gpt-6.1-sol

Co-authored-by: GPT-6.1 Sol <noreply@openai.com>
@PsychedelicShayna PsychedelicShayna added bug Something isn't working priority: p1 High value or prerequisite for several issues agent: finished The agent's part is done; not necessarily mergeable labels Oct 22, 2026
@github-actions github-actions Bot added size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Oct 22, 2026
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ The exact PR base did not have a successful artifact. Baseline uses the latest successful main measurement shown below.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.5 KiB 13.5 KiB +20 B (+0.1%) 15.1 KiB ✅
Codex Thread snapshot wire 7.1 KiB 7.1 KiB +8 B (+0.1%) 7.3 KiB ✅
Codex Live turn WebSocket wire 6.4 KiB 6.5 KiB +12 B (+0.2%) 7.8 KiB ✅
Codex Live turn WebSocket decoded 56.3 KiB 56.3 KiB 0 B (0.0%) 66.4 KiB ✅
Codex Live turn messages 10 10 0 (0.0%) 21 ✅
Claude Total thread wire 13.5 KiB 13.5 KiB −15 B (−0.1%) 15.1 KiB ✅
Claude Thread snapshot wire 7.1 KiB 7.1 KiB 0 B (0.0%) 7.3 KiB ✅
Claude Live turn WebSocket wire 6.4 KiB 6.4 KiB −15 B (−0.2%) 7.8 KiB ✅
Claude Live turn WebSocket decoded 57.0 KiB 57.0 KiB 0 B (0.0%) 66.4 KiB ✅
Claude Live turn messages 9 9 0 (0.0%) 21 ✅

Baseline: 3c10e1c · PR result: 4e15f5d · Source CI: failure

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 113.9 KiB
  • Claude decoded thread snapshot: 114.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Resolve the scoped fixture directory before deriving expected canonical paths, so a symlinked scratch parent does not make the path-identity assertions machine-specific. Mark the bidirectional path pairs as tuples for exact optional typing. Document that explicit All projects resume can register a validated native directory, while discovery remains read-only.

The initial focused run passed 70 of 74 tests; its four failures were the scratch-parent alias assumptions now corrected. The affected catalog file then passed all 55 tests. Both picker files and the web typecheck passed. The real server package typecheck now reports only the known serverSettings.test.ts:235 baseline diagnostic; an earlier filter that matched no package is not counted as a check. Targeted lint passed and the reported formatter changes are included. Installed UI proof follows the desktop batch.

Refs #127

Model: openai-codex/gpt-6-astra
Co-authored-by: GPT-6 Astra <noreply@openai.com>
@PsychedelicShayna
PsychedelicShayna merged commit 3ca07c3 into nightly Oct 22, 2026
15 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent: finished The agent's part is done; not necessarily mergeable bug Something isn't working priority: p1 High value or prerequisite for several issues size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant