Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
2813ab3
wave6: retire dead ledger entries (logger idiom fold)
mjerris Jul 27, 2026
520af80
fix(enumerate_surface): fail loud instead of silently writing nothing
mjerris Jul 27, 2026
97f14d6
wave6: retire dead ctor entries (ALLOWLIST_DISCIPLINE §495, shared-di…
mjerris Jul 27, 2026
9d03ee4
Merge remote-tracking branch 'origin/fix/enumerator-output-failloud' …
mjerris Jul 27, 2026
c485c73
Merge remote-tracking branch 'origin/wave6/ledger-burndown' into HEAD
mjerris Jul 27, 2026
6e6f78a
wave6: expose the 7 derived caller-observable attrs (java)
mjerris Jul 27, 2026
659a878
test(spider): behavioural proof the removeXpaths strip loop is load-b…
mjerris Jul 27, 2026
1c6c80e
fix(test): mock readiness checked KEY PRESENCE, so an empty mock was …
mjerris Jul 27, 2026
6ea91fe
wave6: retire 23 laundered PORT_ADDITIONS; teach the signature enumer…
mjerris Jul 27, 2026
d5acd75
fix(security): SessionManager's default token expiry is 900s, not 3600s
mjerris Jul 28, 2026
47d4b74
fix(security): an INSECURE tool no longer gets an unauthenticated /sw…
mjerris Jul 28, 2026
ea7e0ba
fix(signatures): java states its optional params, closing all 105 req…
mjerris Jul 28, 2026
0ff9c88
fix(signatures): fold java's rename omissions at the enumerator; excu…
mjerris Jul 28, 2026
2cd7b90
chore(release): declare 3.0.0, pin the SemVer floor, consolidate the …
mjerris Jul 28, 2026
66292a3
docs: add .version-frozen — version and SemVer floor pinned at 3.0.0
mjerris Jul 28, 2026
dbb1064
fix(security): mint SWAIG tool tokens with PADDED urlsafe base64 + wi…
mjerris Jul 28, 2026
bd3d604
fix(auth): carry the bearer scheme, and match it case-insensitively p…
mjerris Jul 28, 2026
37d3929
chore(signatures): un-stale port_signatures.json; re-sync the 3.0.0 f…
mjerris Jul 28, 2026
c67ea3e
fix(signatures): enumerate the credential records; fold Java's identi…
mjerris Jul 28, 2026
7c1f612
fix(surface): emit record components + the ctors behind a public fact…
mjerris Jul 28, 2026
a92da59
chore(gate): re-baseline the TYPE-EROSION ratchet onto the corrected …
mjerris Jul 29, 2026
392ecec
fix(logging): put the control-char scrub ON the emission path, and ma…
mjerris Jul 29, 2026
474839e
fix(ledger): correct 25 inverted omission rationales, delete 1 false …
mjerris Jul 29, 2026
1c36457
fix(skills): datasphere_serverless sent its search payload on a key t…
mjerris Jul 29, 2026
63acebd
ci(gates): schedule TLS-VERIFY — defined, passing, never run
mjerris Jul 29, 2026
1d66987
docs(relay): Javadoc every public RelayEvent accessor
mjerris Jul 29, 2026
302ed48
docs(agent): Javadoc every public AgentBase declaration
mjerris Jul 29, 2026
3e2d488
docs(swml): Javadoc every public Service declaration
mjerris Jul 29, 2026
5ad6a6e
docs(swaig,relay): Javadoc Action, FunctionResult, SWAIGFunction
mjerris Jul 29, 2026
d2b099e
docs: Javadoc contexts, security, logging, and RELAY client/call/message
mjerris Jul 29, 2026
7abe8e7
docs: Javadoc the last 229 public declarations; DOC-SURFACE 100%, flo…
mjerris Jul 29, 2026
6ee3486
fix(relay): stop dropping late-registered Message completion callbacks
mjerris Jul 29, 2026
87d9222
ci(doc-surface): flip from report-only to BLOCKING and drop the fail-…
mjerris Jul 29, 2026
b18b3ac
fix(swml): validate post_prompt shape — the validator passed configs …
mjerris Jul 30, 2026
fe5eef9
feat(datamap)!: remove DataMap.body() — the builder wrote a key nothi…
mjerris Jul 30, 2026
194501e
fix(swml): play{text} is a schema-forbidden key — Java shipped it sil…
mjerris Jul 30, 2026
0fcae1d
fix(surface): register_routing_callback was excused by a FALSE ration…
mjerris Jul 30, 2026
4e281f1
fix(swml): route every verb emission through the validating add_verb …
mjerris Jul 30, 2026
e6ed8b4
fix(swml): keep the any-shape verb validator off the public surface
mjerris Jul 30, 2026
2f7246e
fix(tls): drop the line-keyed TLS-VERIFY allow entry — the gate now r…
mjerris Jul 30, 2026
4c3ebab
fix(surface): enable_debug_events was excused by a FALSE rationale — …
mjerris Jul 30, 2026
cb96156
docs: strip porting jargon from the SWAIG tool-registry public javadoc
mjerris Jul 30, 2026
cb060bd
fix(swaig): enforce a tool's `secure` flag on every dispatch transport
mjerris Jul 30, 2026
18a79e9
test(swaig): implement the pending serverless valid-token http fixture
mjerris Jul 30, 2026
1bed613
test(swml): pin the x-sdk-widen type invariant across every non-strin…
mjerris Jul 30, 2026
cd736f9
fix(surface): keep the SWAIG token core internal — it is not referenc…
mjerris Jul 30, 2026
b3341a8
ci: wire the SIGNATURES-FRESH gate
mjerris Jul 30, 2026
58b76d3
docs(gen): state the DTO contract without the internal framing
mjerris Jul 30, 2026
53fa0b6
fix(swaig-test): mint the tool token so a secure tool is reachable fr…
mjerris Jul 30, 2026
07acc23
docs: explain the SDK on its own terms, not the porting project's
mjerris Jul 30, 2026
b916bd5
build: lint and format the WHOLE tree, not just src/
mjerris Jul 30, 2026
bfa2773
build: re-enable JdkObsolete globally, suppress it at the one forced …
mjerris Jul 30, 2026
bad84ac
fix(scripts): narrow SignatureDump's blanket Throwable catches
mjerris Jul 30, 2026
b61b635
style: format the three example trees
mjerris Jul 30, 2026
9b48921
fix(examples): print REST results, not identity hashes — 12 sites
mjerris Jul 30, 2026
9090161
build(python): lint + format scripts/ with ruff at the reference's bar
mjerris Jul 30, 2026
f5d6824
docs: re-sync README include blocks with the reformatted fixtures
mjerris Jul 30, 2026
4da09cc
enumerate_signatures: make --strict the DEFAULT (it was dead code)
mjerris Jul 30, 2026
89a4393
fix(signatures): union across trailing-delegate overloads — 37 method…
mjerris Jul 30, 2026
be4b5a3
fix(signatures): fold the fluent Self-return idiom — 7 SWMLBuilder me…
mjerris Jul 30, 2026
f8aad88
ci: move the TYPE-EROSION ratchet 12 -> 14 — the overload union widen…
mjerris Jul 30, 2026
0b3362b
fix(enumerators): strip oracle-unrecorded mixin methods from SWMLServ…
mjerris Jul 30, 2026
6cda630
test(tls): pin the misconfigured-TLS quadrant with wire-level evidenc…
mjerris Jul 30, 2026
97b2e51
fix(enumerate_surface): strip base-only SkillBase hooks from skill su…
mjerris Jul 30, 2026
a8fd5b9
fix(enumerate_surface): emit record component accessors in the native…
mjerris Jul 30, 2026
46cfaa9
build: uncap javac warnings + turn DefaultPackage off with its contract
mjerris Jul 31, 2026
47c6edd
fix(sdk): drop the shadowed proxyUrlBase field + 28 missing @Override
mjerris Jul 31, 2026
6d7e8b4
fix(sdk): make split limits, loopback binds, and dead params explicit
mjerris Jul 31, 2026
6fe232f
test(logging): pin UTF-8 on both ends of the captured-stdout assertions
mjerris Jul 31, 2026
c1fb1ae
fix(examples): header comments, Locale.ROOT, explicit zone; ruff B007
mjerris Jul 31, 2026
38fb56f
docs: register ZoneId#systemDefault + re-sync the README quickstart i…
mjerris Jul 31, 2026
b3cdcda
regen(swaig): refresh the SWAIG payloads the spec re-vendors staled
mjerris Aug 4, 2026
8708454
fix(ci): make the TEST gate prove the suite EXECUTED, not just that g…
mjerris Aug 4, 2026
4b267d9
ci: pin ruff so local matches CI (the one unpinned tool in this repo)
mjerris Aug 4, 2026
7bcc3a7
gen(swaig): emit the SwaigAction/SwaigResponse envelope the generator…
mjerris Aug 5, 2026
1d6b2ac
gen(relay): read the combined spec through the shared adapter (R11)
mjerris Aug 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .doc_surface_floor
Original file line number Diff line number Diff line change
@@ -1 +1 @@
51.8
100.0
14 changes: 14 additions & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,20 @@ jobs:
pip install -e porting-sdk/test_harness/mock_relay
pip install -e porting-sdk/test_harness/mock_signalwire

# ruff is the Python half of the FMT and LINT gates (scripts/ enumerators +
# generators). scripts/_env.sh fails LOUD without it. Config: ./ruff.toml.
- name: Install ruff (Python half of FMT + LINT)
run: |
# PINNED EXACT: an unbounded `pip install ruff` resolves the newest release
# at CI time, so a ruff release that adds a rule or changes a format
# heuristic reds FMT/LINT on a commit that was green locally. Keep in
# lockstep with SW_RUFF_VERSION in scripts/_env.sh.
pip install "ruff==0.15.21"
# Assert the pin took — pip can satisfy a spec from an unexpected
# index or cache, so verify rather than assume.
ruff --version
ruff --version | grep -qw '0\.15\.21' || { echo "FATAL: ruff is not the pinned 0.15.21" >&2; exit 1; }

# The EMISSION gate needs `import signalwire` (the oracle). Install it from
# the adjacent checkout only if it isn't already importable — so a runner
# that already has it (or a future shared setup) isn't reinstalled.
Expand Down
14 changes: 14 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,20 @@ jobs:
pip install -e porting-sdk/test_harness/mock_relay
pip install -e porting-sdk/test_harness/mock_signalwire

# ruff is the Python half of the FMT and LINT gates (scripts/ enumerators +
# generators). scripts/_env.sh fails LOUD without it. Config: ./ruff.toml.
- name: Install ruff (Python half of FMT + LINT)
run: |
# PINNED EXACT: an unbounded `pip install ruff` resolves the newest release
# at CI time, so a ruff release that adds a rule or changes a format
# heuristic reds FMT/LINT on a commit that was green locally. Keep in
# lockstep with SW_RUFF_VERSION in scripts/_env.sh.
pip install "ruff==0.15.21"
# Assert the pin took — pip can satisfy a spec from an unexpected
# index or cache, so verify rather than assume.
ruff --version
ruff --version | grep -qw '0\.15\.21' || { echo "FATAL: ruff is not the pinned 0.15.21" >&2; exit 1; }

- name: Run CI gate script (full gate set)
working-directory: signalwire-java
env:
Expand Down
17 changes: 17 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,23 @@ jobs:
pip install -e porting-sdk/test_harness/mock_relay
pip install -e porting-sdk/test_harness/mock_signalwire

# ruff is the Python half of the FMT and LINT gates. scripts/ holds the
# hand-written enumerators + generators that feed SIGNATURES/SURFACE/DRIFT
# and emit the committed generated trees; they are linted + formatted at the
# same bar as the Java. scripts/_env.sh fails LOUD when ruff is missing, so
# this install is required, not an optional speedup. Config: ./ruff.toml.
- name: Install ruff (Python half of FMT + LINT)
run: |
# PINNED EXACT: an unbounded `pip install ruff` resolves the newest release
# at CI time, so a ruff release that adds a rule or changes a format
# heuristic reds FMT/LINT on a commit that was green locally. Keep in
# lockstep with SW_RUFF_VERSION in scripts/_env.sh.
pip install "ruff==0.15.21"
# Assert the pin took — pip can satisfy a spec from an unexpected
# index or cache, so verify rather than assume.
ruff --version
ruff --version | grep -qw '0\.15\.21' || { echo "FATAL: ruff is not the pinned 0.15.21" >&2; exit 1; }

# The EMISSION gate needs `import signalwire` (the oracle). Install it from
# the adjacent checkout only if it isn't already importable — so a runner
# that already has it (or a future shared setup) isn't reinstalled.
Expand Down
38 changes: 38 additions & 0 deletions .version-frozen
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# VERSION FREEZE — TEMPORARY. DELETE THIS FILE BEFORE RELEASING.
#
# Ruled by the owner 2026-07-28. This port declares version 3.0.0, and its SemVer
# release floor (port_signatures.baseline.json -> baseline_version) is pinned at
# 3.0.0 with the recorded surface payload overwritten to match today's surface.
#
# THIS FILE IS DOCUMENTATION ONLY (owner ruling, 2026-07-28). No gate reads it and
# nothing fails if it is present. It exists so that neither a person nor a future
# session has to re-derive why the versions look the way they do — and so nobody
# casually bumps one.
#
# WHY THE FREEZE: versions had drifted to 3.0.2 / 3.2.0 / 3.2.1 / 3.3.0 / 4.0.0
# across the fleet with NOTHING EVER PUBLISHED above v2.x. `git ls-remote --tags
# origin` tops out at v1.1.2 for rust/dotnet and v2.0.x for most others; php's
# v3.2.0 tag is local-only, zero remote matches. That scatter was never a release
# history, so collapsing it rewrote nothing real.
#
# WHILE THIS FILE EXISTS:
# - do NOT bump this port's version
# - do NOT re-anchor its release floor
# - DO land surface changes freely. The floor is a snapshot of the 3.0.0 wave,
# not of a published release, so SEMVER-DIFF will not flag anything already in
# today's surface. Anything added AFTER the freeze is still caught normally.
#
# BEFORE CUTTING A RELEASE:
# 1. DELETE this file in every port.
# 2. Re-anchor each port_signatures.baseline.json to the actual released
# commit/tag and regenerate its surface payload from that point.
# 3. Re-enable enforcement: ports invoke SEMVER-DIFF with --report-only today
# (the D5 "re-anchor at cut" setting). Dropping that flag turns semver
# enforcement back on.
#
# NOTE: perl is deliberately NOT floor-pinned. It is the only port anchored to a
# genuinely published tag (v2.0.2, sha 83376ff) and already passes at 3.0.0;
# overwriting it would destroy the fleet's only real release anchor.
#
# Owner rulings: porting-sdk tasks #143 (version) and #146 (floor).
# Full context: porting-sdk/SESSION_HANDOFF_2026-07-28.md
5 changes: 1 addition & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Changelog

## [4.0.0] - 2026-07-15
## [3.0.0]

- REST (BREAKING): `RestError` now carries the full request `url` (including the
query string) alongside the existing `path`, so a caller can see the exact
Expand Down Expand Up @@ -32,7 +32,6 @@
`maxActiveCalls(int)` builder option — inbound calls past the cap are logged and
dropped, matching the reference `Client(max_active_calls=...)`.

## [3.2.0] - 2026-07-14

- REST: added the `Messages` resource (`client.messages()`) — send and redact
messages over `/api/messaging/messages` (`create` → POST, `update` → PATCH
Expand All @@ -41,15 +40,13 @@
the shared mock. Distinct from the message logs namespace (`client.logs()`
`.messages()`).

## [3.1.0] - 2026-07-14

- REST: added the `Projects` resource (`client.projects()`) — full CRUD over
`/api/projects` (list/get/create/update/delete) plus `rotateSigningKey`, with
generated typed request/response shapes and wire tests covering each route
(success and error) against the shared mock. Distinct from the singular
`project` token namespace (`client.project()`).

## [3.0.2] - 2026-07-13

- REST: the client's resource surface is now fully generated from the shared
SignalWire OpenAPI specs, replacing the hand-written resource classes — every
Expand Down
1 change: 1 addition & 0 deletions DOC_AUDIT_IGNORE.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ java.lang#java: a package/literal reference in test scaffolding (not a method ca
### java.util / java.util.function

DateTimeFormatter#ofPattern: DateTimeFormatter.ofPattern (java.time) — example formatters
ZoneId#systemDefault: ZoneId.systemDefault (java.time) — the explicit zone the example clock tools pass to LocalTime/LocalDateTime.now()
Arrays#asList: Arrays.asList (JDK) — list construction in examples
Map#getOrDefault: Map#getOrDefault (JDK) — safe-get pattern in examples
Collections#emptyMap: Collections.emptyMap (JDK) — empty-map literal in examples
Expand Down
Loading
Loading