fs: IoError.path becomes a Path (step 3 of #68) #680
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Step 3 of #68 (PATH slice 2):
IoError.pathbecomes aPath. Steps 1 (#419), 2 (#547), 2b (#559) and 2c (#580, PR #583) are onmain; the compiler already understandsPathinIoError.path(step 1 taught the lowering both forms).Source
Goal
Every construction and read site of
IoError.pathuses aPath:std/fs,std/io,std/process,compiler/andtools/. The type of the field changes fromStringtoPath; messages anddescribeoutput stay byte-identical.Acceptance criteria
IoError.pathis declared asPath; allIoError(...)construction sites (about 30 instd/fs,std/io,std/process, the compiler) pass aPath, and all read sites handle aPath.IoErrorof a native from itspathparameter yields thePathform (verify against what #419 landed before changing anything).std/fs/testscover the error path: thepathof anIoErrorfor a missing file reads back as thePaththat was passed, and its text is unchanged.docs/design/PATH.mdstatus paragraph says step 3 is in; slice 2 stays open for step 4. Docs regenerated intoskills/as needed;tools/check-commits.shclean;sh tools/gates.sh agreen in forge CI.Seed
Decide first, from
CLAUDE.md"Seed and breaking changes": if the change needs a seed that does not exist yet (the field type changes in a form the published seed4b3045d31334cannot compile), do NOT land it in one go; push the teaching half as its own commit and report in the release comment what the seed refresh needs. If the published seed compiles both forms, one PR with one Conventional Commit (refactor(fs): IoError.path is a Path) is enough.Dependencies
#68 steps 1 to 2c (all landed). Step 4 (
list,absolutePathanswerPath) follows this one.Part of #68 (epic; do not close it).
Into<Path>signatures (PATH slice 2) #68Into<Path>signatures (PATH slice 2) #68[loop:torbscript] ready: scoped from the epic; the seed question is the worker's first check.
next: ready
[loop:torbscript] claim implement by session:loop-torbscript-20261030 @anthropic:theorben until 2026-10-30T13:00:00Z
[loop:torbscript] claim implement by session:loop-torbscript-20261030 @anthropic:theorben until 2026-10-30T13:00:00Z
Into<Path>signatures (PATH slice 2) #68[loop:torbscript] release: worker finished. The teaching half is PR #681 (head
74e0d095, nativefileReadAllText, CI green, argus requested). The migration (IoError.path: Pathacross std/fs, std/io, std/process and compiler,File.readAllas a wrapper overfileReadAllTextwith a privateReadFailure, PATH.md and fs.md) is done and checked locally (torb check clean, std/fs 41/41) but cannot be pushed until the seed knows the new native. Patches are kept on the loop host. Order: merge #681, run theseedworkflow on main, then a worker rebases and pushes the migration.next: waiting (merge of PR #681, then seed refresh)
Into<Path>signatures (PATH slice 2) #68[loop:torbscript] wait: PR #681 merged. Next is the seed refresh (Actions,
seed, run on main), which is the owner's step; the migration commit is pushed by a worker after it.next: waiting (seed refresh by the owner)