Skip to content

Local Discovery release integration — 2026-09-20

Follow-up integration

Candidate b4c32d1f150385bcf4ccb3a9ebe7171d36459b01 now includes controller 4c724abcd621fa1ef3470c6f45fb3e4c14454192: the frozen retrieval report/scorer, bounded historical backfill and reviewed operator cost journal. One additional billing-audit conflict was resolved by preserving both main's extension/generation billing assertions and the new operator ownership checks. Main's existing generation-enhance policy registration remains unchanged in this candidate.

Fresh checks on this combined code passed: eight hosted typecheck tasks, five build tasks, 148 focused server regressions with zero failures/skips, 185 Python tests, and the generated OSS boundary. The initial operator accounting failure documented below is resolved; the earlier full OSS and expanded client results remain evidence for their unchanged code. This does not claim a newly rerun full hosted suite. The cost patch's independent review closed both findings: poolers are rejected for dry-run as well as apply, and the ownership audit resolves extensionless imports using the configured TypeScript resolver.

The earlier source-install failure below is also superseded by the successful bounded installation/reconciliation in the production preparation report. The source publication and grants are ready; the existing ClickPipe still needs the two new mappings. Semantic promotion remains unsupported by the frozen retrieval results.

Follow-up logs: .local-artifacts/release-followup-{tests,typecheck,build,python,oss}.log. The original integration evidence below is retained with its original scope.

This is a local integration candidate, not a deployment or production enablement. No remote branch, PR, production setting, schema or data was changed by this work.

Inputs and ownership

  • Owned worktree: C:/Users/jefra/.codex/worktrees/yumina-discovery-release.
  • Owned branch: codex/discovery-release. Both path and branch were verified absent before creation.
  • Controller starting commit: ff54af4bb1459684cefb32187f3925e9e5f02560.
  • Fetched main: bf84f55d0b55e91c1318de30230fd4a3732ea739.
  • Common ancestor: edcbd8f3993a6b9bd9b221defb7892ca9b560c2e.
  • Includes foundation #172, measurement #177 and personalization #179 by ancestry.
  • Original workspace and controller worktree files were not edited. Fetch updated the shared origin/main tracking reference as authorized; local main was not merged or reset.
  • The later controller documentation commit dba78e75b was observed but not folded into this explicitly pinned integration. The controller owns ongoing diagnostics.

Merge resolution

One textual conflict occurred, in oss/manifest.json:

  • Retained Discovery's hosted implementation/test forbidden-path rules.
  • Retained main's install-ledger-guard.sql keep override and matching forbidden-path exception.
  • Retained main's State Update Guard hosted-test exclusions.

The other three overlapping files merged automatically and were reviewed:

  • packages/server/src/db/schema.ts: main's Guard fields plus all Discovery schema.
  • packages/server/src/edition/hosted.ts: main's ledger verifier startup/shutdown plus Discovery preferences mounting.
  • packages/server/src/routes/sessions.ts: main's copied Guard settings on branching plus Discovery attribution and strict intervals.

Before the test-only follow-up, index comparisons verified all 183 controller-only changed paths matched the controller input and all 159 main-only changed paths matched fetched main. The four overlaps above were the complete intersection.

The expanded client run also exposed an existing main test failure. An untouched origin/main app source snapshot inside the owned worktree reproduced it: the Guard navigation test searched for the retired description Free for everyone. The single-line test fix selects Yumina Free instead. It retains the assertions for selecting official::openrouter/free, keeping the BYOK story provider unchanged, and subsequently choosing a private correction model. No product behavior changed.

Validation

Validation used an ignored local wrapper at .local-artifacts/release-audit/run-isolated.mjs. It passes only OS path variables, synthetic authentication settings, in-memory database settings and disabled rollout flags. Server tests additionally use the repository's dotenv-blocking isolated launcher. No service credentials, dotenv files, browser or production data were used.

CheckResult
Pre-merge focused Discovery baseline24 passed
Hosted pnpm typecheck8 tasks successful
Hosted pnpm build5 tasks successful; existing large-bundle warnings
Expanded hosted server selection940 passed, 1 failed, 11 service-dependent skips
Expanded client selection after selector fix159 passed, zero failures/skips
Client edition boundaryPassed
Temporal dataset and personalization evaluation134 passed
Generated OSS Discovery boundary and ledger SQL presencePassed
OSS install, typecheck and buildPassed
OSS shared tests55 passed, 1 skip
OSS engine tests1,174 passed
OSS server tests1,484 passed, 4 skips
OSS app tests786 passed

OSS tests ran serially by package to avoid the documented Windows concurrent build/output race. Total OSS result: 3,499 passed, zero failures, five skips. The exported package test commands do not include all .tsx files; the Guard navigation .tsx coverage above was run explicitly on the hosted candidate.

The expanded hosted server failure is billing-coverage.test.ts: every LLM-calling file records usage: lib/personalization/story-model-request.ts calls the descriptor provider without recordUsageLog. This is not introduced by the merge. Its source is identical to ff54af4bb, whose audit already contains the matching raw-chat-completions rule. The transport SHA-256 is bc360306c89f8825d3fcbef13be53439177c09e0eed57463e88d8e59adc0df69. The inspected production caller is the explicitly invoked offline personalization CLI; the serving path does not invoke it. The response parser drops provider usage metadata. No audit exemption, fabricated user billing identity or accounting policy was added. Cost-accounting treatment of these operator calls remains unresolved; this report does not claim a clean full hosted suite.

The eleven hosted skips cover unavailable ClickHouse, Redis and external PostgreSQL integration environments. Local tests do not establish production CDC or capacity. git diff --check against the controller parent reports a trailing blank line in main's unchanged studio-credit-recovery.test.ts; the candidate diff against fetched main is whitespace-clean. The inherited file was left intact.

GitGuardian metadata only

  • Published PR #179 head: 393de766b71d79bec137123f17f008f45fe3deee.
  • Check ID: 106034313302; completed, failure; zero GitHub file annotations.
  • Safe metadata identifies detector Username Password / username_password and packages/server/src/analytics/config.test.ts plus packages/server/src/analytics/migration-cli.test.ts.
  • No matched values, raw check logs or incident payloads were printed or retained.
  • These are test files, but the check has not been dismissed, bypassed or remotely reclassified. Its disposition remains outstanding. The local-only controller and release commits have no new GitHub checks.

Flags and controller handoff

Default-off behavior remains unchanged: cursor, canonical measurement, personalization, interest onboarding and analytics worker readiness. Personalization treatment defaults to zero and session encoding remains raw. Validation child processes explicitly start with those flags off; individual isolated tests toggle their own synthetic fixtures. No deployment environment was written.

This merge does not resolve the earlier distinction between incumbent model and identical incumbent slates: canonical page receipts currently require the cursor path, which changes delivery diversity and continuation. Semantic personalization can remain disabled independently. No ranking model or embedding backfill ran.

Controller-reported production status during this integration, not independently rechecked by this agent:

  • World-history SQL installed; 18,800 baseline mappings reconciled, missing 0, mismatch 0; no feed flags enabled.
  • Measurement SQL attempt under 250 ms lock / 2 s statement limits returned PostgreSQL 57014 and rolled back fully; event/knownness schema not installed.
  • Controller owns a bounded installer fix limited to measurement SQL, its migration test and a new backfill CLI. This candidate leaves those files unchanged pending the controller commit and subsequent integration.
  • Warehouse migration 008 was installed successfully by the restricted migrator: two empty SharedReplacingMergeTree tables and an erasure-filtered view. Flags remain unchanged. This warehouse prerequisite is now complete.
  • The existing ClickPipe is Running with 17 mappings and is missing the two Discovery mappings. Adding the two Discovery source tables remains an operator/UI or newly authorized management-capability step; this agent has not attempted a write through read-only tooling. The controller is preparing that concrete UI step once PostgreSQL source tables are ready.

Commands and local evidence

Creation and merge, after verifying the destination path/branch were absent:

powershell
git worktree add -b codex/discovery-release C:/Users/jefra/.codex/worktrees/yumina-discovery-release ff54af4bb1459684cefb32187f3925e9e5f02560
# Subsequent commands run in the new worktree.
git fetch --no-tags origin main
pnpm install --frozen-lockfile --offline
git merge --no-commit --no-ff origin/main
git add -- oss/manifest.json
node .local-artifacts/release-audit/run-isolated.mjs pnpm typecheck
node .local-artifacts/release-audit/run-isolated.mjs pnpm build
node .local-artifacts/release-audit/run-isolated.mjs python -B -m unittest trainer.test_discovery_data trainer.test_personalization_evaluation -q

Expanded server selection, from the worktree root:

powershell
node .local-artifacts/release-audit/run-isolated.mjs node packages/server/scripts/test-local.mjs 'src/lib/discovery*.test.ts' 'src/lib/recommendations*.test.ts' 'src/lib/personalization-*.test.ts' 'src/lib/personalization/*.test.ts' src/lib/engagement.test.ts 'src/lib/embedding*.test.ts' 'src/lib/account-deletion*.test.ts' src/lib/play-engagement.test.ts src/lib/playtime-policy.test.ts 'src/analytics/*.test.ts' 'src/routes/discovery*.test.ts' 'src/routes/feed-dismiss*.test.ts' src/routes/worlds-local-discovery.test.ts src/routes/playthrough-session-create-regression.test.ts src/routes/sessions-branch.test.ts 'src/extensions/state-update-guard/*.test.ts' 'src/lib/state-guard-*.test.ts' 'src/lib/ledger*.test.ts' src/lib/billing-coverage.test.ts src/lib/usage-log.test.ts src/lib/turn-output-validation.test.ts src/lib/turn-output-validation.pg.test.ts src/routes/state-update-guard.test.ts

Expanded client selection, from packages/app:

powershell
node ../../.local-artifacts/release-audit/run-isolated.mjs pnpm exec tsx --tsconfig tsconfig.app.json --test --test-timeout=120000 --test-concurrency=2 'src/lib/discovery*.test.ts' 'src/lib/feed-beacon*.test.ts' src/lib/analytics.test.ts 'src/features/hub/*.test.ts' src/features/chat/use-guest-session-start.test.ts src/hooks/use-play-with-language.test.ts 'src/features/chat/state-guard*.test.ts' 'src/features/chat/state-guard*.test.tsx' src/features/chat/variable-name-alias.test.ts src/components/layout/top-bar.test.ts src/lib/back-navigation-audit.test.ts src/lib/mobile-nav-drawer-layout.test.ts src/lib/plan-theme.test.ts src/lib/reading-page-canvas.test.ts
node ../../.local-artifacts/release-audit/run-isolated.mjs pnpm check:edition

OSS export was generated with node scripts/oss-export.mjs through the same wrapper, after verifying its resolved output was the new worktree's oss/out. Then node --test scripts/oss-discovery-boundary.test.mjs passed and ledger SQL presence was asserted. Inside oss/out, the wrapper's --local mode ran, in order:

text
pnpm install --lockfile-only --ignore-scripts --offline
pnpm install --frozen-lockfile --offline
pnpm typecheck
pnpm build
pnpm --filter @yumina/shared test
pnpm --filter @yumina/engine test
pnpm --filter @yumina/server test
pnpm --filter @yumina/app exec tsx --tsconfig tsconfig.app.json --test --test-timeout=120000 --test-concurrency=2 src/**/*.test.ts

Ignored local evidence: baseline-*.log, release-typecheck.log, release-build.log, release-server-tests.log, release-app-tests.log, release-app-tests-final.log, release-main-ui-baseline.log, release-python-tests.log, and release-oss-*.log. The only intended integration edits beyond the parent merge are the manifest resolution, the stale test selector and this report.