33This page owns the detailed public semantics of the current command surface. Run ` firstdraft --help ` or a command
44group's ` --help ` for concise executable syntax. See [ Errors and recovery] ( errors.md ) before retrying a failed mutation.
55
6- The current ` 0.1 .x ` line contains the auditable command shell, local Foundation Plan initialization, local
6+ The current ` 0.2 .x ` source line contains the auditable command shell, local Foundation Plan initialization, local
77application-key and UUID generation, conditional whole-document push, whole-graph analysis status polling,
8- compile-and-publish orchestration, and read-only retained-Compilation download. The current ` 0.1.0 ` CLI requires the
9- service's ` 0.2 .x ` API contract. See the [ release policy] ( ../RELEASING.md ) for versioning and channel semantics and
8+ compile-and-publish orchestration, and read-only retained-Compilation download. CLI ` 0.2.x ` requires the service's
9+ ` 0.3 .x ` API contract. See the [ release policy] ( ../RELEASING.md ) for versioning and channel semantics and
1010[ release history] ( release-history.md ) for the transition from prereleases.
1111
1212## Command map
@@ -116,11 +116,19 @@ or `superseded`. Every validated analysis status is a successful read with exit
116116` analysis.status ` value and inspect ` analysis.diagnostics ` rather than treating a completed analysis with issues as
117117a transport failure.
118118
119+ The projection includes the exact Head digest, Analyzer and Compiler releases, selected target, and
120+ ` analysis.gap_set ` plus ` analysis.gap_set_sha256 ` . A ` valid ` run always returns the complete parsed canonical
121+ ` firstdraft.foundation-gaps/2 ` object, including every ordered gap record and an empty ` gaps ` array when nothing is
122+ missing. Both GapSet fields are ` null ` for every other status. The CLI validates the GapSet's Head, Project,
123+ generation, releases, target, canonical digest, and complete record shapes, then prints the records without
124+ truncating or rewriting them.
125+
119126Status reads require the API origin pinned by a successful push. They never select an origin from the current
120127environment, expose the private ETag, follow redirects, or modify local state. Each request has a bounded timeout,
121- every response is byte-bounded and fully validated, and polling will not silently switch to a replacement analysis.
122- The wait repeats only validated ` processing ` responses and stops on its first failed read. A network failure is safe
123- to retry a bounded number of times because the command sends only ` GET ` requests. See
128+ ordinary response reads retain a 2 MiB bound, while this potentially gap-heavy response has a dedicated 128 MiB
129+ bound. Every response is fully validated, and polling will not silently switch to a replacement analysis. The wait
130+ repeats only validated ` processing ` responses and stops on its first failed read. A network failure is safe to retry
131+ a bounded number of times because the command sends only ` GET ` requests. See
124132[ read-only failures] ( errors.md#read-only-status-failures ) if the problem persists.
125133
126134## Compile and publish the current Plan
@@ -133,10 +141,10 @@ firstdraft plan compile
133141
134142` plan compile ` is the single terminal action. It first pushes the exact current bytes in
135143` .firstdraft/foundation-plan.json ` , even when those bytes are unchanged, and saves the accepted ETag using the same
136- contract as ` plan push ` . It then waits up to two minutes for an analysis whose graph version exactly matches that
137- accepted push, polling past a terminal result retained for an older Head. Invalid JSON, schema diagnostics, semantic
138- diagnostics, a failed analysis, a superseded analysis, or a recurring diagnostic stop the command with structured
139- output; no Compilation or Publication is requested.
144+ contract as ` plan push ` . It then waits up to two minutes for an analysis whose graph version and
145+ ` head_source_sha256 ` exactly match that accepted push, polling past a terminal result retained for an older Head.
146+ Invalid JSON, schema diagnostics, semantic diagnostics, a failed analysis, a superseded analysis, or a recurring
147+ diagnostic stop the command with structured output; no Compilation or Publication is requested.
140148
141149Only a ` valid ` analysis proceeds to the internal GitHub Publication lifecycle. Invoking ` plan compile ` is the
142150authorization to request that lifecycle. Immediately before its conditional mutation, the CLI re-reads the local
@@ -152,7 +160,7 @@ URLs, raw server projections, local paths, or environment values. Success writes
152160GitHub repository URL plus a newline to stdout. If the command fails after progress has begun, its structured JSON
153161error envelope is the final stderr document after the progress lines.
154162
155- The closed API ` 0.2 .x ` progress-reason allowlist is ` github.configuration_missing ` , ` github.oauth_unavailable ` ,
163+ The closed API ` 0.3 .x ` progress-reason allowlist is ` github.configuration_missing ` , ` github.oauth_unavailable ` ,
156164` github.api_unavailable ` , ` github.reauthorization_required ` , ` github.account_mismatch ` ,
157165` github.installation_unavailable ` , ` github.installation_not_ready ` , ` github.preflight_unavailable ` , the legacy-only
158166` github.preflight_unclassified ` , and these stage-specific fallbacks: ` github.preflight_unavailable.configuration ` ,
@@ -208,4 +216,5 @@ ETag, exact-byte SHA-256, canonical UTF-8 JSON envelope, provenance, metadata-on
208216strict Base64 contents, file digests, modes, owners, and source-subject UUIDs. It writes only into a uniquely created
209217sibling directory, verifies the complete tree, and atomically renames it into the still-absent destination. On
210218POSIX, directories use mode ` 0755 ` and files use artifact-declared ` 0644 ` or ` 0755 ` ; Windows verifies structure,
211- contents, and digests without claiming POSIX mode bits.
219+ contents, and digests without claiming POSIX mode bits. The declared and streamed artifact envelope is bounded at
220+ 128 MiB.
0 commit comments