make.tcl modules/bootsupport/vfscommonupdate regeneration for increment 1:
utils-0.7.0.tm replaces 0.6.2 in src/bootsupport/modules and
src/vfs/_vfscommon.vfs/modules - the collision gate is now live for
make.tcl's guarded require (probed: a bootsupport-only tm path serves
0.7.0 and a collision fixture reports ok=0 status=collision). Layout
copies of src/make.tcl (basic, project-0.1, templates modpod source +
repacked punk::mix templates-0.2.0.tm in bootsupport/vfscommon) carry the
same gate hunks via the modules-step sync channel.
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
reason why ok is 0 (or unchecked); empty string when clean"
@leaders
vfsfolder -type string -optional 0 -help\
"Path of the kit source .vfs folder to inspect"
}]
}
proc vfs_startup_script_report {vfsfolder} {
set report [dict create ok 1 status none mainfile "" mainlinks {} unresolvable {} reason ""]
if {![file isdirectory $vfsfolder]} {
dict set report ok 0
dict set report reason "no such directory: $vfsfolder"
return $report
}
if {[catch {package require fauxlink} errM]} {
#cannot examine links - report unchecked rather than guessing (callers
#degrade to a notice; the gate must not refuse kits it could not check)
dict set report status unchecked
dict set report reason "cannot check: fauxlink package unavailable ($errM)"
return $report
}
if {[file isfile [file join $vfsfolder main.tcl]]} {
dict set report mainfile main.tcl
}
set mainlinks [list]
set unresolvable [list]
foreach link [lsort [glob -nocomplain -dir $vfsfolder -types f *.fxlnk *.fauxlink]] {
if {[catch {fauxlink::resolve $link} linkinfo]} {
lappend unresolvable [file tail $link]
continue
}
#resolved nominal name - covers empty-nominalname links whose effective
#name is the target's tail (filename-prefix parsing would miss them)
if {[dict get $linkinfo name] eq "main.tcl"} {
lappend mainlinks [file tail $link]
}
}
dict set report mainlinks $mainlinks
dict set report unresolvable $unresolvable
set suppliers $mainlinks
if {[dict get $report mainfile] ne ""} {
set suppliers [linsert $mainlinks 0 main.tcl]
}
if {[llength $suppliers] > 1} {
dict set report ok 0
dict set report status collision
dict set report reason "[llength $suppliers] root-level suppliers of the startup-script name main.tcl coexist in [file tail $vfsfolder]: [join $suppliers { AND }] - a merge materialises whichever it meets last, so traversal order silently decides the kit's boot script. Keep exactly one (the fauxlink into _config/ is the punkshell convention)"
} elseif {[dict get $report mainfile] ne ""} {
dict set report status main
} elseif {[llength $mainlinks]} {
dict set report status fauxlink
}
return $report
}
#G-133 binary-arch scan support. Recognition data is deliberately plain namespace
#variables so extending it (a new vendor spelling, a new cpu token) is a visible
set failmsg "startup-scriptcollisioninsrc/vfs/$vfstail-[dictget$startup_collision_reportreason].NOTBUILTandNOTDEPLOYED:anypreviouslydeployed$targetkitisuntouched"
set failmsg "startup-scriptcollisioninsrc/vfs/$vfstail-[dictget$startup_collision_reportreason].NOTBUILTandNOTDEPLOYED:anypreviouslydeployed$targetkitisuntouched"
set failmsg "startup-scriptcollisioninsrc/vfs/$vfstail-[dictget$startup_collision_reportreason].NOTBUILTandNOTDEPLOYED:anypreviouslydeployed$targetkitisuntouched"
reason why ok is 0 (or unchecked); empty string when clean"
@leaders
vfsfolder -type string -optional 0 -help\
"Path of the kit source .vfs folder to inspect"
}]
}
proc vfs_startup_script_report {vfsfolder} {
set report [dict create ok 1 status none mainfile "" mainlinks {} unresolvable {} reason ""]
if {![file isdirectory $vfsfolder]} {
dict set report ok 0
dict set report reason "no such directory: $vfsfolder"
return $report
}
if {[catch {package require fauxlink} errM]} {
#cannot examine links - report unchecked rather than guessing (callers
#degrade to a notice; the gate must not refuse kits it could not check)
dict set report status unchecked
dict set report reason "cannot check: fauxlink package unavailable ($errM)"
return $report
}
if {[file isfile [file join $vfsfolder main.tcl]]} {
dict set report mainfile main.tcl
}
set mainlinks [list]
set unresolvable [list]
foreach link [lsort [glob -nocomplain -dir $vfsfolder -types f *.fxlnk *.fauxlink]] {
if {[catch {fauxlink::resolve $link} linkinfo]} {
lappend unresolvable [file tail $link]
continue
}
#resolved nominal name - covers empty-nominalname links whose effective
#name is the target's tail (filename-prefix parsing would miss them)
if {[dict get $linkinfo name] eq "main.tcl"} {
lappend mainlinks [file tail $link]
}
}
dict set report mainlinks $mainlinks
dict set report unresolvable $unresolvable
set suppliers $mainlinks
if {[dict get $report mainfile] ne ""} {
set suppliers [linsert $mainlinks 0 main.tcl]
}
if {[llength $suppliers] > 1} {
dict set report ok 0
dict set report status collision
dict set report reason "[llength $suppliers] root-level suppliers of the startup-script name main.tcl coexist in [file tail $vfsfolder]: [join $suppliers { AND }] - a merge materialises whichever it meets last, so traversal order silently decides the kit's boot script. Keep exactly one (the fauxlink into _config/ is the punkshell convention)"
} elseif {[dict get $report mainfile] ne ""} {
dict set report status main
} elseif {[llength $mainlinks]} {
dict set report status fauxlink
}
return $report
}
#G-133 binary-arch scan support. Recognition data is deliberately plain namespace
#variables so extending it (a new vendor spelling, a new cpu token) is a visible