Skip to content

fix: #107 P3 follow-ups — cross-SDK consistency + version metadata (v1.12.1)#109

Merged
helloiamvu merged 2 commits into
mainfrom
fix/107-p3-followups
Jul 8, 2026
Merged

fix: #107 P3 follow-ups — cross-SDK consistency + version metadata (v1.12.1)#109
helloiamvu merged 2 commits into
mainfrom
fix/107-p3-followups

Conversation

@helloiamvu

Copy link
Copy Markdown
Member

What

Patch release resolving the deferred P3 findings from PR #108's two-reviewer loop (#107). No behavior change on any default path.

  • __version__ from dist metadata (all 3 Python packages; was stale 0.1.0rc1/0.0.1). Verified zero persistence blast radius: DataVersion.for_research is opt-in, never auto-wired into research(), not a cache key, no literal-token tests.
  • Canonical research(): source must be one of [...] error in both SDKs, exact-message-pinned both sides (researchBySource's "Mode 2..." text untouched).
  • TS sources: null = absent per the Phase 21 wire contract + regression test; dead mutual-exclusion checks deleted in both SDKs with written unreachability proofs (the TS one's only reachable firing was the wire-contract bug).
  • Wrapper-path pin provenance (wrap_result(source=...), mode2 parity, defense-in-depth) — unpinned path verified character-identical to HEAD.
  • TS barrel exports for the research-vocabulary symbols + surface test; contextlib consolidated; coverage gaps closed (as_dataframe=False, skip-guarded polars wrapper, empty-after-pin, barrel).
  • Weather bundle growth root-caused: hosted-shim root-barrel re-export (tree-shaking blocker, ~5 kB gz), NOT drift/VIIRS/codegen. Shrink deferred to its own PR — it contracts the root-barrel API (mintStreamToken is root-barrel-only today). Details on Follow-ups from #<pending> — research(source=) pin + mode2 window trim (P3 nits) #107.

TS Parity

Identical surface changes shipped in this PR (packages-ts/meta): same canonical error prefix, same nullish wire-contract semantics, barrel exports. No parity ticket needed.

Review loop

  • Codex (codex review --uncommitted, high): GATE PASS, 0 findings.
  • Architect (Opus): approve, no P1/P2 — independently verified the parity firewall (unpinned wrap_result char-identical to HEAD), both unreachability proofs (incl. the 3×3 TS presence matrix), and the __version__/DataVersion blast-radius analysis. Its single P3 (comment accuracy) fixed pre-commit.

Gates

  • Python fast suite: 4,495 tests, 0 failures, 0 errors (JUnit-verified) + parity fixtures green + ruff clean
  • TS: 163 tests, build, tsc --noEmit, biome (no new), size gate green (meta 38.67/40, weather 25.88/26 — unchanged)
  • Pre-push suite: green

Release

All 7 packages 1.12.0 → 1.12.1. Post-merge: tag v1.12.1 (PyPI) + vts-1.12.1 (npm).

Closes #107 (hosted-barrel shrink stays tracked there as a dedicated follow-up).

🤖 Generated with Claude Code

minereda and others added 2 commits July 8, 2026 15:52
…rsion metadata

- __version__ derived from dist metadata in all 3 Python packages
  (importlib.metadata; was stale 0.1.0rc1/0.0.1). DataVersion.for_research
  tokens now reflect the true SDK version (opt-in surface, no cache or
  settlement impact — verified not wired into research()).
- Canonical unknown-source error text on the research() surface in both
  SDKs: 'research(): source must be one of [...]', exact-message-pinned.
- TS sources: null follows the Phase 21 null-as-absent wire contract;
  removed the dead TS mutual-exclusion check (only reachable firing WAS
  the wire-contract bug) and the mirrored unreachable Python ValueError.
- Pin provenance threaded explicitly through wrap_result (mode2 parity,
  defense-in-depth); unpinned wrapper path byte-identical (verified vs HEAD).
- TS barrel re-exports RESEARCH_SOURCE_ALIASES / RESEARCH_OBSERVATION_SOURCES
  / isResearchObservationSource; contextlib consolidated to module level.
- Coverage: as_dataframe=False pin, polars wrapper (skip-guarded),
  empty-after-pin attrs, sources:null regression, barrel surface test.
- Weather bundle growth root-caused (hosted-shim root-barrel re-export);
  shrink deferred to its own PR (public-API contraction) — see #107.

Review: codex GATE PASS (0 findings) + architect approve (no P1/P2; the
single P3 comment nit fixed in this commit).

Closes #107 (remaining: hosted-barrel shrink tracked there).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

Docs-required check: PASS

API-surface change includes docs updates — no reminder needed.

API-surface files changed:

packages-ts/meta/src/index.ts
packages-ts/meta/src/mode2.ts
packages-ts/meta/src/research.ts
packages/core/src/mostlyright/__init__.py
packages/core/src/mostlyright/research.py
packages/markets/src/mostlyright/markets/__init__.py
packages/weather/src/mostlyright/weather/__init__.py

Docs files changed:

CHANGELOG.md

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

Parity ticket gate: PASSED

parity-ticket-check: PR touches BOTH Python and TypeScript trigger surfaces — paired-language change satisfies the gate.

See CROSS-SDK-SYNC.md §2 for the workflow.

@helloiamvu helloiamvu merged commit 1ce7aab into main Jul 8, 2026
22 checks 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.

Follow-ups from #<pending> — research(source=) pin + mode2 window trim (P3 nits)

2 participants