Repository navigation
Release V3.0.0: Multi-User Product Foundation - #22
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- users and user_sessions tables (reviewed Alembic migration) - argon2 password hashing; server-side sessions in an httpOnly, SameSite=Lax cookie, stored only as a SHA-256 hash - register / login / logout / me endpoints; attempts and analytics now require login, boss data stays public - frontend: nav bar, login and register pages with a show-password toggle, welcome page with the boss list for visitors, login prompt on boss pages - tests for auth, access control, the auth UI, and the integration workflow; CI smoke test logs in through nginx Attempts are still shared by all logged-in users until Milestones 2-3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add accounts and authentication (V3 Milestone 1)
- attempts.user_id (nullable FK) plus a (user_id, boss_id) index, in a reviewed migration that keeps existing attempts as ownerless - every attempt read and write, boss analytics, progression and the Sekiro dashboard queries are scoped to the logged-in user - ownerless pre-account attempts are hidden from everyone until `python -m scripts.claim_attempts <username>` assigns them - isolation tests at API and service level, claim script tests, a migration test on a database with existing attempts, and a second user in the integration workflow - README: how to claim V1/V2 attempts after upgrading; CLAUDE.md: make user_id NOT NULL in Milestone 4 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Give attempts an owner and scope analytics per user (V3 Milestones 2-3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Insert Milestone 4 (all main bosses, Chinese move names from a Chinese wiki or marked as translations) before public deployment, which becomes Milestone 5. Move video references are a deferred Milestone 8. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Milestone 4 becomes the English/Chinese interface (language saved in the account, or the browser for visitors; each language shows only its own text). Milestone 5 is content completion plus a review of existing movesets. Deployment, recommendations, release and video references move to Milestones 6-9. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- moves.name_zh / name_zh_source ('wiki' | 'translation') /
name_zh_source_url, with check constraints added by hand to the
reviewed migration (autogenerate misses them)
- seed validation requires a Chinese name for every move; 102 existing
moves named: 6 from BWIKI combat-art pages, 96 translations
- API returns the Chinese names; interim frontend display to be replaced
by the language switch
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- language switch in the nav bar; saved on the account (users.preferred_language, PATCH /api/auth/me) or in the browser for visitors, defaulting to the browser language - every interface string in both languages via a small in-house dictionary and t(); each language shows only its own text - Chinese boss content for the 8 existing bosses: locations, phase names, and all 234 move text fields, translated from the sourced English; the seed requires a Chinese version for every English field - Chinese moveset shows one note about translations; wiki-sourced names link to their page - reviewed migration with a hand-added check constraint Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each move option carries its description as a hover tooltip, and the chosen move's description is shown under the select (phones have no hover). Both follow the interface language. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The review file is committed temporarily so the review can continue on another machine; it must be deleted before the pull request. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
V3 becomes the multi-user product foundation (bilingual interface, existing-content cleanup, release). V4 adds combat ground truth from runtime and engine evidence, plus public deployment; V5 is gameplay video analysis and practice recommendations; V6 is multi-game. - READMEs: add the V3 status section, replace the roadmap overview with V1-V6, and update the public deployment note and tech stack - CLAUDE.md / ROADMAP: make attempts.user_id NOT NULL before V4 public deployment; fill telegraph / common_mistakes only when the source states them Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # CLAUDE.md
- Owl (Father)'s Shadowfall becomes the translation 巨型忍者落杀 rather than the combat art 秘传·巨型忍者落杀, since no authoritative source ties the two together; descriptions that mention it follow - Corrupted Monk (Mibu Village) is 破戒僧; True Corrupted Monk stays 宫内破戒僧 - regenerate the review file with these marked as decided Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Chinese content review is done, so the temporary review file is removed and the bilingual interface is recorded as delivered in CLAUDE.md, ROADMAP and both READMEs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add an English / Chinese interface (V3 Milestone 4)
ROADMAP.zh-CN.md mirrors ROADMAP.md section by section, using the same Chinese terms as the app and README. The English and Chinese roadmaps link to each other, and the Chinese README links to the Chinese roadmap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From the two-wiki review (Fextralife and Fandom): - True Corrupted Monk: phase 2 keeps every phase-1 move alongside the illusion summoning; the illusion text no longer gives a shadow count or the misleading Bite Down tip, and adds the tree aerial-Deathblow - Guardian Ape: add the phase-2 Jumping Sweep from the Fextralife attack table; the rolling body slam can be blocked - Owl (Father): Shadowfall is the Mushin combat art 秘传·巨型忍者落杀 (both wikis say so); the firecracker dodge mistake moves to the 5-slash firecracker combo where the source puts it - Isshin: deflecting Ichimonji Double leads into a force-wave follow-up Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Isshin: the fight now starts with a Genichiro, Way of Tomoe phase holding only the moves both wikis agree on (his lightning is left out: the wikis conflict). A data migration moves existing Isshin attempts up one phase. - Optional move-level source fields (source_name / source_url, set together or not at all), used for moves taken from another page; the moveset shows them under the move. - Both Owls gain Mikiri Counter (Fandom). - Remove actions that cannot end an attempt: Owl's zig-zag, Guardian Ape's roar, Lady Butterfly's rafter jump, Great Shinobi Owl's charm. - Guardian Ape's diving lunge loses its inferred telegraph; Isshin's phase-3 distance slash is no longer called a lightning variant. - Consistent move types: backflips are combos, lightning attacks are lightning, deflectable moves are not marked unblockable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
research/ground_truth/semantic/wiki_mapping/ lines up each product move with the Fextralife and Fandom entries that describe it and records how they relate. Across 106 product moves, 52 match one-to-one between the two wikis. scripts/wiki_mapping_report.py rebuilds the readable report and checks that every product move is mapped exactly once. CLAUDE.md and both ROADMAPs now state that the project owner decides what counts as ground truth, and document move-level sources. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The docker job now records an attempt, stops the stack without removing volumes, starts it again, logs in with the same account and checks the attempt is still there. This covers the last step of the V3 success criteria, which nothing tested before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Milestones 5 and 6 are done: Lady Butterfly and Guardian Ape keep their current move lists (the Fandom detail stays in the mapping for V4), and CI now checks that data survives a Docker restart. CLAUDE.md's current focus moves to V4. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Merges V3 from
devintomainfor the v3.0.0 release.What's in V3
research/ground_truth/as the starting point for V4Upgrading a local install
docker compose up -d --buildapplies the new migrations. Existing Isshin attempts move up one phase, because the fight now starts with Genichiro. After registering, claim older attempts withdocker compose exec backend python -m scripts.claim_attempts <username>.🤖 Generated with Claude Code