Repository navigation
Recovery: full verification, roadmap reconciliation, and preview enablement - #1
Merged
Merged
Conversation
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
marked this pull request as ready for review
July 28, 2026 18:24
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.
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.0fails 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 — seedocs/ROADMAP_RECONCILIATION.md.Compile/runtime defects fixed
tsconfig.jsoninrelease-controlandcommercial-readiness(their typecheck/build scripts were checking zero files)background-jobs: missingcancelledbranch in outcome normalization + areasonCodetype-inference bugrelease-control: TS2775 assertion-function typingrecovery: severalnoUncheckedIndexedAccessgaps, plus a test that mutated the wrong section because snapshots sort alphabetically by type, not insertion orderoperations: non-deterministic JSON key order increateOperationalEventapps/webcatalog-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 errorSafeLogValuetype and a logger that leaked an emptydetails: {}fielddata/search/keyword-products.json)scripts/smoke-*.tsfiles whose entrypoint guard comparedprocess.argv[1]to the script path — a checkvite-nodenever satisfies, sosmoke:security/smoke:indexing-jobs/smoke:merchant-isolation/smoke:intake-api/smoke:deploymentwere silently no-op'ing and reporting a false pass every time they ran. Fixed viaprocess.env.npm_lifecycle_event.apps/webhad a declaredlintscript but no ESLint installed at all; addedeslint/eslint-config-nextand fixed the two real<a>-vs-next/linkviolations it foundConfigurations added
.nvmrc+package.jsonengines.node(Node >=22 requirement)packages/release-control/tsconfig.json,packages/commercial-readiness/tsconfig.jsonapps/web/.eslintrc.json.github/workflows/ci.ymlTests and builds run
pnpm lint/pnpm typecheck/pnpm test(339/339 passing) /pnpm build— all pass cleandocs/FULL_VERIFICATION_REPORT.mdCI status
.github/workflows/ci.ymladded — install/lint/typecheck/test/build/drills, least-privilegecontents: read, no secrets, no deployment, nocontinue-on-error. Every step was verified locally before being added to the workflow.Unresolved gates
pnpm eval:retrieval:*— a genuine, pre-existing gap (evaluation manifest/query-suite fixtures never existed); documented, not faked, excluded from CIPreview 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