chore(merge): sync develop with main after release v0.1.2 STABLE#41
Merged
chore(merge): sync develop with main after release v0.1.2 STABLE#41
Conversation
## Que cambia Cuts `v0.1.2-beta.3` consolidando los 4 fixes de Phase-11 que cierran los 4 bugs de dogfood reportados en Phase-9 (B-MCP-2/3/4/5). ## Por que `@netzi/recall@0.1.2-beta.0` (en npm beta channel) tenia 4 issues abiertos que rompian la promesa central del producto (semantic recall, mem.health diagnostics, decision content storage). Phase-11 los cerro todos via PRs squash-mergeados a `develop`. Esta release branch consolida los version bumps + release notes + HANDOFF update para promover beta.3 a `main` y publish a npm. ## Tipo de cambio - [x] chore — release (no code change beyond version bumps) ## Cambios incluidos (commits ya en develop, no parte de este PR) | Issue | Tag | PR | Commit en develop | |---|---|---|---| | [#2](#2) | B-MCP-3 critical | [#17](#17) | `229e7cd` | | [#1](#1) | B-MCP-2 high | [#18](#18) | `05b6731` | | [#4](#4) | B-MCP-5 low | [#19](#19) | `c4a2d1d` | | [#3](#3) | B-MCP-4 critical (data loss) | [#20](#20) | `52fbfd9` | ## Cambios de este PR - `code/package.json`: `0.1.2-beta.0` → `0.1.2-beta.3` - `code/src/bootstrap/composition-root.ts`: default `serverInfo.version` actualizado - `code/sonar-project.properties`: `projectVersion` actualizado - `docs/RELEASE-NOTES-v0.1.2-beta.3.md`: NUEVO, documentando los 4 fixes + migration safety + engineering metrics + outstanding caveats + path a v0.1.2 stable - `HANDOFF.md`: §0 actualizado al estado post-Phase-11; §6.16 nueva con la cronologia completa, 10 decisiones del orquestador (D-1101..D-1110), y 6 hallazgos durables ## Checklist - [x] `npm run typecheck` EXIT=0 - [x] `npm run lint` y `npm run lint:tests` EXIT=0 - [x] `npm run validate:modules` EXIT=0 - [x] `npm run build` EXIT=0 - [x] `npm run test` EXIT=0 — 2519 tests passing en 208 archivos - [x] Cero `any`, cero `as any`, cero `// @ts-ignore` - [x] HANDOFF.md actualizado (§0 + §6.16 nueva) - [x] Release notes consolidadas en `docs/RELEASE-NOTES-v0.1.2-beta.3.md` ## E2E que validan VALORES - [x] N/A — release branch sin cambios de codigo nuevos. Los 3 archivos test value-validation (L/M/N) ya estan en develop via PRs #17/#18/#20. ## Plan post-merge ```bash git checkout main && git pull git tag -a v0.1.2-beta.3 -m "v0.1.2-beta.3" git push origin v0.1.2-beta.3 gh release create v0.1.2-beta.3 --prerelease --notes-file docs/RELEASE-NOTES-v0.1.2-beta.3.md # Usuario ejecuta el publish: cd code && npm publish --tag beta --auth-type=web # Merge-back develop: git checkout develop && git merge --no-ff main && git push origin develop # Dogfood real: npm install -g @netzi/recall@beta && recall mcp serve # o el comando equivalente ``` Si el dogfood post-publish surface nuevos defectos → cortar `beta.4`. Si pasa limpio → cortar `release/0.1.2` (stable) + promover `latest` desde 0.1.1 → 0.1.2 + hard-deprecate 0.1.1. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
#23) ## Que cambia Hotfix que actualiza los docs publicos (README.md raiz, code/README.md shipped en npm tarball, SECURITY.md, CONTRIBUTING.md) para reflejar que los 4 bugs B-MCP-2..5 quedaron cerrados en \`v0.1.2-beta.3\`. ## Por que PR #21 cerro el release v0.1.2-beta.3 pero solo actualizo: - bumps de version (package.json, composition-root, sonar) - HANDOFF.md (§0 + §6.16) - docs/RELEASE-NOTES-v0.1.2-beta.3.md (nuevo) **Olvidamos los public-facing docs**. Cuando el usuario tomo el codigo a publish, el README.md root y el code/README.md (shipped en npm tarball como package README) seguian diciendo: - "trabajo activo en 0.1.2-beta.x" - "4 issues abiertos hoy (B-MCP-2..5)" - "npm install -g @netzi/recall" (defaults a latest=0.1.1 deprecada) Sin este hotfix, la pagina del paquete en npmjs.com mostraria informacion incorrecta sobre el estado del producto justo despues del publish. ## Tipo de cambio - [x] docs — solo documentacion publica - [x] hotfix — fix sobre main (perdimos esto en el release; sin esto el npm publish sale con package.json correcto pero README stale) ## Updates - **README.md** (root): banner refleja "v0.1.2-beta.3 cierra los 4 bugs"; quick start nota canal beta; "Issues" reads "0 issues abiertos al cierre de Phase-11 (cerrados via PRs #17/#18/#19/#20)". - **code/README.md** (shipped en npm tarball como package README): install command recomienda `@beta` con nota sobre por que; CTA apunta a beta.3 en vez de latest=0.1.1 deprecada. - **SECURITY.md**: tabla de versiones soportadas incluye `0.1.2-beta.3` (active), marca `0.1.2-beta.0` como superseded, nota que latest=0.1.1 sigue deprecada hasta que 0.1.2 stable promote. - **CONTRIBUTING.md**: "Issues y bugs" reads "0 issues abiertos al cierre de Phase-11" con pointers a §6.16 + release notes. ## Artefactos historicos intencionalmente sin tocar - `docs/RELEASE-NOTES-v0.1.2-beta.0.md` — snapshot de un release anterior; release notes son inmutables por convencion. - `CONTRIBUTING.md` line 139 commit-format example mencionando beta.0 — illustrative, no truth claim. ## Checklist - [x] `npm run typecheck` EXIT=0 - [x] `npm run lint` y `npm run lint:tests` EXIT=0 - [x] `npm run validate:modules` EXIT=0 - [x] `npm run build` EXIT=0 - [x] `npm run test` EXIT=0 (no source files touched, suite previa sigue valida) - [ ] N/A — wire/protocolo MCP no cambia - [ ] N/A — no introduce ADR ## Plan post-merge Per CONTRIBUTING.md hotfix flow: tras merge a main, hacer merge-back a develop (PR separado). Adicionalmente, **actualizar el tag v0.1.2-beta.3** para que apunte al commit con los doc fixes incluidos antes del npm publish: \`\`\`bash git checkout main && git pull git tag -d v0.1.2-beta.3 git push origin :refs/tags/v0.1.2-beta.3 git tag -a v0.1.2-beta.3 -m "v0.1.2-beta.3" git push origin v0.1.2-beta.3 gh release edit v0.1.2-beta.3 --target main # apunta el release al nuevo SHA cd code && npm publish --tag beta --auth-type=web \`\`\` (El tag v0.1.2-beta.3 actualmente apunta a \`a826ef0\`, sin los doc fixes. Re-tagging es seguro porque el GitHub release de beta.3 aun no tiene downloads y npm publish todavia no se completo.) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
## Summary Cuts `v0.1.2-beta.4` from develop (`0c18625`). This release closes [B-MCP-7](#24) — the embedding worker now tolerates the fastembed cold-start without burning per-item retry budget — on top of the four Phase-9 dogfood defects already shipped in `v0.1.2-beta.3`. ## What's in this release - **PR [#27](#27 — B-MCP-7 fix (typed error union `EmbedderUnavailableError` vs `EmbedFailedError`, worker exponential back-off, new `recall reset-queue` CLI command for recovery on workspaces poisoned by the pre-fix worker). - **PR [#26](#26 — Workflow Claude pre-commit hooks (`.claude/settings.json` + 3 scripts in `.claude/hooks/`). - **PR [#28](#28 — HANDOFF Phase-13 closing doc. Plus this release branch: - `code/package.json` + `code/sonar-project.properties` bumped to `0.1.2-beta.4`. - `docs/RELEASE-NOTES-v0.1.2-beta.4.md` (new file). - README.md banner + code/README.md install command updated. - SECURITY.md supported-versions table updated (beta.4 active, beta.3 superseded). ## Engineering metrics - 5+1/5+1 EXIT=0 locally (`typecheck`, `lint`, `lint:tests`, `validate:modules`, tests **2553/2553**, build). - SonarQube quality gate `MCP Memoria Strict` PASSED on PR #27 final push (Reliability A, Security A, Maintainability A, 0 bugs / 0 vulns / 0 blockers / 0 critical, **coverage on new code 99.8%**, overall 96.4%). - 0 issues GitHub abiertos antes de este release. ## Recovery instructions for users on `<= v0.1.2-beta.3` If your workspace has `embedding_queue` rows stuck at `attempts=5`: ```bash recall reset-queue --workspace /path/to/your/repo # Cola de embeddings restablecida. # Filas restablecidas: <N> # Umbral aplicado (attempts >=): 5 # El worker re-intentara estas entradas en su proximo drain. ``` Then start `recall-server` normally — the worker will drain the queue. ## Test plan - [x] CI ya green via PR #27 con typed-error union + extract-method refactor. - [x] All 5+1 quality gates EXIT=0 locally on this release branch. - [ ] CI corre el quality gate aqui también (espera tras push). - [ ] Tras merge: tag `v0.1.2-beta.4` + GitHub pre-release + `npm publish --tag beta`. - [ ] Post-publish smoke contra DB del dogfood (con `recall reset-queue` primero) validando worker drena cola + semantic recall recovers con queries paraphrased. ## Path to v0.1.2 stable If the smoke against the dogfood shows the worker draining the queue and semantic recall recovering, we promote `0.1.2` to `latest` dist-tag and hard-deprecate `0.1.1`. Otherwise, new bugs go into individual issues + PRs and ship as `v0.1.2-beta.5+`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…>0) (#34) ## Summary Cuts `v0.1.2-beta.5` from `develop` after [PR #33](#33) closed [B-MCP-8](#31): `mem.recall` returned `total_candidates>0` but `hits=0` whenever the top-ranked candidate alone exceeded `max_tokens`. The dogfood DB tripped this because learning rows store the full content un-truncated and the hybrid scorer (now active end-to-end thanks to B-MCP-7) ranks long learnings highly. This release ships **only the B-MCP-8 fix + version/docs sync**. No new features. | Item | Value | |---|---| | Issues closed | [#31 B-MCP-8](#31) (medium) | | PRs merged into develop since beta.4 | [#33](#33) | | Tests | **2557 passing** in 211 files (+4 vs 2553 at beta.4) | | Coverage on new code | 100% (PR #33) | | Coverage overall | 96.4% | ## Highlights of the fix (PR #33) 1. **`RecallMemoryUseCase.rankAndSlice` always includes the top-ranked hit** — even if it solo exceeds `max_tokens`. Returning zero hits when there ARE candidates surprises callers and degrades the semantic-recall promise; one slightly-oversized result is strictly more useful than no result. 2. **`continue` (not `break`) on overflow** for subsequent hits — a mid-loop oversized candidate doesn't suppress smaller hits behind it in the ranking. 3. **`RecallMemoryFacadeAdapter.DEFAULT_MAX_TOKENS` bumped 4000 → 8000** for consistency with `GetContextFacadeAdapter`. ## Tests (VALUES not SHAPE — Phase-9 rule) The pre-existing unit test ("trims the tail when cumulative token cost would exceed maxTokens") used `expect(getEntries().length).toBeLessThanOrEqual(1)` — that loose assertion silently passed even at length=0, exactly the bug. Now `toBe(1)` plus an exact id assertion. - 2 pre-existing assertions tightened from `toBeLessThanOrEqual(N)` → `toBe(N)`. - 2 new unit tests in `recall-memory.use-case.test.ts` (top-hit always returned; mid-ranking overflow uses continue). - 2 new integration tests in `D-mem-recall.test.ts` (B-MCP-8 dogfood reproducer + new 8000-token default). ## Files in this release branch | Capa | Archivos | |---|---| | Code (already in develop via PR #33) | `code/src/modules/retrieval/application/use-cases/recall-memory.use-case.ts`; `code/src/composition/facades/mcp-server-facades.ts`; 2 test files | | Release tooling (this PR) | `code/package.json` + `code/sonar-project.properties` (bump 0.1.2-beta.4 → 0.1.2-beta.5) | | Release notes (this PR) | `docs/RELEASE-NOTES-v0.1.2-beta.5.md` (NEW) | | Public docs (this PR) | `README.md`, `code/README.md`, `SECURITY.md` (banner / install / version table) | | HANDOFF (this PR) | `HANDOFF.md` (§0 + new §6.20 Phase-15 + footer) | ## Validation | Check | Result | |---|---| | `npm run typecheck` | EXIT=0 | | `npm run lint` (max-warnings 0) | EXIT=0 | | `npm run lint:tests` (max-warnings 0) | EXIT=0 | | `npm run validate:modules` | PASS — no module violations | | `npm run build` (tsup) | EXIT=0 | | `npm test` | **2557 passing** in 211 files | | SonarQube quality gate | already PASSED on PR #33 (coverage new 100%, ratings A) | ## Test plan - [x] 5+1 EXIT=0 over the release branch. - [x] PR #33 merged into develop with CI green + SonarQube quality gate PASSED. - [ ] CI green on this PR. - [ ] Squash-merge to main. - [ ] Tag `v0.1.2-beta.5` annotated to merge commit + push (with `git switch --detach v0.1.2-beta.5` because of the protected-branch hook). - [ ] `gh release create v0.1.2-beta.5 --prerelease --notes-file docs/RELEASE-NOTES-v0.1.2-beta.5.md --target main`. - [ ] `cd code && npm publish --tag beta --auth-type=web` (WebAuthn passkey). - [ ] Smoke against the dogfood DB: `mem.recall` with paraphrased queries should return `hits.length >= 1` even when the top-ranked hit is a long learning. - [ ] Merge-back develop ← main via `chore/sync-develop-after-beta-5`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…38) ## Summary Cuts `v0.1.2-beta.6` from `develop` after [PR #37](#37) closed the cosmetic carryover where `serverInfo.version` in the JSON-RPC handshake reported `0.1.2-beta.3` even after the binary itself bumped to beta.4 / beta.5. Behavior-preserving — no tool path changes. **Last release planned before promoting `0.1.2` stable.** Soak 24-48h post-publish before cutting `release/0.1.2`. | Item | Value | |---|---| | PRs merged into develop since beta.5 | [#37](#37) (carryover fix) | | Tests | **2560 passing** in 212 files (+3 vs 2557 at beta.5) | | Coverage SonarQube | overall 96.4%, ratings A/A/A | | Issues closed | Carryover cosmético `serverInfo.version` (HANDOFF §0 + §6.20 #1) | ## Highlights of the fix (PR #37) 1. **`resolvePackageVersion()` reads from `package.json` at boot** — eliminates the disciplinary requirement to update two files on every release. Resolution mirrors the `resolveDefaultMigrationsDir()` pattern (B-CLI-5): argv[1] with realpath + import.meta.url anchors. 2. **`name === "@netzi/recall"` validation** — without this, the unit test caught the resolver returning vitest's own `1.1.1` (anchored on the vitest binary's argv[1]). 3. **`0.0.0-unknown` sentinel fallback** — bootstrap never blocks on missing package metadata; the obviously-fake string surfaces on the handshake so any client can flag a broken install. 4. **Sonar refactor (round 2)**: extracted `collectFsCandidates(builder)` + `readPackageVersionField(candidate)` to kill S3776 (cognitive complexity) + S4144 (duplicate inline `pushCandidate` helper across the migrations and version resolvers). 5. **Tests VALUES not SHAPE** (Phase-9 rule applied retroactively): tightened `expect(typeof === "string")` → `expect().toBe(readPackageJsonVersion())` in E2E. New 3-test unit suite for the helper. E2E harness now copies `code/package.json` to the staging tree. ## Files in this release branch | Capa | Archivos | |---|---| | Code (already in develop via PR #37) | `code/src/bootstrap/composition-root.ts`; `code/tests/unit/bootstrap/composition-root.test.ts` (NEW); `code/tests/e2e/B-mcp-server-binary.test.ts`; `code/tests/e2e/_helpers/binary-harness.ts` | | Release tooling (this PR) | `code/package.json` + `code/sonar-project.properties` (bump 0.1.2-beta.5 → 0.1.2-beta.6) | | Release notes (this PR) | `docs/RELEASE-NOTES-v0.1.2-beta.6.md` (NEW) | | Public docs (this PR) | `README.md`, `code/README.md`, `SECURITY.md` (banner / install / version table) | | HANDOFF (this PR) | `HANDOFF.md` (§0 rows + footer) | ## Validation | Check | Result | |---|---| | `npm run typecheck` | EXIT=0 | | `npm run lint` (max-warnings 0) | EXIT=0 | | `npm run lint:tests` (max-warnings 0) | EXIT=0 | | `npm run validate:modules` | PASS — no module violations | | `npm run build` (tsup) | EXIT=0 | | `npm test` | **2560 passing** in 212 files | ## Test plan - [x] 5+1 EXIT=0 over the release branch. - [x] PR #37 merged into develop with CI green + SonarQube quality gate PASSED (round 2 after refactor). - [ ] CI green on this PR. - [ ] Squash-merge to main. - [ ] Tag `v0.1.2-beta.6` annotated to merge commit + push (with `git switch --detach v0.1.2-beta.6` because of the protected-branch hook). - [ ] `gh release create v0.1.2-beta.6 --prerelease --notes-file docs/RELEASE-NOTES-v0.1.2-beta.6.md --target main`. - [ ] `cd code && npm publish --tag beta --auth-type=web` (WebAuthn passkey). - [ ] Smoke against the dogfood DB: `mem.health` and other tools keep working; the handshake `initialize.serverInfo.version` now reports `"0.1.2-beta.6"` (was `"0.1.2-beta.3"` in beta.4 + beta.5 due to the carryover). - [ ] Merge-back develop ← main via `chore/sync-develop-after-beta-6`. - [ ] Soak 24-48h in real use, then cut `release/0.1.2` stable. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
## Summary **First stable release of `@netzi/recall`.** Channel promotion from `0.1.2-beta.6` (commit `f3aca46`) to the `latest` dist-tag. **No code changes** — same binary bit-for-bit modulo the version string. Decision: skip the soak 24-48h post-beta.6 (justified by fresh smoke 10/10 PASS + 0 issues + cycle of 7 betas that already closed 8 bugs vinculated to real use). The cycle's bug discovery rate has been "1 bug per beta surfaced by dogfood" — staying on beta.6 longer would not surface new information. | Item | Value | |---|---| | Tag | `v0.1.2` (no suffix) | | Channel | `latest` (was `beta` for the entire `0.1.2-beta.*` cycle) | | Tests | **2560 passing** in 212 files (no change vs beta.6) | | Coverage SonarQube | overall 96.4%, ratings A/A/A | | Issues at release | **0** open | ## What 0.1.2 stable consolidates The `0.1.2-beta.*` cycle ran from 2026-04-28 (beta.0) to 2026-05-03 (beta.6). Each release surfaced exactly one bug from real-world dogfood that the previous release exposed: | Beta | Date | Bugs closed | PR | |---|---|---|---| | `0.1.2-beta.0` | 2026-04-28 | preventive cut after Phase-9 dogfood discovery | n/a | | `0.1.2-beta.3` | 2026-05-01 | **B-MCP-2** + **B-MCP-3** + **B-MCP-4** + **B-MCP-5** | [#17](#17), [#18](#18), [#19](#19), [#20](#20) | | `0.1.2-beta.4` | 2026-05-02 | **B-MCP-7** | [#27](#27) | | `0.1.2-beta.5` | 2026-05-02 | **B-MCP-8** | [#33](#33) | | `0.1.2-beta.6` | 2026-05-03 | **carryover** `serverInfo.version` | [#37](#37) | | **`0.1.2` (this)** | 2026-05-03 | channel promotion + npm deprecation of 0.1.0/0.1.1 | this PR | Plus B-MCP-1 closed in v0.1.1 (Phase-8 same-day patch). Total: 8 bugs closed end-to-end via dogfood + smoke loop. ## Files in this release branch | Capa | Archivos | |---|---| | Code | (cero cambios — channel promotion sin cambios de logica) | | Release tooling | `code/package.json` + `code/sonar-project.properties` (bump 0.1.2-beta.6 → 0.1.2) | | Release notes | `docs/RELEASE-NOTES-v0.1.2.md` (NEW, ~250 LOC consolidating the full cycle + migration guide) | | Public docs | `README.md`, `code/README.md`, `SECURITY.md` (banner "stable", install command without @beta, version table updated) | | HANDOFF | `HANDOFF.md` (§0 + new §6.21 Phase-16 + footer) | ## Validation | Check | Result | |---|---| | `npm run typecheck` | EXIT=0 | | `npm run lint` (max-warnings 0) | EXIT=0 | | `npm run lint:tests` (max-warnings 0) | EXIT=0 | | `npm run validate:modules` | PASS — no module violations | | `npm run build` (tsup) | EXIT=0 | | `npm test` | **2560 passing** in 212 files | ## Test plan - [x] 5+1 EXIT=0 over the release branch. - [x] PR #38 (release v0.1.2-beta.6) merged to main. - [x] Fresh smoke 10/10 PASS against npx-installed beta.6 in fresh workspace (this is the same binary). - [ ] CI green on this PR. - [ ] Squash-merge to main. - [ ] Tag `v0.1.2` annotated to merge commit + push (`git switch --detach v0.1.2` because of protected-branch hook). - [ ] `gh release create v0.1.2 --target main --notes-file docs/RELEASE-NOTES-v0.1.2.md` — **NO `--prerelease`**. - [ ] `cd code && npm publish --auth-type=web` — **NO `--tag beta`** → publishes directly to `latest`. - [ ] `npm deprecate @netzi/recall@0.1.0 "deprecated due to bugs B-MCP-1..8 (closed in 0.1.2). Use @netzi/recall@latest"`. - [ ] `npm deprecate @netzi/recall@0.1.1 "deprecated due to bugs B-MCP-2..8 (closed in 0.1.2). Use @netzi/recall@latest"`. - [ ] `npm view @netzi/recall dist-tags` should return `{ latest: '0.1.2', beta: '0.1.2-beta.6' }`. - [ ] `npx --yes @netzi/recall@latest --help` should execute 0.1.2 (not 0.1.1). - [ ] Merge-back develop ← main via `chore/sync-develop-after-0.1.2`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ter-0.1.2 # Conflicts: # HANDOFF.md # README.md # SECURITY.md # code/README.md # code/package.json # code/sonar-project.properties
4 tasks
h2devx
added a commit
that referenced
this pull request
May 3, 2026
…smoke 10/10 PASS (#42) ## Summary Standard phase-close docs PR (pattern: [#25](#25), [#28](#28), [#32](#32), [#36](#36)). Updates HANDOFF.md §0 + §6.21 + 3 new lecciones durables + footer to reflect Phase-16 fully closed end-to-end. ## What Phase-16 delivered (all already shipped) - [PR #40](#40) — release v0.1.2 STABLE to main with conflict resolution (--ours). - Tag `v0.1.2` → `29371f8` + GitHub release stable (NO prerelease). - `npm publish` (user, WebAuthn passkey, NO `--tag beta` → published to `latest`). - `npm deprecate` 0.1.0 + 0.1.1 with messages pointing at `@latest`. - Smoke fresh stable: **10/10 PASS** against `npx --yes @netzi/recall@latest` in clean workspace `/tmp/recall-stable-smoke`. `serverInfo.version === "0.1.2"` confirmed (no `-beta` suffix). - [PR #41](#41) — merge-back develop ← main with conflict resolution (--theirs). Develop and main converged. ## What this PR adds Only HANDOFF.md changes (30 insertions, 23 deletions): - §0: 8 rows updated to reflect post-publish + post-merge-back reality (Fecha, Fase actual, Paquete npm, Estado del release, Memoria propia, Issues, Próximo paso, etc.). - §6.21: sub-fases 9-15 marked complete with concrete outcomes (squash-merge SHAs, smoke results, dist-tags, deprecate final messages); estado del repo post-Phase-16 with actual SHAs and dist-tags. - 3 new lecciones durables: (5) `npm view dist-tags` cache local sin honor TTL — usar `--prefer-online`; (6) `npm deprecate` con target hardcoded a una version envejece mal — siempre apuntar a `@latest`; (7) "1 bug por beta" del cycle 0.1.2-beta.* es patrón observado, no garantía para 0.1.3-beta.* futuros. - Footer "Ultima actualizacion" updated to reflect end-to-end closure. ## npm registry state confirmed ``` $ npm view @netzi/recall dist-tags { latest: '0.1.2', beta: '0.1.2-beta.6' } $ npm view @netzi/recall@0.1.0 deprecated Critical bug B-MCP-1 (Phase-7) — all MCP tools fail with real clients. Use @netzi/recall@latest... $ npm view @netzi/recall@0.1.1 deprecated Bugs B-MCP-2..8 surfaced via dogfood — closed in 0.1.2. Use @netzi/recall@latest... ``` ## Test plan - [x] No code changes — pure docs PR (HANDOFF.md only). - [x] Hooks pre-commit no-op (no `code/src/` changes → typecheck not triggered). - [ ] CI green on this PR (typecheck + lint + lint:tests + validate:modules + build + test:coverage + Sonar all pass over unchanged source). - [ ] Squash-merge to develop. After this merges, the cycle `0.1.2-beta.*` + `0.1.2` stable + Phase-16 follow-up docs is fully closed end-to-end. Next session inherits an accurate HANDOFF reflecting the published state. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <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.
Summary
Final merge-back PR of the
0.1.2-beta.*cycle. After PR #40 (release v0.1.2 STABLE) shipped to main, develop needs to receive the version bumps + release notes + READMEs/SECURITY/HANDOFF reflecting "stable channel" so future feature branches start from a consistent base.This closes the GitFlow asymmetry that always appears between a release and its merge-back: develop was on
0.1.2-beta.6package.json + "beta" READMEs; main is on0.1.2stable + "stable" READMEs.Conflicts resolved
Same pattern as every previous release merge-back (Phase-12 PR #22, Phase-14 PR #30, Phase-15 PR #35, Phase-15-followup PR #39). All resolved with
--theirs(main = canonical post-release version):code/package.json(version 0.1.2-beta.6 → 0.1.2)code/sonar-project.properties(version bump)README.md(banner "stable" instead of "beta", install command without@beta, npm badge updated)code/README.md(install command without@beta)SECURITY.md(table reflects 0.1.2 as the only supported, betas + 0.1.0/0.1.1 hard-deprecated)HANDOFF.md(§0 + new §6.21 Phase-16 + footer)The new file
docs/RELEASE-NOTES-v0.1.2.mdcame in cleanly from main.Smoke validation (already done)
Post-publish smoke against fresh-installed
@netzi/recall@latest(= 0.1.2) in clean workspace/tmp/recall-stable-smoke:serverInfo.version === "0.1.2"(stable, no -beta suffix)SUMMARY: 10 PASS / 0 FAIL. Stable release validated end-to-end.
npm state confirmed
Plus
0.1.0+0.1.1re-deprecated with messages pointing at@netzi/recall@latest(now 0.1.2).Validation
npm run typechecknpm run lint(max-warnings 0)npm testTest plan
After this merges, the cycle
0.1.2-beta.*+0.1.2stable is fully closed end-to-end. Develop and main converge.🤖 Generated with Claude Code