Expand description
The WebDev client seam (05-03) — the CLI’s own gateway-side
surface at /system/webdev/{project}/cli/{route} (NOT
/data/webdev/* — that prefix does not exist; 05-RESEARCH wire
protocol, live-proven on 8.3.3).
This module owns the seam’s PURE pieces so the trait impl in
super stays thin delegation (the per-capability-file
convention): the ONE path builder ([route_url]), the
presence/version discrimination enum (RouteProbe), the
shared 200-body envelope parser ([parse_route_body]) and its
taxonomy mapping ([denial_to_error]), and the deploy zip
builder (build_deploy_zip).
THE wire rules pinned here (05-RESEARCH, all live-proven):
- 405 = absent, NOT 404 — missing routes AND missing projects both answer 405 (Pitfall 1; doctor’s Phase-2 404 assumption was wrong and 05-03 re-pins it).
- 402 = module unlicensed — a trial-expired gateway’s WebDev servlet answers 402 with an HTML page (cross-verified 8.3.6).
- Denials ride HTTP 200 — WebDev IGNORES a
statuskey in route returns; every refusal is detectable only from the body envelope{ok, data|error}. The status code alone is NEVER a success verdict (Pitfall 2).
build_deploy_zip packs the embedded 05-01 bundle
(crate::webdev) into the project-zip the deploy action
uploads through the 03-02 import machinery — scriptExec ONLY with
a SUBSTITUTED secret (fail closed: the template’s placeholder
must never ship, the 05-01 structural guarantee enforced here at
the type level).
Enums§
- Route
Probe - The presence/version discrimination — the probe enum. The status
code IS the answer (deliberately NOT run through classify, the
super::GatewayApi::webdev_route_statusprecedent); only transport failures are errors.
Constants§
- DEFAULT_
PROJECT - The deploy project the CLI owns wholesale — born from the first
deploy zip, overwrite-replaced by every later deploy (05-RESEARCH
deploy guidance;
--projectoverrides it deliberately).
Functions§
- always_
on_ routes - The always-on route folders, in manifest order — DERIVED from
bundle::ROUTE_FILESso the deploy set, the status sweep, and the manifest itself can never drift apart. - build_
deploy_ zip - Pack the deploy zip: the embedded always-on bundle VERBATIM (the
project title substituted into
project.json’stitleONLY whenproject_titlediffers fromDEFAULT_PROJECT— the manifest already saysign-cli), plus — whenwith_script_exec— scriptExec’s three members with the secret SUBSTITUTED into the template’s__IGN_CLI_SECRET__marker (exactly-once replace; the 05-01 contract test pins the marker count).