Skip to content

README's games gallery is written from docs/images/gallery.tsv - #401

Closed
v0lumehi wants to merge 3 commits into
seedds:mainfrom
v0lumehi:readme-gallery
Closed

v0lumehi wants to merge 3 commits into
seedds:mainfrom
v0lumehi:readme-gallery

Conversation

@v0lumehi

@v0lumehi v0lumehi commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Concurrent game additions reshuffle README's three-column gallery and conflict. Store the gallery as one ordered TSV row per game and generate the existing HTML table with dm/tools/docs_gallery.py, following the symptom-index workflow.

Change

  • docs/images/gallery.tsv holds screenshots, captions, optional IPA-size notes and optional links to game notes. The current gallery, including Final Fantasy Crystal Chronicles, is preserved byte for byte; README gains only two invisible generator markers.
  • .gitattributes uses the union driver only for the gallery TSV. The reference-document and symptom-index merge rules from Merge docs/reference and the symptom index with git's union driver #400 are excluded, so this PR can land independently. Union merging handwritten prose can retain contradictory edits without a conflict, and a duplicate-bullet check cannot reliably detect that.
  • The generator rejects duplicate images, captions and non-empty title IDs after a union merge. Conflicting edits to an existing game's row require manual resolution. Regenerating README resolves conflicts inside its gallery after concurrent additions.
  • Plain-text captions and notes are escaped for HTML. A game whose IPA size is still unmeasured retains its caption without an empty size line. Reversed generator markers fail with a clear error before writing.
  • AGENTS.md, CONTRIBUTING.md and the developer loop explain the source table and regeneration workflow. AGENTS.md remains within its 1,500-word limit.

Validation

  • Rebased the gallery commits onto current main, preserving the original author's commits and co-authoring the follow-up fix.
  • Python 3.14: all 10 documentation tests pass. A real temporary Git repository exercises concurrent additions, TSV union merging, README conflicts and regeneration; the conflicting-image/caption/title-ID regressions also pass.
  • Full dm/tools/tests suite: 384 tests, 16 skipped, no failures (run outside the sandbox for macOS packaging tools).
  • Pinned ruff 0.17.2 and pyright 1.1.414 ratchet: 405 existing findings, zero new and zero fixed findings still listed.
  • Both generated-document --check commands and git diff --check pass. Removing the two gallery markers produces README byte for byte as on main.

Game impact

No games selected for gameplay regression: the change affects documentation generation only, with no host, shader, profile or build changes. regress.py impact origin/main..HEAD reports eight changed files, zero NVN/HLE entry points and zero runtime feature rules reached. The four available manifests (Hades, Breath of the Wild, Pokémon Scarlet and Tears of the Kingdom) are unaffected; 80 profiles have no manifest. .gitattributes and docs_gallery.py have no runtime mapping. Gameplay, graphics and shader builds were not rerun.

v0lumehi and others added 3 commits October 28, 2026 01:31
The gallery is a table with three games to a row, and new games go at its
end. Every game after the first moved cell shifts, so two pull requests
that each add a game always conflicted in README.md, and the resolution was
redoing the rows by hand.

docs/images/gallery.tsv now holds the gallery, one row per game in the order
it shows them: image, name, note (the IPA size and a remark) and optionally
the title ID that links the name to the game's note. dm/tools/docs_gallery.py
writes README.md's table from it between two comment markers; the table it
writes is byte for byte the one README had (the only change to README.md is
the two markers). .gitattributes merges the TSV with the union driver, so
two new rows merge without a conflict; README.md can still conflict in the
gallery, and running docs_gallery.py on it, conflict markers and all,
writes the right table.

Checked in a clone: two branches that each add a game at the end rebase
onto each other with the TSV merged cleanly and README.md conflicting;
docs_gallery.py then writes both games and test_docs passes. test_docs
fails when README's gallery is not the one the table gives, or a game is in
the table twice. AGENTS.md's rule for the gallery names the table.
The union driver can retain both rows when one branch edits a game's
caption or screenshot while another updates its IPA size. Checking only
captions lets renamed games appear twice with every docs check passing.
Validate unique images, captions and non-empty title IDs in the gallery
reader before regenerating README, and exercise the actual union merge
for each identity in the regression test.

Validation: eight docs tests pass on Python 3.14; the three identity
regressions fail against the original generator; concurrent append and
README conflict recovery passes; both generated docs checks pass; the
pinned lint ratchet has zero new or stale findings. This only changes
documentation generation and its tests; no game runtime paths are touched.

Co-authored-by: v0lumehi <aljic.zijad@gmail.com>
Carry Final Fantasy Crystal Chronicles into the gallery source after
rebasing onto main. Allow an unknown IPA size without an empty subcaption,
escape plain-text captions and notes, and reject reversed gallery markers
with a clear error before writing README.

Keep union merging on the gallery TSV only. The separate reference-doc
union proposal can silently combine contradictory handwritten prose that
its duplicate-bullet check does not detect, so it is no longer a dependency
of this PR. Document the gallery editing and conflict-recovery workflow.

Check concurrent additions with a real Git merge and regeneration, retain
the conflicting-identity regressions, and cover plain text and missing
sizes. Ten docs tests pass; the full tool suite passes 384 tests with 16
skipped outside the sandbox. Pinned lint reports 405 baseline findings,
zero new and zero stale. README matches main byte for byte except for its
two generator markers. No game runtime code changes.

Co-authored-by: v0lumehi <aljic.zijad@gmail.com>
seedds added a commit that referenced this pull request Oct 27, 2026
Keep one gallery row per game in docs/images/gallery.tsv and generate the
existing three-column README table. Scope union merging to that TSV and
reject duplicate game identities after conflicting edits. Keep handwritten
reference docs on normal merging; this lands independently of #400.

Preserve every current gallery entry, allow unknown IPA sizes without an
empty subcaption, and escape captions and notes at the HTML boundary.
Document regeneration and conflict recovery and test concurrent additions
with a real Git merge.

All five PR checks pass. The review's Python tool suite passed 384 tests
with 16 skipped; the 10 documentation tests and both generated-document
checks pass again on current main. README is byte-identical apart from
its two generator markers. No runtime paths or game profiles change.

Co-authored-by: v0lumehi <aljic.zijad@gmail.com>
@seedds

seedds commented Oct 27, 2026

Copy link
Copy Markdown
Owner

Taken into main as 9c52eaa, with Co-authored-by: v0lumehi <aljic.zijad@gmail.com>. Thank you for the contribution—the ordered TSV and generator fit the project's existing generated-document workflow.

The landed version keeps union merging limited to the gallery TSV, preserves the complete current gallery, supports unmeasured IPA sizes, escapes plain-text captions and notes, and tests concurrent additions and conflicting game identities. The reference-document union rules from #400 are excluded; this change stands on its own.

All five PR checks passed. The review's full Python tool suite passed 384 tests with 16 skipped; the 10 documentation tests, both generated-document checks and the final diff checks passed again against current main. README's visible content is preserved. No game runtime or profile changes are included.

Closing as incorporated, following the repository's documented squash-and-close workflow.

@seedds seedds closed this Oct 27, 2026
jthrilly pushed a commit to jthrilly/nxnative that referenced this pull request Oct 27, 2026
Upstream now writes the README gallery from docs/images/gallery.tsv (seedds#401); Pokémon Violet
is a row there, and README.md keeps the fork's XCI line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ThnUkJcQeXJALXUB4nYYEK
Know-It-All-Brother pushed a commit to Know-It-All-Brother/nxnative that referenced this pull request Nov 9, 2026
Keep one gallery row per game in docs/images/gallery.tsv and generate the
existing three-column README table. Scope union merging to that TSV and
reject duplicate game identities after conflicting edits. Keep handwritten
reference docs on normal merging; this lands independently of seedds#400.

Preserve every current gallery entry, allow unknown IPA sizes without an
empty subcaption, and escape captions and notes at the HTML boundary.
Document regeneration and conflict recovery and test concurrent additions
with a real Git merge.

All five PR checks pass. The review's Python tool suite passed 384 tests
with 16 skipped; the 10 documentation tests and both generated-document
checks pass again on current main. README is byte-identical apart from
its two generator markers. No runtime paths or game profiles change.

Co-authored-by: v0lumehi <aljic.zijad@gmail.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.

2 participants