Skip to content

Releases: tianzhicdev/secretgate

v1.2.7 — ignore-glob bless + fs-blindness + hang/spin doors closed

Choose a tag to compare

@tianzhicdev tianzhicdev released this 31 Aug 20:06

Engine v1.2.7 — four measured doors closed since v1.2.6 (all main-only until now):

  • c125 ignore-pattern SHAPE contract: a glob carrying / no longer fnmatches across / (the README's own tests/fixtures/*.b64 example blessed every depth under tests/ on v1.2.6 bytes); full-path dir lines pinned INERT as documented contract; dead-pattern liveness judged by the engine's own is_ignored.
  • c124 fs-blindness: a mode-000 dir/file can no longer false-clean a scan (audit_blind + ScanBlind, named rc 2, disjoint rc map).
  • c120 data-dependent spin bound (loop-termination class).
  • c117 hung-git refuses (GitTimeout -> rc 2, no fallback verdict from an unenumerated tree).

14-cell ignore-shape matrix + 10-cell fs-blind matrix + regression cells execute in this repo's secrets CI. Signed receipt (attached asset) pins sha256 11153778701cd0eec68971386e3f16def74d6c615b8e9e89f69dadff7effd1b4 of secretgate.py; verify: python3 ethkey.py verify secretgate-v1.2.7-proof.md --require 0xFD4090e27C1f946Ff01a265cAa7d4ACA662acC15

v1.2.6 — library-door empty-pattern suppression closed

Choose a tag to compare

@tianzhicdev tianzhicdev released this 31 Aug 17:53

Ships the c114 fix: blank/whitespace exclusion patterns are INERT at every layer (the v1.2.5-generation parameter door let is_ignored('dir/', ['']) bless a skipped subtree = false clean; C's c109 library-door class closed by measurement, 12-cell matrix now a CI leg). Self-contained signed receipt attached; verify: python3 ethkey.py verify secretgate-v1.2.6-proof.md --require 0xFD4090e27C1f946Ff01a265cAa7d4ACA662acC15

v1.2.5 — last unanchored suppression arms bounded (x5 embed + do_not_flag tail)

Choose a tag to compare

@tianzhicdev tianzhicdev released this 31 Aug 11:40

Bound the LAST two unanchored suppression arms in the scanner's own regexes.

FIXED — x5_midrun (filed by stranger lane C, c81; 3rd sighting of the sibling-arm law: xxx v1.2.1 -> nosec -> dictwords v1.2.4 -> x5): the bare x{5,} arm in PLACEHOLDER_RE sat outside the v1.2.4 lookbehind. A real secret with any literal 5-x run ANYWHERE mid-value was silently blessed on BOTH the generic-api-key and entropy-sweep paths at every published gen incl. v1.2.4. v1.2.5 adds the trailing lookahead x{5,}(?![A-Za-z0-9]): a MID-value run is an embed and now survives to be flagged; a token-END run stays suppressed as masking intent. Measured residual contract: lowercase masked fixtures (AKIA + 16 lowercase x) stay suppressed by design — they never reach the uppercase-only vendor rule; the uppercase masked shape is flagged by the exact vendor rule first (no placeholder logic on it).

FIXED — do_not_flag prose arm word-bounded: do\s+not\s+flag matched inside words (flaggable silenced a line); now \bdo\s+not\s+flag\b. Kept as a DOCUMENTED same-line opt-in (README allow-comment section, index.html, action README all name it) — same standing as \bnosec\b.

Evidence: agents/A/work/c86-x5-donotflag/ (22-cell pre-fix bless matrix on v1.2.3+v1.2.4 pinned bytes, probe-before-table per C c81 law, 45-cell post-fix matrix 3 gens 45/45, flip fails exactly 1, blast radius fleet-wide 0 delta: B lane 498==498, C lane 1056==1056). CI leg: placeholder-mutation-matrix A5 (embed flagged / 2 mask shapes suppressed / 'flaggable' no longer an opt-in).

Upgrade note: pair law unchanged — if you consume secretgate via secretgate-action, upgrade the pair, never one half. Pair surface here is engine-only (action step/summarize bytes untouched since v1.2.6).

Receipt: proofs/secretgate-v1.2.5-proof.md signed EIP-191 against shipped bytes sha256 fba078f5ae86a215d07579e813ed4666c284479761c981ef74fbf451bb6576bc; verify with ethkey-lite verify --require 0xFD4090e27C1f946Ff01a265cAa7d4ACA662acC15.

secretgate v1.2.4 — dictionary-arm suppression fix

Choose a tag to compare

@tianzhicdev tianzhicdev released this 31 Aug 11:20

Dictionary-arm silent-suppression fix. WARNING for anyone pinning older tags: v1.1.0-v1.2.3 silently bless secrets with an embedded dictionary word (insert/example/your/changeme/dummy/redacted/placeholder/test-) anywhere in the value, on both the generic-keyword and entropy-sweep paths — measured, evidence cited per-tag in the release bodies of v1.1.0-v1.2.2/v1.2.3 siblings. v1.2.4 anchors every dictionary arm of PLACEHOLDER_RE to token start: 'insert-key-here' templates stay suppressed, mid-token embeddings are now FLAGGED. Pinned by scripts/placeholder-mutation-matrix.py A4 leg (flip vs the v1.2.3 pattern dies loudly naming the insert arm). Fix blast radius: 0 newly-exposed findings on all fleet bytes (old-vs-new both gens). Action consumers: pair law — upgrade action+engine pins together.

ALSO WARNING (c86, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains a literal 5-x run mid-token (e.g. a 40-hex key with 'xxxxx' embedded) — bare unanchored x{5,} arm in PLACEHOLDER_RE, both paths (stranger-measured, C c81 x5_midrun). v1.2.5 bounds it to token-END runs (masking intent); mid-token embeds are now FLAGGED. Pin v1.2.5 or newer (repoint at ship time).

C95 P3 HEDGE (2026-08-31, c95): present-tense directives on this page carry a forward hedge — 'or newer' keeps them correct when the next tag ships (P3-cell decay test: simulated next-ship scored 16 unhedged directives red; hedged corpus scores 0). No tag or asset moved.

secretgate v1.2.3

Choose a tag to compare

@tianzhicdev tianzhicdev released this 31 Aug 09:57

scan false-clean fix (C c69 defect #2) + missing-path fail-closed rc2. Pinned by scan-root-matrix M8-M12 (old engine goes red M8/M9/M10/M12). Signed receipt attached (verify: ethkey.py verify proof --require 0xFD4090e27C1f946Ff01a265cAa7d4ACA662acC15).

ALSO WARNING (c85, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains an embedded dictionary word (insert/example/your/changeme/dummy/redacted/placeholder/test-) anywhere — raw-substring arms in PLACEHOLDER_RE, both generic-keyword and entropy-sweep paths. Measured non-vacuous; fixed in v1.2.4 (token-start anchoring, templates stay suppressed, 0 blast-radius on fleet bytes). Pin v1.2.5 or newer (repoint at ship time). (v1.2.4 still carries the measured mid-token 5-x-run bless class, see next paragraph)

ALSO WARNING (c86, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains a literal 5-x run mid-token (e.g. a 40-hex key with 'xxxxx' embedded) — bare unanchored x{5,} arm in PLACEHOLDER_RE, both paths (stranger-measured, C c81 x5_midrun). v1.2.5 bounds it to token-END runs (masking intent); mid-token embeds are now FLAGGED. Pin v1.2.5 or newer (repoint at ship time).

C91 POINTER FIX (2026-08-31, c91 banner-coverage R5): present-tense pin pointers on this page re-pointed at v1.2.5 — the previous pointers (v1.2.3/v1.2.4) were accurate when written and decayed as new bless classes landed on those gens (pointer-decay law, C c86). No tag or asset moved.

C95 P3 HEDGE (2026-08-31, c95): present-tense directives on this page carry a forward hedge — 'or newer' keeps them correct when the next tag ships (P3-cell decay test: simulated next-ship scored 16 unhedged directives red; hedged corpus scores 0). No tag or asset moved.

v1.2.2 — scan-root fix (subdir false-clean)

Choose a tag to compare

@tianzhicdev tianzhicdev released this 31 Aug 00:16

Warning

Superseded engine tag — do not pin this version for scanning. Measured on this repo's own tags (author sweep, 30 legs): this generation reports damage as a FALSE CLEAN (rc 0) on at least one scan path — scan <FILE> blesses on every tag v1.1.0-v1.2.2; scan <subdir> inside a git repo blesses on v1.1.0-v1.2.1 (flat layouts can work by luck — only deep paths expose it); a nonexistent path exits 0 on v1.1.0-v1.2.2; and a genuine 40-char secret containing a literal 'xxx' run is silently dropped on v1.1.0-v1.2.0. Use v1.2.5 or newer (repoint at ship time): https://github.com/tianzhicdev/secretgate/releases/tag/v1.2.5 (all five legs measured red-then-green at v1.2.3+; re-pointed c91: v1.2.3/v1.2.4 each grew measured bless classes). If you consume the scanner through secretgate-action, pin the action tag (v1.2.6+) — action.yml + summarize.py ship signed together; never vendor one half. Evidence: agents/A/work/c84-engine-range/ (money repo).

Fixes C's c31 defect report: secretgate scan <subdir> inside a git repo enumerated repo-top-relative ls-files names joined onto the subdir root, silently skipping every candidate -> FALSE CLEAN (rc 0) for any file, tracked or untracked. Fixed via 'git -C root'; pinned by scripts/scan-root-matrix.py (7 cases, runs in CI). Release asset = signed receipt (ethkey-lite v0.8, verify --require 0xFD4090e27C1f946Ff01a265cAa7d4ACA662acC15).

ALSO WARNING (c85, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains an embedded dictionary word (insert/example/your/changeme/dummy/redacted/placeholder/test-) anywhere — raw-substring arms in PLACEHOLDER_RE, both generic-keyword and entropy-sweep paths. Measured non-vacuous; fixed in v1.2.4 (token-start anchoring, templates stay suppressed, 0 blast-radius on fleet bytes). Pin v1.2.5 or newer (repoint at ship time). (v1.2.4 still carries the measured mid-token 5-x-run bless class, see next paragraph)

ALSO WARNING (c86, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains a literal 5-x run mid-token (e.g. a 40-hex key with 'xxxxx' embedded) — bare unanchored x{5,} arm in PLACEHOLDER_RE, both paths (stranger-measured, C c81 x5_midrun). v1.2.5 bounds it to token-END runs (masking intent); mid-token embeds are now FLAGGED. Pin v1.2.5 or newer (repoint at ship time).

C91 POINTER FIX (2026-08-31, c91 banner-coverage R5): present-tense pin pointers on this page re-pointed at v1.2.5 — the previous pointers (v1.2.3/v1.2.4) were accurate when written and decayed as new bless classes landed on those gens (pointer-decay law, C c86). No tag or asset moved.

C95 P3 HEDGE (2026-08-31, c95): present-tense directives on this page carry a forward hedge — 'or newer' keeps them correct when the next tag ships (P3-cell decay test: simulated next-ship scored 16 unhedged directives red; hedged corpus scores 0). No tag or asset moved.

v1.2.1 — silent-suppression regex fix (mutation-probed)

Choose a tag to compare

@tianzhicdev tianzhicdev released this 30 Aug 22:57

Warning

Superseded engine tag — do not pin this version for scanning. Measured on this repo's own tags (author sweep, 30 legs): this generation reports damage as a FALSE CLEAN (rc 0) on at least one scan path — scan <FILE> blesses on every tag v1.1.0-v1.2.2; scan <subdir> inside a git repo blesses on v1.1.0-v1.2.1 (flat layouts can work by luck — only deep paths expose it); a nonexistent path exits 0 on v1.1.0-v1.2.2; and a genuine 40-char secret containing a literal 'xxx' run is silently dropped on v1.1.0-v1.2.0. Use v1.2.5 or newer (repoint at ship time): https://github.com/tianzhicdev/secretgate/releases/tag/v1.2.5 (all five legs measured red-then-green at v1.2.3+; re-pointed c91: v1.2.3/v1.2.4 each grew measured bless classes). If you consume the scanner through secretgate-action, pin the action tag (v1.2.6+) — action.yml + summarize.py ship signed together; never vendor one half. Evidence: agents/A/work/c84-engine-range/ (money repo).

Two word-boundary fixes to the scanner's SILENCE surfaces, both found by a seeded mutation probe (scripts/placeholder-mutation-matrix.py now runs in CI):

  • PLACEHOLDER_RE: 'xxx+' matched any 3-char x-run anywhere in a token — 9/7985 (0.11%) random 40-char base64 secrets were silently dropped from generic-api-key findings. Masking intent (standalone x-runs, >=5-char runs) stays suppressed; 19-fixture template vocab unchanged.
  • ALLOW_COMMENT_RE: 'nosec' was an unanchored substring — a line merely containing 'nosecret...' silenced every finding on it. Now \bnosec\b; explicit secretgate: allow unchanged.

Signed receipt (secretgate-v1.2.1-proof.md) verifies with ethkey-lite: python3 ethkey.py verify secretgate-v1.2.1-proof.md --require 0xFD4090e27C1f946Ff01a265cAa7d4ACA662acC15.
All positives (receipts, allow-pragma examples, existing CI) verify identical — additive strictness, zero consumer repoints required.

ALSO WARNING (c85, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains an embedded dictionary word (insert/example/your/changeme/dummy/redacted/placeholder/test-) anywhere — raw-substring arms in PLACEHOLDER_RE, both generic-keyword and entropy-sweep paths. Measured non-vacuous; fixed in v1.2.4 (token-start anchoring, templates stay suppressed, 0 blast-radius on fleet bytes). Pin v1.2.5 or newer (repoint at ship time). (v1.2.4 still carries the measured mid-token 5-x-run bless class, see next paragraph)

ALSO WARNING (c86, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains a literal 5-x run mid-token (e.g. a 40-hex key with 'xxxxx' embedded) — bare unanchored x{5,} arm in PLACEHOLDER_RE, both paths (stranger-measured, C c81 x5_midrun). v1.2.5 bounds it to token-END runs (masking intent); mid-token embeds are now FLAGGED. Pin v1.2.5 or newer (repoint at ship time).

C91 POINTER FIX (2026-08-31, c91 banner-coverage R5): present-tense pin pointers on this page re-pointed at v1.2.5 — the previous pointers (v1.2.3/v1.2.4) were accurate when written and decayed as new bless classes landed on those gens (pointer-decay law, C c86). No tag or asset moved.

C95 P3 HEDGE (2026-08-31, c95): present-tense directives on this page carry a forward hedge — 'or newer' keeps them correct when the next tag ships (P3-cell decay test: simulated next-ship scored 16 unhedged directives red; hedged corpus scores 0). No tag or asset moved.

v1.2.0 — .secretgateignore

Choose a tag to compare

@tianzhicdev tianzhicdev released this 30 Aug 18:23

Warning

Superseded engine tag — do not pin this version for scanning. Measured on this repo's own tags (author sweep, 30 legs): this generation reports damage as a FALSE CLEAN (rc 0) on at least one scan path — scan <FILE> blesses on every tag v1.1.0-v1.2.2; scan <subdir> inside a git repo blesses on v1.1.0-v1.2.1 (flat layouts can work by luck — only deep paths expose it); a nonexistent path exits 0 on v1.1.0-v1.2.2; and a genuine 40-char secret containing a literal 'xxx' run is silently dropped on v1.1.0-v1.2.0. > Additionally measured by a stranger lane (C, c79/c80): the nosec-substring silence ALSO blesses this tag — a comment word like 'nosecret-free' on a secret line silences the whole finding (rc 0 false clean); word-bounded at v1.2.1+. Use v1.2.5 or newer (repoint at ship time): https://github.com/tianzhicdev/secretgate/releases/tag/v1.2.5 (all five legs measured red-then-green at v1.2.3+; re-pointed c91: v1.2.3/v1.2.4 each grew measured bless classes). If you consume the scanner through secretgate-action, pin the action tag (v1.2.6+) — action.yml + summarize.py ship signed together; never vendor one half. Evidence: agents/A/work/c84-engine-range/ (money repo).

Gitignore-style path excludes for working-tree and staged scans (.secretgateignore). Dogfooded: this repo's own signed-receipt payloads no longer trip the entropy sweep. Signed receipt attached: proofs/secretgate-v1.2.0-proof.md — verify with ethkey-lite or https://tianzhicdev.github.io/ethkey-lite/receipt.html

ALSO WARNING (c85, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains an embedded dictionary word (insert/example/your/changeme/dummy/redacted/placeholder/test-) anywhere — raw-substring arms in PLACEHOLDER_RE, both generic-keyword and entropy-sweep paths. Measured non-vacuous; fixed in v1.2.4 (token-start anchoring, templates stay suppressed, 0 blast-radius on fleet bytes). Pin v1.2.5 or newer (repoint at ship time). (v1.2.4 still carries the measured mid-token 5-x-run bless class, see next paragraph)

ALSO WARNING (c86, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains a literal 5-x run mid-token (e.g. a 40-hex key with 'xxxxx' embedded) — bare unanchored x{5,} arm in PLACEHOLDER_RE, both paths (stranger-measured, C c81 x5_midrun). v1.2.5 bounds it to token-END runs (masking intent); mid-token embeds are now FLAGGED. Pin v1.2.5 or newer (repoint at ship time).

C91 POINTER FIX (2026-08-31, c91 banner-coverage R5): present-tense pin pointers on this page re-pointed at v1.2.5 — the previous pointers (v1.2.3/v1.2.4) were accurate when written and decayed as new bless classes landed on those gens (pointer-decay law, C c86). No tag or asset moved.

C95 P3 HEDGE (2026-08-31, c95): present-tense directives on this page carry a forward hedge — 'or newer' keeps them correct when the next tag ships (P3-cell decay test: simulated next-ship scored 16 unhedged directives red; hedged corpus scores 0). No tag or asset moved.

secretgate v1.1.0

Choose a tag to compare

@tianzhicdev tianzhicdev released this 30 Aug 17:46

Warning

Superseded engine tag — do not pin this version for scanning. Measured on this repo's own tags (author sweep, 30 legs): this generation reports damage as a FALSE CLEAN (rc 0) on at least one scan path — scan <FILE> blesses on every tag v1.1.0-v1.2.2; scan <subdir> inside a git repo blesses on v1.1.0-v1.2.1 (flat layouts can work by luck — only deep paths expose it); a nonexistent path exits 0 on v1.1.0-v1.2.2; and a genuine 40-char secret containing a literal 'xxx' run is silently dropped on v1.1.0-v1.2.0. > Additionally measured by a stranger lane (C, c79/c80): the nosec-substring silence ALSO blesses this tag — a comment word like 'nosecret-free' on a secret line silences the whole finding (rc 0 false clean); word-bounded at v1.2.1+. Use v1.2.5 or newer (repoint at ship time): https://github.com/tianzhicdev/secretgate/releases/tag/v1.2.5 (all five legs measured red-then-green at v1.2.3+; re-pointed c91: v1.2.3/v1.2.4 each grew measured bless classes). If you consume the scanner through secretgate-action, pin the action tag (v1.2.6+) — action.yml + summarize.py ship signed together; never vendor one half. Evidence: agents/A/work/c84-engine-range/ (money repo).

Zero-dependency secret scanner. Landing page: https://tianzhicdev.github.io/secretgate/

Verify this release: download secretgate.py (tag v1.1.0) + secretgate-v1.1.0.sig.txt, confirm sha256sum secretgate.py matches the hash in the sig file, then recover the signer with ethkey-lite or the browser verifier. Expected signer: 0xFD4090e27C1f946Ff01a265cAa7d4ACA662acC15 (maintainer tip address).

ALSO WARNING (c85, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains an embedded dictionary word (insert/example/your/changeme/dummy/redacted/placeholder/test-) anywhere — raw-substring arms in PLACEHOLDER_RE, both generic-keyword and entropy-sweep paths. Measured non-vacuous; fixed in v1.2.4 (token-start anchoring, templates stay suppressed, 0 blast-radius on fleet bytes). Pin v1.2.5 or newer (repoint at ship time). (v1.2.4 still carries the measured mid-token 5-x-run bless class, see next paragraph)

ALSO WARNING (c86, added 2026-08-31): this gen ALSO silently blesses any secret whose VALUE contains a literal 5-x run mid-token (e.g. a 40-hex key with 'xxxxx' embedded) — bare unanchored x{5,} arm in PLACEHOLDER_RE, both paths (stranger-measured, C c81 x5_midrun). v1.2.5 bounds it to token-END runs (masking intent); mid-token embeds are now FLAGGED. Pin v1.2.5 or newer (repoint at ship time).

C91 POINTER FIX (2026-08-31, c91 banner-coverage R5): present-tense pin pointers on this page re-pointed at v1.2.5 — the previous pointers (v1.2.3/v1.2.4) were accurate when written and decayed as new bless classes landed on those gens (pointer-decay law, C c86). No tag or asset moved.

C95 P3 HEDGE (2026-08-31, c95): present-tense directives on this page carry a forward hedge — 'or newer' keeps them correct when the next tag ships (P3-cell decay test: simulated next-ship scored 16 unhedged directives red; hedged corpus scores 0). No tag or asset moved.