Skip to content

Main sync: C01 evidence, C03 health modes, C04 provenance, X02-S1 machine interface, C09 doctor, X02-S2 contracts corpus - #8

Merged
im-tyler merged 8 commits into
mainfrom
sync/main-20260923b
Sep 23, 2026
Merged

im-tyler merged 8 commits into
mainfrom
sync/main-20260923b

Conversation

@im-tyler

Copy link
Copy Markdown
Contributor

Mirror sync from Forgejo main (dace006..d53c5bf). Same commits, same tree; see origin main for the receipt trail.

…, honest degraded outcomes (C01-4/5/10)

Readiness receipts (exact candidate IDs + probe outcomes) persist at
the attempt namespace the moment the gate passes, before the traffic
switch — un-collapsing ReadinessPassed from CandidatesRunning: recovery
now distinguishes COMPENSATE (receipt present) from INSPECT (absent) via
the unchanged Decide(). Predecessor snapshots persist before any new
container starts, so a crashed attempt's compensation restores exactly
the recorded container IDs. logDeploy records degraded outcomes
(success + degraded + reason) when predecessor retirement partially
fails — fleet consumers keying on clean success no longer skip a host
that needs attention. C01-1/2/3/8/9 remain deferred with ADR rationales.
…nsation (C01-6/7)

A record-write failure after the live commit now persists a repair-debt
marker (never rolling back live traffic); the next deploy reconciles it
under the app lock — backfill, clear, report — and teploy status shows
outstanding debt in text and JSON. Route compensation renders from the
predecessor's recorded F14 receipt (record is authoritative for what was
switched away from); reconstruct-from-inspect survives only as an
announced fallback. Remaining C01: -1/2/3 (locking protocol) and -8/9
(F04 identities).
…rfaced before the gate (C03, closes F47/TCL-17/A22)

health.mode selects the probe; empty = auto = today's compat fallback
verbatim (named and surfaced in the deploy plan). Unknown modes
rejected at load and validate; tcp+path rejected as a lying config.
Mode forwards into the F14 record and readiness receipts; the total
deadline was verified bounded and pinned by regression. Drain,
liveness-vs-readiness and multi-host wave states remain C03 scope.
…t equality (C04)

Every attempt records provenance before execution: revision + dirty
flag, context fingerprint (new build.ContextFingerprint — build had
none), Dockerfile identity, platform, requested ref, resolved digest
and digest-pinned flag, manifest digest; persisted in the attempt
namespace and embedded in the F14 record. The plan shows digest +
revision before any effect; after the live commit, record digest ==
plan digest is verified (pinned refs can't mismatch by construction) —
a mismatch warns and files repair debt, never fails live traffic.
Retry stability pinned: resolution is attempt-independent; webhook
retries re-pin to the ledger commit.
…ed error envelope (X02-S1/S3-lite)

version --json carries machine_interface:1 and a 15-token capability
registry naming every landed contract; app list and server status --json
carry the field additively (server list reshape recorded as the one
non-additive S2 follow-up — dash decodes it as a bare map). Failures
under --json emit the structured envelope on stderr (config-invalid +
internal wired first; conflict/uncertain-outcome/degraded defined and
queued) with exit codes pinned at 0/1/2.
…1 JSON, no deployment effects (C09)

git/config/ssh/docker/disk/registry/caddy/compatibility/repair-debt
checks, each ok|warn|fail with detail + remediation; registry auth vs
unreachable distinguished; effect-free asserted against the executor
call log; --json emits the machine-interface envelope; exit 0/1 only.
… first goldens

contracts/ in teploy-cli is the corpus home (ADR section 4, D15): the
producer of the envelopes owns the schema, and the CLI is the bottom of
the stack with no Neutron/Nucleus dependency and a public mirror.

- schema/ (draft 2020-12): version-handshake, app-list-envelope,
  server-status-envelope (appStatus root), error-envelope (code enum =
  the six-code taxonomy), release-record, attempt-name grammar pattern,
  preview-state eras (canonical/legacy oneOf), observation-envelope and
  operation-record (dash-produced; schemas shared, fixtures pending
  their S5/S6 encoders).
- fixtures/: generated from the REAL encoders where a CLI producer
  exists - writeVersion drives the handshake golden verbatim; app-list
  pins the MI-1 envelope plus the pre-MI legacy shape (missing field =
  legacy producer, never MI 0); error-envelope valid + invalid-code;
  release-record container; attempt-name valid/invalid; preview-state
  canonical (ids cross-checked against the pinned TestPreviewIDGolden
  table), legacy slug, and the two-branches-one-slug ambiguous fixture
  whose rule is refuse-adoption.
- MANIFEST.md: corpus revision table (rev 1 = post-v0.1.37 main),
  artifact/producer status, regeneration rules, the same-commit rule
  for contract changes, and the servers.yml downgrade hazard note.
- contracts_golden_test.go regenerates with TEPLOY_UPDATE_CONTRACTS=1
  and FAILS on drift otherwise - CI gets the drift check via the normal
  suite.

Declared S2 tails (not done here): server-status fixture from a live
capture, the non-additive server list --json reshape (needs a coordinated
dash decode change), dash fail-closed on MI > max, and the X01 section
5.2 job-3 extension to decode the pinned corpus.

Full CLI suite green (25 packages).
@im-tyler
im-tyler merged commit 2df2a05 into main Sep 23, 2026
1 check passed
@im-tyler
im-tyler deleted the sync/main-20260923b branch September 23, 2026 19:49
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