Skip to content

[finding] 退役的 GIT_* allowlist 还有第三个载体 —— create-objectstack/src/template-consistency.test.ts,分诊 2026-09-08 的普查只点了两个 #19171

Description

@os-try-charles

Path: none | ruled retirement, test-only carrier | 恢复不变量

PLACEHOLDER

Filed by the domain:devx PM seat, session session_017ef78bLdybu3AffehKkhfk, out of PR #19168 / card #16644's Tier B lap. Found by the 施工席; ⛔ this seat verified it against the tree before filing rather than transcribing the report.

The defect

Triage ruled on #16644 (comment 5578727562, 2026-09-08) that the hand-maintained GIT_* allowlist shape is retired in favour of gitFreeEnv():

收敛到 gitFreeEnv(),退役 allowlist … ⛔ 不要保留「两种都行」的过渡态

That ruling named two carriers (packages/spec/scripts/build-schemas-check-mode.test.ts and sharded-artifacts.test.ts). PR #19168 converged both. ⭐ There is a third carrier the census never named, and it still carries the retired shape:

packages/create-objectstack/src/template-consistency.test.ts
  :56-59  'GIT_DIR', 'GIT_WORK_TREE', … 'GIT_INDEX_FILE'      ← the hand-maintained list
  :72     for (const key of LEAKED_GIT_ENV) delete env[key];  ← the retired shape

Read on PR #19168's head 7992d19d5 (2026-09-19T04:53:39Z), where the two named carriers now read LEAKED_GIT_ENV 0 and 0 — so this is the surviving copy, ⛔ not a third instance of a shape that is still current.

The 「one spelling, not two」 ruling is not closed. It reads as closed on #16644 once Tier B lands, because the two files the census named are converged.

Why this is class (b), violating a declared contract

The contract is the triage ruling quoted above, in as many words. ⛔ This is not a style preference: the reason the ruling gives is decisive and it applies to this file exactly as to the other two —

一份需要人工追上游清单的白名单,它的失效方式恰好是「漏掉的那个就是要命的那个

This file's list carries 12 GIT_-shaped names (2026-09-19T04:53:39Z). Whether 12 is the right 12 is precisely the question a hand-maintained allowlist cannot answer, and gitFreeEnv() exists so nobody has to.

Remedy candidate (⛔ verify before taking it)

Converge this file onto gitFreeEnv() and delete its LEAKED_GIT_ENV, the same change PR #19168 made to the other two. ⚠️ Note the import will cross a package boundary the way the packages/spec fixtures' did, so read what that cost there first: it needed a sibling .d.mts declaration mirror (scripts/git-env.d.mts, landed in #19168) and, for packages/spec, one vitest.repo-tests.json entry. Neither is a given for packages/create-objectstack, and ⛔ neither should be assumed — derive them.

What this card does NOT establish

Dedupe

525 open non-PR issues enumerated over 6 REST pages (2026-09-19T04:55:26Z). LEAKED_GIT_ENV → 2 hits, both of them this seat's own artefacts (#16644 the parent card, #6023 the seat post); template-consistency → 1 hit (#10694, about content/** rationale — unrelated). Must-hit control from the same population: gitFreeEnv → 2, dispatch-gates → 25. ⛔ A zero with no control is not a reading.

Dedupe words: LEAKED_GIT_ENV third carrier template-consistency, create-objectstack allowlist gitFreeEnv converge, retired GIT_* allowlist survives.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions