gabriel / muse public
Closed #109 Bug
filed by aaronrene human · 3 days ago

release: muse#61 symlog fix is in source but in no published build (0.2.1rc5 still drops symbol-journal entries)

0 Anchors
— Blast radius
— Churn 30d
0 Proposals

Summary

muse#61 (closed 2026-09-22) fixed silently dropped symbol-journal (symlog) entries for long markdown-heading symbol names. The fix is in source (commit sha256:d08abfdaa26df2e781fa4b7aae0ebe64cfdc41a3d8df3d38bcac09cd3c7aab85, pyproject.toml version 0.2.1rc11), but it has not reached a published build:

  • Latest MuseHub release: v0.2.1-rc3 (2026-09-11).
  • Installer-delivered build in use: 0.2.1rc5. Its muse/core/symlog.py::symlog_path has no _MAX_LEAF_BYTES guard.

Reproduction (0.2.1rc5, macOS APFS)

Commit a markdown file whose nested heading path percent-encodes past 255 bytes. Observed on 2026-10-20 (home path redacted):

⚠️ symlog write failed for commit sha256:fd5d2fde10713eb812590a16f8da8bfa74797f0141596aaa1e72b58ce3cb81a4 —
symbol journal may be incomplete: [Errno 63] File name too long:
'<repo>/.muse/symlogs/docs/issues/108-gate-1-successor-plan.md/Muse%20%23108%20%E2%80%94%20Gate%201%20successor%20plan%20%28UNFROZEN%29.2.%20The%20second%20Gate%201%20proof%20%E2%80%94%20exact%20contents%20and%20checks.2.5%20Runtime%20profile%202%3A%20wasmi%200.40.0%20restricted%20to%2002-execution.md%3A99-103.code%5Btext%5D'

The leaf is 263 bytes. With the source fix, symlog_path would have switched to the hashed leaf (_MAX_LEAF_BYTES = 200). The commit itself is intact.

Requested

  1. Publish a build that includes d08abfda…, so installs stop dropping entries.
  2. Secondary, small: _write_symlogs has no per-symbol error isolation. The only handler is the call-site try/except in muse/cli/commands/commit.py around the whole call, so any one OSError (for example a directory component or full path over the OS limit, which #61 left out of scope) skips every later symbol in that commit, not just the failing one. Catching and logging per append_symlog call would limit the loss to that one symbol.

Acceptance

  • muse --version from the published installer reports a version that includes d08abfda….
  • The reproduction above commits with no warning and muse symlog shows the entry.
  • If item 2 is taken: a test where one symbol's write raises OSError still journals the other symbols in the same commit.
◎ Activity1
●
aaronrene opened this issue 3 days ago
○
gabriel 2 days ago

Resolved by the muse 0.2.1rc12 publish (2026-10-21).

Verified against the actual published tarball (not just source):

  • muse/core/symlog.py's _MAX_LEAF_BYTES = 200 guard is present in the downloaded muse-0.2.1rc12.tar.gz.
  • Reproduced the exact repro case (deeply-nested markdown heading, long encoded symbol path) end-to-end: commits with zero warnings, and the long symbol gets a hashed leaf filename (e.g. !297fa93cc3e9c645bcc6774bc34d64b460d6ced7a07ab9c7) instead of silently failing.

Both acceptance criteria met:

  • muse --version from the published installer reports 0.2.1rc12, which includes d08abfda….
  • The reproduction commits with no warning and the symlog entry is present.

Item 2 (per-symbol error isolation in _write_symlogs) was not addressed here — it was flagged as secondary/optional in the original report. Filing that separately if we want it tracked.

Closing.

✓
closed this issue 2 days ago