Skip to content

TIGER-317: emit <meta name="generator" content="Tiger">, flag-defaulted on - #339

Merged
WebTigers merged 2 commits into
mainfrom
feat/tiger-317-generator-meta
Oct 16, 2026
Merged

WebTigers merged 2 commits into
mainfrom
feat/tiger-317-generator-meta

Conversation

@WebTigers

Copy link
Copy Markdown
Owner

Why

Tiger announced nothing — no generator meta, no X-Powered-By, no badge. But every page already
ships tiger.modal.js, tiger.tabs.js and id="tiger-main", so a Tiger site has always been
trivially fingerprintable. The silence bought no obscurity; it only kept Tiger out of the technology
surveys (W3Techs / BuiltWith / Wappalyzer) that build CMS market-share tables off the generator tag.
An install that emits nothing is counted as nobody.

Now every install is countable, and a site that would rather not be says so in one checkbox.

Name only, never a version

A version string here hands a vulnerability scanner the exact build to match CVEs against, across an
install base nobody patches on our schedule — and no detector needs it. The content is a literal and
a guard test enforces that, so it cannot drift back in.

The flag

tiger.site.generator_meta, shipped = 1 in configs/core.ini — in the site-identity block
beside tiger.site.name / home_page / description, the keys the CMS Settings screen already
owns. The default is declared, not inferred from a missing key. Stored positively so the ini line
reads the way the feature works.

  • Tiger_Application_Bootstrap seeds $view->showGenerator beside $view->siteName. A missing key
    still reads as on — the flag fails visible.
  • The base theme's public layout emits the tag when it isn't hidden. A view built outside the
    bootstrap has no such property and still emits.
  • Settings → CMS → Site Settings gains "Hide Tiger meta tag". The checkbox asks the opposite
    question from the flag, and Cms_Service_Settings is the single place the two are reconciled.
  • cms.settings.js sends an explicit "0" — an unchecked box submits nothing, so without it the
    opt-out could never be reversed.
  • i18n in all seven locales.

Tests

The real layout block is lifted out of the shipped file and rendered in all three states
(shown / hidden / property absent), the ini default is asserted, and the config round trip covers
the un-tick. Every one mutation-checked:

mutation failures
version added to content 3
tag ungated 4
ini default flipped to 0 1
ini default deleted 1
polarity reversed 4
service write removed 4

Full suite green: 2545 tests, 22751 assertions.

Known limits

  • Not yet exercised in a browser on dev — the VPN was down. Server-side render is proven by test.
  • A theme shipping its own layout owns its own head. puma and Grey Mist render the head registry;
    theme-crafto-interior and theme-porto do not, so a site on those won't emit the tag until their
    layouts carry it. Same way headTitle / headMeta already behave.
  • The tag alone changes nothing until the detectors have a rule for it — submitting Tiger to
    W3Techs / Wappalyzer / BuiltWith is the actual marketing payoff and stays on TIGER-317.

TIGER-317

🤖 Generated with Claude Code

https://claude.ai/code/session_013vdyTeoDrGE4hKxt53TsE8

WebTigers and others added 2 commits October 16, 2026 07:34
…ed on

Tiger announced nothing, while every page already shipped tiger.modal.js,
tiger.tabs.js and id="tiger-main" — the silence bought no obscurity, it only
kept Tiger out of the technology surveys (W3Techs/BuiltWith/Wappalyzer) that
build CMS market-share tables off the generator meta. Now every install is
countable, and a site that would rather not be says so in one checkbox.

NAME ONLY, never a version. A version string hands a vulnerability scanner the
exact build to match CVEs against, across an install base nobody patches on our
schedule, and no detector needs it. A guard test enforces the literal so it
cannot drift back in.

The flag has a DECLARED default, not an inferred one: tiger.site.generator_meta
ships = 1 in configs/core.ini, in the site-identity block beside the other keys
the CMS Settings screen owns (the cms module itself ships only acl.ini). Stored
positively, so the ini reads the way the feature works.

- Tiger_Application_Bootstrap seeds $view->showGenerator beside $view->siteName.
  A missing key still reads as on — the flag fails VISIBLE.
- The base theme's public layout emits the tag when it isn't hidden; a view built
  outside the bootstrap has no such property and still emits. A theme shipping
  its own layout owns its own head.
- Settings > CMS > Site Settings gains "Hide Tiger meta tag". The checkbox asks
  the opposite question from the flag, and Cms_Service_Settings is the single
  place the two polarities are reconciled. cms.settings.js sends an explicit "0"
  because an unchecked box submits nothing — without it the opt-out could never
  be reversed.
- i18n in all seven locales.

Tests: the real layout block is lifted out and RENDERED in all three states
(shown / hidden / property absent), the shipped ini default is asserted, and the
config round trip covers the un-tick. All mutation-checked — a version in the
content, an ungated tag, a flipped or deleted ini default, and a reversed
polarity each fail the suite. Full suite green: 2545 tests, 22751 assertions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013vdyTeoDrGE4hKxt53TsE8
The class docblock named a `tiger.site.hide_generator` config key that does not exist; the flag is stored positively as `tiger.site.generator_meta` (hiding sets it to 0). Comment-only; the test code already asserts the correct key.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ASauLLscjqdsNqBNsx2Typ
@WebTigers
WebTigers merged commit 470b22c into main Oct 16, 2026
14 of 15 checks passed
@WebTigers
WebTigers deleted the feat/tiger-317-generator-meta branch October 16, 2026 12:12
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