Skip to content

feat: chat-export transcripts, idempotent harvest, linear splitter - #157

Closed
titanwings wants to merge 3 commits into
pr/07-subject-show-and-splitfrom
pr/08-chat-exports-and-idempotence
Closed

titanwings wants to merge 3 commits into
pr/07-subject-show-and-splitfrom
pr/08-chat-exports-and-idempotence

Conversation

@titanwings

@titanwings titanwings commented Sep 11, 2026

Copy link
Copy Markdown
Owner

What

feat: chat-export transcripts, idempotent harvest, linear splitter

Commits

  • feat(adapters): read chat exports as transcripts
  • feat(cli): make harvest idempotent and never guess between same-named people
  • fix(runtime): terminate and linearize the text splitter, and harden harvest

Stack

Stacked on pr/07-subject-show-and-split; the whole series ends at distilly-work (0bd924e).

Verification

Every feature carries an author report and an independent audit in the delivery evidence folder (host-verification/), including screenshots and the audit verdict that drove the fixes. Gates on the top of the stack: format, lint, docs, release check, and 1163 tests.

Real hosts

Codex, Claude Code 2.1.268, OpenClaw 2026.9.2, Hermes v0.19.0, and DSH 0.1.5-rc.1 were each exercised end to end (install, host-visible confirmation, exactly five MCP tools, person Skill install/remove, uninstall). Capacity fixtures are recorded for Codex 0.146.0, OpenClaw 2026.3.24, and Hermes v0.9.0; newer host versions run on the labelled conservative floor.

Evidence

Author reports and screenshots (delivery evidence folder host-verification/):

  • f5-chat-export-parsers-REPORT.md, f5-chat-export-parsers.png
  • f12-f13-harvest-and-split-hardening-REPORT.md, f13-split-hardening.png, f15-round13-fixes-REPORT.md

Independent audit reports:

  • round11-split-VERIFY.md, round12-harvest-idempotence-VERIFY.md, round13-split-termination-VERIFY.md

distilly agent added 3 commits September 11, 2026 06:00
A person's own conversations are the best material for distilling them, and
ChatGPT, Claude, Telegram, Slack, and Discord all export JSON. Those files were
pretty-printed as generic JSON, which sorts the mapping tree and loses who said
what.

The application/json parser now recognizes those exports structurally and
renders one verbatim line per message with a normalized time and speaker, keeps
the user's standing instructions, reports every omission as a warning, and
leaves any other JSON document byte-identical to the previous rendering.
… people

An independent audit of the subject-resolution work found that harvesting the
same folder twice stored each file again as new evidence, that a name living in
another space was silently duplicated into the default space, that a
cross-space pair of same-named people was resolved by the create conflict
instead of being shown, and that a differently capitalized name silently split
one person in two.

Harvest now resolves the name before it creates anything: one match is reused,
several are listed for the operator to choose from, and none warns when a
near-duplicate exists. Files whose bytes this subject already stored are
skipped with --force to override, recorded in a local harvest-state.json.
…arvest

An independent audit of the byte-exact splitter found a hang: a long run of
combining marks made the cut back-off walk back to the start of an empty part
forever, so harvesting such a file never returned. The same back-off scanned the
whole remaining line for every part, which was quadratic on one huge line.

The splitter now canonicalizes first (CRLF to LF, NFC, trailing spaces removed),
measures each line once, bounds every cut adjustment, and never leaves a part
empty, so it terminates, runs in linear time, and cannot hand the engine a part
that normalization would reject or rewrite. Harvest also keys its record on the
real path, merges the record when another run wrote it, applies --limit after
the already-ingested filter, and reports a file it cannot read instead of
letting a raw error escape.
@titanwings

Copy link
Copy Markdown
Owner Author

Superseded: this stacked series is consolidated into the dot-skill-test line (same tree, kept on distilly-work). Closing without merging to avoid conflicts with the v2 rewrite.

@titanwings titanwings closed this Sep 12, 2026
@titanwings
titanwings deleted the pr/08-chat-exports-and-idempotence branch September 12, 2026 18:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant