Question
public-api.api.txt is meant to be the frozen wf promise, where any diff is a breaking change by definition. As built by #338 it is not: renaming api::Launch::run leaves it byte-identical.
cargo public-api renders methods and impls only at a type's canonical path — devlaunch_core::flows::launch::Launch::run, never devlaunch_core::api::Launch::run — so the classifier's devlaunch_core::api\b match cannot see them. The review of PR #347 measured it precisely: the generator emits the api section as 79 contiguous rows and the filter keeps 37. The 42 that fall through into the "regenerate freely" tripwire file include:
Launch::new and Launch::run — the only constructor and method of the central promised type
CommandContext::new
DevcontainerPath::as_str
- every derived
Clone / Debug / PartialEq impl on the four promised types
Widen the classifier so a promised type's canonical-path rows are classified as promise, not as tripwire. The obvious shape is to resolve each api re-export to the canonical path it names and claim that type's rows — but check whether cargo public-api offers this directly before building it by hand, and make sure the partition stays a partition (every row in exactly one file, which rust/devlaunch-core/tests/public_api_snapshots.rs already asserts).
Red-first, and the red is the finding itself: rename Launch::run, and public-api.api.txt must change. A test that mutates nothing proves nothing here — the existing suite passed while this hole was open.
Note the docs were corrected in #338 to stop asserting the converse, so this ticket closes the gap rather than a contradiction.
Question
public-api.api.txtis meant to be the frozen wf promise, where any diff is a breaking change by definition. As built by #338 it is not: renamingapi::Launch::runleaves it byte-identical.cargo public-apirenders methods and impls only at a type's canonical path —devlaunch_core::flows::launch::Launch::run, neverdevlaunch_core::api::Launch::run— so the classifier'sdevlaunch_core::api\bmatch cannot see them. The review of PR #347 measured it precisely: the generator emits theapisection as 79 contiguous rows and the filter keeps 37. The 42 that fall through into the "regenerate freely" tripwire file include:Launch::newandLaunch::run— the only constructor and method of the central promised typeCommandContext::newDevcontainerPath::as_strClone/Debug/PartialEqimpl on the four promised typesWiden the classifier so a promised type's canonical-path rows are classified as promise, not as tripwire. The obvious shape is to resolve each
apire-export to the canonical path it names and claim that type's rows — but check whethercargo public-apioffers this directly before building it by hand, and make sure the partition stays a partition (every row in exactly one file, whichrust/devlaunch-core/tests/public_api_snapshots.rsalready asserts).Red-first, and the red is the finding itself: rename
Launch::run, andpublic-api.api.txtmust change. A test that mutates nothing proves nothing here — the existing suite passed while this hole was open.Note the docs were corrected in #338 to stop asserting the converse, so this ticket closes the gap rather than a contradiction.