Skip to content

Wave 2: wire §C1/§G/§D1 doc-exec, ledger, and packaging gates into run-ci.sh#29

Open
mjerris wants to merge 6 commits into
mainfrom
feat/wave2
Open

Wave 2: wire §C1/§G/§D1 doc-exec, ledger, and packaging gates into run-ci.sh#29
mjerris wants to merge 6 commits into
mainfrom
feat/wave2

Conversation

@mjerris

@mjerris mjerris commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Wave 2 — wire §C1 / §G / §D1 gates into cpp run-ci.sh

Wires the six Wave 2 gates into cpp's scripts/run-ci.sh, mirroring how
signalwire-python's run-ci wires them. All six pass at baseline for cpp — this
is pure gate-wiring, no source/API/doc changes were needed.

§ gate cpp result
C1 SNIPPET-COMPILE 521 documented cpp snippets syntax-check clean (43 no-compile suppressed)
C1 DOC-CLI 187 unique swaig-test invocations line-detected clean
C1 EXAMPLES-RUN 58 examples skip-with-note (compiled port, no CMake example-run target)
C1 SNIPPET-RUN self-skips (compiled port; SNIPPET-COMPILE covers it)
G SUPPRESSION-LEDGER no un-ledgered analyzer suppressions
D1 PACKAGE-SMOKE real cmake --install artifact builds, installs, and constructs RestClient from the installed headers/lib

cpp runs gates serially (no defer/wave tier), so all six are wired blocking.
The CI workflow (test.yml) invokes run-ci.sh directly, so the wiring flows
to CI with no separate declaration.

Full bash scripts/run-ci.sh passes end-to-end (CI PASS, exit 0).

🤖 Generated with Claude Code

mjerris and others added 6 commits July 9, 2026 00:45
Wire the six Wave 2 gates into cpp's run-ci.sh, mirroring how python's
run-ci wires them. All six pass at baseline for cpp:

  §C1  SNIPPET-COMPILE   521 documented cpp snippets syntax-check clean
       DOC-CLI           187 swaig-test invocations line-detected clean
       EXAMPLES-RUN      58 examples skip-with-note (no CMake example-run target)
       SNIPPET-RUN       self-skips (compiled port; SNIPPET-COMPILE covers it)
  §G   SUPPRESSION-LEDGER no un-ledgered analyzer suppressions
  §D1  PACKAGE-SMOKE     real cmake --install artifact builds, installs, and
                         constructs RestClient from the installed headers/lib

cpp runs gates serially (no defer tier), so all are wired blocking. The CI
workflow (test.yml) invokes run-ci.sh directly, so the wiring flows to CI with
no separate declaration.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SNIPPET-COMPILE / SNIPPET-RUN / EXAMPLES-RUN dominate run-ci wall time. Re-tag them
tier=nightly so per-PR run-ci skips them, while:
  - nightly.yml runs the FULL gate set (SW_CI_TIER=nightly) on a daily cron, with a
    skip-if-unchanged guard: a cache marker keyed on the (port, porting-sdk, python)
    SHA triple means a no-op nightly costs a cache probe, not the full run;
  - test.yml promotes a per-PR run to SW_CI_TIER=nightly when the diff touches
    docs/, examples/, or README/*.md — doc changes stay gated at PR time.

Requires porting-sdk#74 (tier=pr|nightly in gate_scheduler.sh) on porting-sdk main:
the old scheduler rejects the tier= arg. Merge #74 first.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqshDQajCmDHD3xPo4CXMC
…ag (python parity)

Parity with signalwire-python commit 883aa1d.

set_history (Step + Context):
- fluent set_history(mode) validating {keep, default, hide}, throwing
  std::invalid_argument on an invalid mode.
- stored as std::optional<std::string>; to_json emits "history" only when set.

gather isolated flag:
- GatherQuestion gains std::optional<bool> isolated (tri-state); to_json emits
  "isolated" when it has a value (explicit false IS on the wire), omits when unset.
- GatherInfo gains bool isolated=false (gather-level default); to_json emits
  "isolated": true only when truthy.
- Step::set_gather_info gains isolated=false (passed to the GatherInfo default).
- Step::add_gather_question gains std::optional<bool> isolated (per-question override).

Regenerated port_signatures.json + port_surface.json. Added tests covering each
history mode + invalid rejection, question tri-state (None omitted / True / False
emitted), gather-level default (False omitted / True emitted), and override
precedence. DRIFT + SURFACE-DIFF both exit 0; full test suite green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqshDQajCmDHD3xPo4CXMC
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