Browse Source

G-055 detail: after cancel-id discrimination probe - stringstartswith(after#) viable, id shape stable 8.6/9.0, liveness residual (user suggestion 2026-07-13)

Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 1 week ago
parent
commit
4a836f7faa
  1. 17
      goals/G-055-tclcore-regen-workflow.md

17
goals/G-055-tclcore-regen-workflow.md

@ -131,6 +131,23 @@ other commands including the multi-form ::after.
noted: count-position operands reject doubles where start/end accept them
('lseq 1.5' errors, 'lseq 1.5 3.5' works) - a value-dependent constraint no
lexical type expresses.
- ::after cancelid/cancelscript discrimination (user suggestion 2026-07-13:
per-version probe of the id shape + an id type "starting with after#").
Probed on 9.0.3 and 8.6.11: the id shape is after#N on both (hardcoded
"after#%d" in tclTimer.c; harvest at define time anyway via the safe
create+cancel probe 'set id [after 999999 {}]; after cancel $id' - G-054
technique, no event loop needed, no output). NO new type needed: the
existing stringstartswith(after#) type-alternate is validate-live (not just
synopsis display) - typing the cancelid form's id (and the info form's id)
with it makes 'after cancel someid' resolve cleanly to cancelscript,
matching real behaviour (real 'after cancel <non-id>' is a silent
script-match no-op; 'after info <non-id>' errors at runtime - model-reject
vs real-reject stays parity-true). RESIDUAL (truthful): 'after cancel
after#12' remains ambiguous in the model because a script can also be
after#-shaped - real Tcl resolves by id LIVENESS at runtime (tries id
first, falls back to script match), which no static type expresses; the
G-074 sanction then covers exactly that id-shaped witness rather than the
whole form pair.
- TIP 746 (user-flagged 2026-07-12,
https://core.tcl-lang.org/tips/doc/trunk/tip/746.md) removes the expr
behaviour from lseq operands in Tcl 9.1: the lseq model's number|expr operand

Loading…
Cancel
Save