fix(launcher): Campaign LA gate-round-1 review findings F1-F6 + hardening
F1: the crash reporter comment claimed the launcher never holds a password in any field - false (ProfileEditorDialogViewModel, AccountProfile.Password, StartRequest.Password). Reworded to the true, narrower invariant (no throw site interpolates a credential VALUE into an exception message) and pinned it with CrashReportNeverContainsAStoredPassword: a real STJ failure over a profiles document containing a known password, corrupted after the credential, must yield a crash file with the stack and without the value. F2: the co-deploy Inputs covered only Bake own sources; a Content edit never refreshed the 83 MB exe. Now the full reference closure. Fixing it surfaced two more incrementality traps, both fixed and comment-documented: SkipUnchangedFiles left the output older than the triggering input (target re-ran forever - added an explicit Touch), and %(Item.Metadata) in a plain Include does not batch (the literal percent-text became a permanently out-of-date phantom input - globs are now spelled per project). Verified: Core edit retriggers, then two consecutive clean incremental builds. F3: RID publishes ran BOTH co-deploy paths (two self-contained bake publishes). Build-time target now guarded on _IsPublishing; verified a real win-x64 publish runs zero build-target co-deploys and still ships both exes. F4: comment misattributed PublishBakeTool=false to CI lanes; it is target-local recursion guarding. F5: the x:Name reflection sweep now walks the markup as XML and tolerates template-scoped names (no generated field exists for those). F6: dead using removed. Hardening: the crash reporter positional --data-dir fallback requires a fully-qualified path so a relative or flag-shaped value cannot create ./crash-reports at an arbitrary CWD. Launcher 67/67, Launcher.Core 317/317. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
1f87acf1af
commit
981e168fb9
6 changed files with 178 additions and 32 deletions
|
|
@ -112,12 +112,16 @@ isolated root with the full stack; the real root stays empty.
|
|||
**Redaction, stated exactly (deliberate narrowing of the filed
|
||||
acceptance):** the report never serializes the command line, environment,
|
||||
or process state, but exception TEXT may quote an option name or path.
|
||||
That is safe by construction — credentials never enter launcher state
|
||||
(child-stdin only; `LauncherProcessSpec` has no credential member, guarded
|
||||
by its reflection test) — so no scanning pass over this sink exists today.
|
||||
The code comment carries the standing condition: if a credential ever
|
||||
becomes reachable from launcher state, this sink needs the status-stream's
|
||||
credential scanning.
|
||||
The gate-round-1 review (F1) corrected the original by-construction claim:
|
||||
the launcher DOES hold credentials (`ProfileEditorDialogViewModel`,
|
||||
`AccountProfile.Password`, `StartRequest.Password`); the true invariant is
|
||||
narrower — no code path interpolates a credential VALUE into an exception
|
||||
message. That invariant is now PINNED by
|
||||
`MainWindowViewTests.CrashReportNeverContainsAStoredPassword`: a real
|
||||
STJ parse failure over a profiles document containing a known password,
|
||||
corrupted after the credential so the parser consumed the value, must
|
||||
produce a crash file with the stack and without the password. If that test
|
||||
ever fails, this sink needs the status-stream's credential scanning.
|
||||
|
||||
## #397 — Windows: LauncherProcessSupervisor.Stop has no reliable graceful-stop signal for a no-window console host
|
||||
|
||||
|
|
|
|||
|
|
@ -738,8 +738,23 @@ launcher, incremental, `--help` verified). One transient 65/66 on the first
|
|||
post-merge test run did not reproduce across a clean rebuild + six repeats —
|
||||
consistent with stale-artifact mixing, but if it EVER recurs, capture the
|
||||
failing test name before anything else. Merged slice worktrees/branches
|
||||
(la2/la3/la7a/la-uitest) removed. The §A–I connected script remains the
|
||||
open user gate.
|
||||
(la2/la3/la7a/la-uitest) removed. Opus batch review: PASS (HIGH
|
||||
confidence) with 6 findings, all landed same-day: F1 the crash reporter's
|
||||
by-construction claim was FALSE (the launcher holds passwords in three
|
||||
fields; the true invariant — no throw site interpolates a credential
|
||||
value — is now pinned by a forced-failure test), F2 the co-deploy's
|
||||
Inputs covered only Bake's own sources, not its Content/Platform/Core/
|
||||
Plugin.Abstractions closure (the stale-artifact class again; fixing it
|
||||
exposed and fixed two more incrementality traps: SkipUnchangedFiles
|
||||
leaving outputs older than inputs, and %(Item.Metadata) in a plain
|
||||
Include not batching — a literal '%(...)' input is permanently
|
||||
out-of-date), F3 dual bake publish on RID publishes (guarded by
|
||||
_IsPublishing; verified 0 build-target co-deploys during a real publish),
|
||||
F4 misattributed comment, F5 template-scoped x:Name false-fail (sweep now
|
||||
walks the XML with template-ancestor tolerance), F6 dead using, plus the
|
||||
optional Path.IsPathFullyQualified hardening on the crash reporter's
|
||||
--data-dir fallback. Launcher 67/67, Launcher.Core 317/317. The §A–I
|
||||
connected script remains the open user gate.
|
||||
|
||||
## Ledger
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue