Skip to content

KNOWN-LIMITS 79: one THINK_TAG shared by reach and reasoning (drift tripwire) - #95

Open
githubscum wants to merge 4 commits into
mainfrom
lotor-lane/l79-think-tag-one-source
Open

githubscum wants to merge 4 commits into
mainfrom
lotor-lane/l79-think-tag-one-source

Conversation

@githubscum

Copy link
Copy Markdown
Owner

WO: WO-L79-01, close the open remainder of KNOWN-LIMITS 79 ("two copies, not one import, so they can drift again").

Why it moves the trace: reach (R-rungs, v3) and reasoning (inline-reasoning classification) are two witnesses of the same content. Before this, each had its own copy of the think-tag regex. They agreed only because someone kept them in step by hand. Now there is one definition and both read it.

Change

  • New src/reasoning/think-tag.js: the one THINK_TAG. The less-than is built with String.fromCharCode(60) because the executor channel drops that sequence (limit 79's own hazard).
  • src/reasoning/index.js and src/reach/index.js: local const removed; import and re-export the shared binding. No other line changed.
  • New test/think-tag-one-source.test.js (5 tests): object identity across both modules, flags exactly i, a match / no-match table, and a source scan that fails if either witness defines const THINK_TAG again.
  • KNOWN-LIMITS 79 restated (closed part plus what remains); pin re-stamped, --check clean.

Tested

  • npm test: 1384 tests, 1379 pass, 0 fail, 5 skipped (main: 1379 / 1374 / 0).
  • Equivalence probe: 14,641 generated strings (4-piece products of tag fragments, case variants, spaces, newline), old literal vs new constructor: 0 disagreements. Source of the new regex prints <\/?think>.
  • Mutation: adding a second const THINK_TAG line to the reach module makes the tripwire fail (4 pass / 1 fail); restored.
  • No eval (E1-E6) is named for this; it is legibility/consistency debt on the R3 witness, not a new rung.

Executor: glm-5.3-flash via ollama launch claude. Lotor receipt session 4b5725ab, model: glm-5.3-flash, touched exactly the 4 code/test files. It could not run node under acceptEdits and said so instead of inventing counts. KNOWN-LIMITS prose and the pin re-stamp are mine (orchestrator), disclosed here.

What a reviewer should doubt

  1. The source scan keys on the spelling const THINK_TAG. A copy under another name passes it. Identity is the real check, and it holds only while both witnesses use the shared binding. Stated in the limit.
  2. The shared module lives under src/reasoning/, so reach now imports from reasoning's directory (not its index, so no store dependency). If you would rather it sit in a neutral place, it is a one-line move.
  3. Number may collide with other open limit PRs (KNOWN-LIMITS 82 half one: patch-target classifier (proposal for a CORE sitting patch) #92, KNOWN-LIMITS 23 amended: over-gate reaches bare filenames, bin/, and the file tools #93, KNOWN-LIMITS 84: matcher stamp misses 23 helpers its hashed rules call (tripwire + entry) #94); this one only edits 79's existing text, appends nothing.

githubscum and others added 4 commits October 27, 2026 08:36
The two witnesses each defined their own copy of the think-tag regex, so
they could drift and disagree again. src/reasoning/think-tag.js now holds
the one definition (less-than built with fromCharCode, per limit 79's
channel hazard); both modules import and re-export it. New test pins
object identity, the i flag, a match table, and a source-scan tripwire.

Executor: glm-5.3-flash via ollama (receipt session 4b5725ab).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nflict only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant