Skip to content

fix(release): green the publish gate set against porting-sdk main - #82

Open
anthmFS wants to merge 1 commit into
mainfrom
fix/publish-gates-green
Open

fix(release): green the publish gate set against porting-sdk main#82
anthmFS wants to merge 1 commit into
mainfrom
fix/publish-gates-green

Conversation

@anthmFS

@anthmFS anthmFS commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Pairs with porting-sdk#135 — merge that one first, then this goes green on its own.

Goal: make v3.3.0 publishable. Publishing is gated on the full run-ci, and
publish-release.yml checks porting-sdk out at a hard ref: main
deliberately, so a release can never ship from an unmerged wave branch (see
porting-sdk/COORDINATED_PASS.md). So the release path is judged against
porting-sdk main, not the wave6 branch test.yml is currently pinned to via
PORTING_SDK_REF.

GEN-FRESH

Reverts the generated files to what porting-sdk main's specs produce. My earlier
commit (#81) regenerated them against wave6's specs — that greened test.yml's
copy of the gate but broke the release copy. Only one of the two can be
satisfied while the pin is set
, and per COORDINATED_PASS.md the release path
is the one that must hold. --check is clean against porting-sdk main.

DOC-AUDIT

get_stats is a real method on SearchEngine, and signalwire.search. is
excluded from the oracle by design ("RAG / vector-search BACKEND (approved
py-only)"). Added to DOC_AUDIT_IGNORE.md under the existing Search-subsystem
section, which already names examples/local_search_agent.py.

router needed no change — it resolves as soon as the oracle knows ChatGateway
exists (porting-sdk#135).

DOC-SURFACE

Documented the public symbols the ai_chat commits added without docstrings:
GatewayRejection.__init__, ChatGateway.__init__ / close / check_key,
AIChatError.__init__, AIChatClient.__init__ / close, and the
ConversationInfo / ChatResponse / ChatLog dataclasses.

Real Args/Returns/Raises, including the things a caller actually needs to know:
check_key uses compare_digest so it can't be walked a character at a time;
ChatLog.messages contains the substituted system prompt and tool traffic and
must not be relayed to a browser verbatim; an omitted gateway secret is
per-process, so handles stop verifying across a restart or a second worker.

Verification

Against porting-sdk main (what publish uses), full run-ci.sh:

PASS — DRIFT, SEMVER-DIFF, GEN-FRESH, DOC-AUDIT, DOC-SURFACE, LINT, FMT,
NO-CHEAT, ROUTE-COLLISION, SPEC-PARITY, REST-COVERAGE, and ~25 more.

Local-only reds, which CI does not see:

  • TYPECHECK — 16 findings in mcp_gateway / search, all
    unused-ignore / truthy-function that depend on which optional extras are
    installed. CI's TYPECHECK reported 8 entirely different files, none of these;
    removing those # type: ignore comments locally would break CI.
  • TEST — the 6 mcp_gateway failures, verified pre-existing by stashing this
    branch and running them on unmodified main, where they fail identically.
    5940 tests pass.

After this merges

main goes green on the release path, then tag v3.3.0 (matching
pyproject.toml) and push with --tags. Note the existing local v3.0.3 tag
is wrong twice over: it disagrees with pyproject.toml (the publish workflow
hard-fails on that check) and it points at 20663a6, which predates all of
these fixes.

🤖 Generated with Claude Code

https://claude.ai/code/session_015dYktt85Ltj3oK9gG5VBww

Publishing is gated on the full run-ci, and publish-release.yml checks
porting-sdk out at a hard `ref: main` — deliberately, so a release can never
ship from an unmerged wave branch (porting-sdk/COORDINATED_PASS.md). So the
release path is judged against porting-sdk MAIN, not the wave6 branch that
test.yml is currently pinned to via PORTING_SDK_REF.

This makes that path green.

GEN-FRESH — revert the generated files to what porting-sdk MAIN's specs
produce. My earlier commit regenerated them against the wave6 specs, which
greened test.yml's copy of the gate but broke the release copy. Only one of the
two can be satisfied while the pin is set, and per COORDINATED_PASS.md the
release path is the one that must hold: publish never builds from a wave.
Verified: `--check` clean against porting-sdk main.

DOC-AUDIT — `get_stats` is a real method on SearchEngine
(signalwire/search/search_engine.py), and `signalwire.search.` is excluded from
the oracle by design ("RAG / vector-search BACKEND (approved py-only)"). Added
to DOC_AUDIT_IGNORE.md under the existing Search-subsystem section, which
already names examples/local_search_agent.py. `router` needed nothing — it
resolves once the oracle knows about ChatGateway.

DOC-SURFACE — documented the public symbols the ai_chat commits added without
docstrings: GatewayRejection.__init__, ChatGateway.__init__/close/check_key,
AIChatError.__init__, AIChatClient.__init__/close, and the ConversationInfo /
ChatResponse / ChatLog dataclasses. Real Args/Returns/Raises, including the
things worth knowing: check_key uses compare_digest so it cannot be walked a
character at a time, ChatLog.messages holds the system prompt and tool traffic
and must not be relayed to a browser, and an omitted gateway secret is
per-process so handles stop verifying across a restart.

Pairs with porting-sdk: the oracle regen (ChatGateway is new surface the
committed oracle predates) and a doc_surface.py fix.

Verified against porting-sdk main: DRIFT, SEMVER-DIFF, GEN-FRESH, DOC-AUDIT,
DOC-SURFACE, LINT, FMT, NO-CHEAT and ~30 other gates all PASS. The only local
reds are TYPECHECK and TEST, both environment-only: 16 mypy findings in
mcp_gateway/search that CI does not report (its 8 files are entirely different)
and the 6 mcp_gateway tests that fail identically on unmodified main. 5940
tests pass.
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