Merge branch 'codex/20260831-diagnose-history-pagination-3eac1d7b-diagnose-history-pagination-3eac1d7b'

This commit is contained in:
inman
2026-09-01 11:46:40 +08:00

View File

@@ -0,0 +1,83 @@
# Task: Diagnose older conversation history loading
## Identity
- Task ID: 20260831-diagnose-history-pagination-3eac1d7b
- Mode: Feature
- Branch: codex/20260831-diagnose-history-pagination-3eac1d7b-diagnose-history-pagination-3eac1d7b
- Worktree: /Users/inmanx/Documents/makelore-diagnose-history-pagination-3eac1d7b
- Base commit: 38f85f6b5e4dc4e2c5e5b9f8f4506554cfd578f5
- Owner: codex
- Status: Ready for Integration
## Scope
- Diagnose why older messages stop loading while scrolling upward in the
Makelore Code conversation shown in the supplied screenshot.
- Trace Renderer scroll behavior, the public Snapshot/Host API contract,
Main-owned Pi session hydration, and the persisted session data for the
affected local conversation.
- Make no product-source, dependency, runtime, account, or external-service
changes.
## Intent And Constraints
- Preserve the Main-owned Pi `0.84.2` and product-neutral Snapshot/Patch
boundary; do not introduce or infer a Renderer-to-Pi history path.
- Treat the running development worktree, application logs, project metadata,
and Pi session files as read-only evidence.
- Distinguish persisted-data loss from a bounded projection or missing UI/API
pagination mechanism.
## Outcome
- Identified a deterministic two-layer history-display boundary rather than a
transport stall or corrupt session.
- The affected Pi JSONL remains intact at 343 records / 782,976 bytes. Its
active branch contains 342 entries from 2026-08-28T08:34:53Z through
2026-08-31T11:25:59Z, with all parent links traversable to the current leaf.
- The branch contains one compaction. `projectPiSessionSnapshot()` calls
`retainedTail()`, which intentionally discards every active-path entry before
the compaction's `firstKeptEntryId`. For this session that hides 136 records,
including 128 raw messages and approximately 131 product timeline nodes.
The first retained record begins at 2026-08-29T06:11:52Z.
- The remaining tail projects to approximately 195 timeline nodes. Renderer
shows the newest 120 nodes and the `加载更早内容` button only increases that
in-memory window by 100. Its scroll handler merely tracks stick-to-bottom;
it does not request older history.
- The public Snapshot contract and `/snapshot` route expose no history-page
cursor or `before` parameter. After the one in-memory expansion reaches all
195 projected nodes, no additional Main/Pi request is possible even though
the omitted records are still on disk.
- No product source, dependencies, runtime, account, session, or external
service were changed.
## Verification
- Parsed the affected `.makelore/conversations.json` binding and its exact
managed Pi JSONL without writing either file.
- Counted JSONL record types, reconstructed the current leaf-to-root active
path, checked the compaction boundary, and counted retained versus omitted
messages/product nodes.
- Inspected `CodingConversationTimeline`, the Renderer conversation Store,
shared Snapshot contract, Coding Host route, Pi runtime hydration,
`session-projector`, and Agent Server `get_entries` behavior.
- Confirmed current unit coverage explicitly expects pre-`firstKeptEntryId`
history to be absent and covers only in-memory window expansion.
- Searched the current Main log and found no `CODING_SESSION_UNREADABLE`,
missing-entry, or history-load error for this incident.
- No tests were run because this was a read-only diagnosis with no behavior
change; the isolated worktree has no installed `node_modules`.
## Follow-ups
- If a fix is requested, keep the full active-branch history available for UI
display independently of the compacted model-context tail. Add a bounded
older-history cursor/route (or, as a minimal correction, project the full
active path) and make Renderer prepend pages while preserving the scroll
anchor. Keep the compaction summary private and retain Snapshot/Patch as the
product-neutral boundary.
## Promotion Candidates
- None recorded.