Skip to content

Recovery: full verification, roadmap reconciliation, and preview enablement - #1

Merged
RaulMermans merged 4 commits into
mainfrom
recovery/full-verification-preview
Jul 28, 2026
Merged

RaulMermans merged 4 commits into
mainfrom
recovery/full-verification-preview

Conversation

@RaulMermans

Copy link
Copy Markdown
Owner

Reason for recovery

This repository had never had a successful dependency install: every prior sprint's "verification" was blocked by an isolated/no-network sandbox, and separately by a Node-version mismatch (corepack's cached pnpm@11.9.0 fails under Node 20.x — needs Node >=22, now pinned in .nvmrc). This PR restores a real, working dependency runtime on the GitHub-hosted clone and runs the full workspace verification ladder for the first time.

Confirmed roadmap drift

Sprints 11–14's canonical objectives (persisted search analytics + CTR dashboards, an external integration SDK/embeddable widget, a real Shopify connector, webhook-driven incremental sync) are confirmed not implemented. Only supplemental replacement work exists (packages/analytics's bare event schema, packages/catalog-configuration, packages/catalog-intake's controlled intake API). None of the four sprints is marked complete — see docs/ROADMAP_RECONCILIATION.md.

Compile/runtime defects fixed

  • Missing tsconfig.json in release-control and commercial-readiness (their typecheck/build scripts were checking zero files)
  • background-jobs: missing cancelled branch in outcome normalization + a reasonCode type-inference bug
  • release-control: TS2775 assertion-function typing
  • recovery: several noUncheckedIndexedAccess gaps, plus a test that mutated the wrong section because snapshots sort alphabetically by type, not insertion order
  • operations: non-deterministic JSON key order in createOperationalEvent
  • apps/web catalog-intake handler: an accidental extra () invoked the timed operation immediately (signal: undefined) instead of passing it to the timeout wrapper — a real runtime bug, not just a type error
  • A circularly-referencing SafeLogValue type and a logger that leaked an empty details: {} field
  • A demo-search corpus import pointing at a file that never existed (repointed to the existing, already-validated data/search/keyword-products.json)
  • Five scripts/smoke-*.ts files whose entrypoint guard compared process.argv[1] to the script path — a check vite-node never satisfies, so smoke:security/smoke:indexing-jobs/smoke:merchant-isolation/smoke:intake-api/smoke:deployment were silently no-op'ing and reporting a false pass every time they ran. Fixed via process.env.npm_lifecycle_event.
  • apps/web had a declared lint script but no ESLint installed at all; added eslint/eslint-config-next and fixed the two real <a>-vs-next/link violations it found

Configurations added

  • .nvmrc + package.json engines.node (Node >=22 requirement)
  • packages/release-control/tsconfig.json, packages/commercial-readiness/tsconfig.json
  • apps/web/.eslintrc.json
  • .github/workflows/ci.yml

Tests and builds run

  • pnpm lint / pnpm typecheck / pnpm test (339/339 passing) / pnpm build — all pass clean
  • 15 dependency-free drills pass (mock-catalog, performance, recovery, operations, security, indexing-jobs, release-control, commercial-readiness, catalog-config/intake validate+fixtures, readiness/normalization/indexing fixtures)
  • Full command-by-command evidence: docs/FULL_VERIFICATION_REPORT.md

CI status

.github/workflows/ci.yml added — install/lint/typecheck/test/build/drills, least-privilege contents: read, no secrets, no deployment, no continue-on-error. Every step was verified locally before being added to the workflow.

Unresolved gates

  • P-005 / P-006C / P-007D (live Typesense) — blocked, no Typesense server in this environment
  • P-011E (browser QA) — blocked, no accessible preview/local target was left running
  • pnpm eval:retrieval:* — a genuine, pre-existing gap (evaluation manifest/query-suite fixtures never existed); documented, not faked, excluded from CI

Preview status

Not yet created — requires linking a Vercel project, which needs separate authorization. Runbook prepared in docs/CI_AND_PREVIEW_RUNBOOK.md.

Browser QA status

Not rerun — blocked on an accessible target (see above).

Production readiness

Not proven. No live provider, no deployment, no customer-traction or production-readiness claim is made anywhere in this change.

🤖 Generated with Claude Code

RaulMermans and others added 4 commits July 28, 2026 19:50
Restore a real dependency runtime on the GitHub-hosted clone and fix
every defect that surfaced once the workspace could actually build,
lint, typecheck, test, and run its dependency-free drills for the
first time in this repository's history.

- Repair pnpm-lock.yaml drift (several packages existed on disk but
  were never captured in the lockfile) and root package.json's
  missing devDependencies on @searchsignal/operations and
  @searchsignal/background-jobs.
- Add missing tsconfig.json to release-control and
  commercial-readiness so their typecheck/build scripts actually
  inspect source.
- Fix real compile/runtime defects: a missing `cancelled` branch and
  a reasonCode type-inference bug in background-jobs; TS2775
  assertion typing in release-control; noUncheckedIndexedAccess and
  a readonly-array mutation bug in recovery's tests; non-deterministic
  JSON key order in operations' createOperationalEvent; an accidental
  extra `()` in apps/web's catalog-intake handler that invoked a timed
  operation immediately instead of passing it to the timeout wrapper;
  a circularly-referencing SafeLogValue type; a logger that leaked an
  empty details:{} field; a missing demo-search corpus/manifest file.
- Fix five scripts/smoke-*.ts entrypoint guards that compared
  process.argv[1] to the script path -- a check vite-node never
  satisfies, so smoke:security/indexing-jobs/merchant-isolation/
  intake-api/deployment were silently no-op'ing and reporting a false
  pass. Now driven by process.env.npm_lifecycle_event.
- Add eslint/eslint-config-next to apps/web (declared lint script had
  no linter installed) and fix the two real violations it found.
- Document the Node >=22 requirement in .nvmrc and package.json
  engines (corepack's cached pnpm@11.9.0 fails under Node 20.x).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Add .github/workflows/ci.yml: install, lint, typecheck, test, build,
and dependency-free drills on every push to main and every PR.
Least-privilege permissions (contents: read), no secrets, no
deployment step, no continue-on-error on required gates. Every step
was run locally in this session and passed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Add docs/ROADMAP_RECONCILIATION.md: Sprints 0-10 and 15-22 verified
  against real command output; Sprints 11-14's canonical objectives
  (persisted analytics, external SDK/widget, real Shopify connector,
  webhook sync) are confirmed not implemented and are not marked
  complete -- only supplemental replacement work exists for them.
- Correct the landing page's stale "SPRINT 0" / "Search is not
  implemented yet" copy and add /demo and /console navigation.
- Redirect the two stale placeholder routes (/search-lab -> /demo,
  /catalog-readiness -> /console) instead of leaving false
  "Scheduled for Sprint N" copy live; remove the now-dead pages.
- Update README.md, plan.md, SCRATCHPAD.md, and project-memory.json
  to remove stale "no dependency installation" / "zod unavailable" /
  "local launchers absent" claims that are no longer true, and add
  the missing T-024A/T-024B/R-001 task records to project memory.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Add the R-001 task record, the full command-by-command verification
report, the CI/Vercel-preview runbook (preview not yet created --
requires explicit authorization), and the recovery evidence report
covering git state, files changed, and security/privacy confirmations.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@RaulMermans
RaulMermans marked this pull request as ready for review July 28, 2026 18:24
@RaulMermans
RaulMermans merged commit eaac7b8 into main Jul 28, 2026
1 check passed
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.

1 participant