R6(a): de-stage code, docs, READMEs; split stage6_test

Mechanical, behaviour-preserving removal of Stage N / TODO-N / phase (RN)
references from comments, doc-comments, service READMEs, the current-state docs
(ARCHITECTURE, FUNCTIONAL+_ru, TESTING, UI_DESIGN), config-file comments, and the
.fbs/.proto schema comments. PLAN.md / PRERELEASE.md / CLAUDE.md keep the stage
history.

- Rename the only stage-named identifiers: registerStage8 -> registerSocialOps,
  registerStage11 -> registerLinkOps (gateway transcode).
- Split stage6_test.go: TestEmailLoginFlow -> email_test.go,
  TestGuestAutoMatchLeavesNoStats (+ provisionGuest) -> account_test.go.
- Regenerated proto bindings (push.pb.go, telegram_grpc.pb.go) from the de-staged
  .proto comments; FB Go/TS bindings unchanged (flatc strips schema comments).

go build/vet/gofmt clean across modules; integration typecheck and pnpm check green.
This commit is contained in:
Ilia Denisov
2026-06-10 16:56:03 +02:00
parent a372343797
commit 8881214213
156 changed files with 749 additions and 778 deletions
+3 -3
View File
@@ -62,7 +62,7 @@
return `${me?.score ?? 0} : ${opp.join(', ')}`;
}
// Hiding a finished game (Stage 17). The delete action sits behind each finished row and is
// Hiding a finished game. The delete action sits behind each finished row and is
// revealed by swiping the row left (touch) or tapping its kebab (any pointer); the action is
// per-account and irreversible. Only one row is revealed at a time.
let revealedId = $state<string | null>(null);
@@ -277,13 +277,13 @@
user-select: none;
}
/* Game rows are a compact, flat list: no per-card frame, a hairline divider between
consecutive rows (Stage 17). */
consecutive rows. */
.list {
display: flex;
flex-direction: column;
}
/* Each finished row can slide left to reveal a delete action sitting behind it; the row's
own opaque background hides that action until revealed (Stage 17). */
own opaque background hides that action until revealed. */
.rowwrap {
position: relative;
overflow: hidden;
+5 -5
View File
@@ -12,8 +12,8 @@
// The auto-match move clock (mirrors backend game.DefaultTurnTimeout = 24h).
const AUTO_MATCH_HOURS = 24;
// The offered variants are gated by the languages the sign-in service supports
// (Stage 15); the auto-match list and the friend-invite picker both use this.
// The offered variants are gated by the languages the sign-in service supports;
// the auto-match list and the friend-invite picker both use this.
const variants = $derived(availableVariants(app.session?.supportedLanguages));
const timeouts = [
{ secs: 300, key: 'time.minutes' as MessageKey, n: 5 },
@@ -39,7 +39,7 @@
}
}
// startPoll is the matchmaking fallback used only while the live stream is down: with the stream
// up the match_found push drives navigation (R4). It polls lobby.poll every 2.5s.
// up the match_found push drives navigation. It polls lobby.poll every 2.5s.
function startPoll() {
if (poll) return;
poll = setInterval(async () => {
@@ -58,7 +58,7 @@
}
// cancelSearch leaves the auto-match pool on the backend too, so a cancelled quick-match
// is actually dequeued — otherwise the account stays queued (blocking a re-queue) and the
// reaper later substitutes a robot for a game the player abandoned (Stage 17 fix).
// reaper later substitutes a robot for a game the player abandoned.
function cancelSearch() {
stop();
searching = false;
@@ -104,7 +104,7 @@
let selected = $state<string[]>([]);
let friendFilter = $state('');
// No default game type yet — the player must pick one (a smarter default from play
// history / language is TODO-6). '' renders the disabled placeholder option.
// history / language would be a future refinement). '' renders the disabled placeholder option.
let inviteVariant = $state<Variant | ''>('');
let timeoutSecs = $state(86400);
let hints = $state(1);
+3 -3
View File
@@ -49,7 +49,7 @@
}
// populate loads the editable form from the current profile. The profile screen is
// edited inline (no edit/cancel toggle, Stage 17), so this runs on mount and after a
// edited inline (no edit/cancel toggle), so this runs on mount and after a
// link/merge swaps the active account.
function populate() {
const p = app.profile;
@@ -215,7 +215,7 @@
</form>
{/if}
<!-- Linking & merge (Stage 11). Shown to everyone, including guests, who
<!-- Linking & merge. Shown to everyone, including guests, who
upgrade by binding their first identity. -->
<section class="emailbox">
<h3>{t('profile.linkAccount')}</h3>
@@ -246,7 +246,7 @@
{/if}
</section>
<!-- Logout is hidden for now (Stage 17) but kept wired — drop `hidden` to re-enable
<!-- Logout is hidden for now but kept wired — drop `hidden` to re-enable
once its entry point is decided; logout() also still runs on an invalid session. -->
<button class="logout" hidden onclick={() => logout()}>{t('login.title')} / logout</button>
{/if}