Skip to main content

Module webdev

Module webdev 

Source
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 status key 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§

RouteProbe
The presence/version discrimination — the probe enum. The status code IS the answer (deliberately NOT run through classify, the super::GatewayApi::webdev_route_status precedent); 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; --project overrides it deliberately).

Functions§

always_on_routes
The always-on route folders, in manifest order — DERIVED from bundle::ROUTE_FILES so 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’s title ONLY when project_title differs from DEFAULT_PROJECT — the manifest already says ign-cli), plus — when with_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).