Skip to content

feat(core): adopt feedpak_version — read on load + stamp on manifest writes (§4) - #530

Merged
byrongamatos merged 1 commit into
mainfrom
feat/core-feedpak-version
Jun 20, 2026
Merged

feat(core): adopt feedpak_version — read on load + stamp on manifest writes (§4)#530
byrongamatos merged 1 commit into
mainfrom
feat/core-feedpak-version

Conversation

@byrongamatos

Copy link
Copy Markdown
Contributor

Core never read or emitted the manifest feedpak_version field (spec §4 versioning). This adopts it.

Change

  • sloppak.pyFEEDPAK_VERSION = "1.2.0" (the format version this build targets); LoadedSloppak.feedpak_version read from the manifest on load (string, else None for legacy/absent).
  • Stamp on the two core manifest-rewrite paths, never downgrading an existing (possibly higher) declared version:
    • gp2notationsetdefault before its notation-add rewrite;
    • songmeta — opportunistically when a metadata field is supplied (gated on the existing dirty flag → never a standalone rewrite).

Core has no create-from-scratch path (RS-free repo) — the editor plugin's create-mode save stamping FEEDPAK_VERSION is a follow-up in that repo. Internal sloppak naming is intentionally left as-is (a rename is out of scope / risky).

Review

Codex-reviewed: no P1/P2. (P3s addressed: clarified the songmeta comment re dirty semantics; the new test is included.)

Tests

+6 cases (read present/absent/non-string; metadata-write stamp-when-absent / preserve-existing / no-op-no-stamp) + updated the gp2notation key-order test. 197 passed.

Closes #527. Part of #334.

🤖 Generated with Claude Code

…writes (spec §4)

Core never read or emitted the manifest `feedpak_version` field. Adopt it:

- sloppak.py: `FEEDPAK_VERSION = "1.2.0"` constant (the format version this build
  targets); `LoadedSloppak.feedpak_version` read from the manifest on load
  (string, else None for legacy/absent).
- Stamp the version on the two core manifest-rewrite paths, without downgrading
  an existing (possibly higher) declared version:
  - gp2notation: `setdefault` before its notation-add rewrite.
  - songmeta: opportunistically when a metadata field is supplied (gated on the
    existing `dirty` flag, so never a standalone rewrite).

Core has no create-from-scratch path (RS-free repo) — the editor plugin's
create-mode save stamping FEEDPAK_VERSION is a follow-up in that repo. Internal
"sloppak" naming is intentionally left as-is (a rename is out of scope / risky).

Codex-reviewed: no P1/P2. +6 tests (read present/absent/non-string; metadata-write
stamp-when-absent / preserve-existing / no-op-no-stamp) + updated the gp2notation
key-order test for the appended version. 197 sloppak/songmeta/gp2notation tests pass.

Closes #527. Part of #334.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@byrongamatos
byrongamatos merged commit b838213 into main Jun 20, 2026
0 of 3 checks passed
@byrongamatos
byrongamatos deleted the feat/core-feedpak-version branch June 20, 2026 19:59
byrongamatos pushed a commit that referenced this pull request Jul 2, 2026
PR #530 set accept=".feedpak,.sloppak" on the shared upload input, but a
later index.html edit reverted the attribute to ".sloppak" only. The
client-side extension filter (app.js) and the server upload endpoint both
accept .feedpak, so the only effect was the OS file-picker hiding .feedpak
files from the dialog. Restore the dual filter.

Signed-off-by: Kris Anderson <topkoa@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

chore(core): adopt feedpak_version (read on load + emit on write) per spec §4

1 participant