# Agent entry — pql-infrastructure

Locked product/brand/business decisions live in this repo’s own docs, not in any single AI tool’s private memory. A session that locks a new decision updates the relevant doc in the same unit of work.

## LOCKED 2026-09-07 — this repo is a published mirror, and what may enter it is fixed

**Source of truth is `0xF4ng/tidb-lifecycle-ops`, directory `03-commercialization/`.**
This repo is the published surface of that canon, for colleagues and engineering to read.

### Do not edit here

Changes made directly in this repo are **overwritten by the next publish**. Edit the source repo
and republish (`scripts/sync-to-company-repo.sh` there). If you do not have access to the source,
raise it with Heidi rather than committing here.

### What may enter

Only **definitions, models, contracts and process docs** — the things colleagues need in order to
implement or audit the PQL model:

- scoring model, priority rules, region and pool definitions
- measurement invariants, window contracts, metric definitions
- data contracts, source-table maps, access requests
- operating mechanism and divergence notes

### What must never enter

1. **Customer-identifying data.** Tenant extracts, signup exports, audience lists, CRM pulls,
   anything with customer email addresses, and per-tenant rows keyed to a real account.
   These live in the private source repo and are stripped at publish time.
2. **Report deliverables and their exports.** Briefs, `.docx`, `brief.html`, `brief.pdf`.
   They belong in `0xF4ng/growth-reports`.
3. **Credentials.** Never in any repo, ever. See `~/.config/pingcap-plg/regional-db.env`.

### Why the rule is this strict here specifically

This repo is readable by roughly **195 org members**, and that membership list is not maintained by
the team that owns this data. The exposure is therefore not "our team plus a few" — it is everyone
who has ever been added to the org and not removed. That is the whole reason the customer data sits
in a private repo instead.

### How it is enforced — three layers, none of them "remember to check"

1. **Publish filter.** The sync script builds the payload with the extracts excluded, then scans
   only that payload; it refuses outright at ten or more external addresses.
2. **`.gitignore` in this repo.** Blocks the extract patterns even on a direct commit.
3. **CI (`.github/workflows/no-customer-data.yml`).** Runs on every push and pull request against
   tracked files and fails the check on bulk customer data. Known external contacts that are
   legitimately part of an operating doc are listed in `.allowed-external-emails`.

Source: Heidi, 2026-09-07.

## LOCKED 2026-09-04 — this program is PLG, never SLG

**Everything that comes out of PQL infra is PLG.** Briefs, queues, bots, GM/colleague packs, canvases, handoffs, slide titles, owner columns, and spoken labels: **PLG**. Do not brand them SLG.

- This repo scores self-serve tenants for the **PLG motion** (see `README.md`).
- Write “APAC PLG”, “EMEA PLG”, “PLG queue”, “PLG follow-up”. Never “APAC SLG brief”, “SLG queue”, “SLG task” on new PQL-infra output.
- Historical SQL `action_track = 'SLG'` in `emea/EMEA-Daily-Intelligence-Brief.sql` is a **routing enum** (human follow-up vs automated nurture), not the name of this program. Do not bulk-rename that enum in the same change as a brief. New writing still calls the program PLG.

Source: Heidi, 2026-09-04, chat lock on PQL infra naming.

## LOCKED 2026-09-07 — 提交只署 0xF4ng，不带任何 agent 署名

**不要在 commit message 里加 `Co-Authored-By:` 指向任何 AI agent**（Claude / Codex / Cursor / 任何模型或工具名），
也不要 "Generated with"、工具 emoji、"assisted by"。一个 commit 上只有一个名字：**0xF4ng**。

各家工具的默认行为不算理由——Claude Code 默认会加 `Co-Authored-By: Claude`，**要关掉**；Codex、Cursor 同理。

例外只有一种：commit **主题里正当提到某个模型**（例如 `docs: bind runtime line to Claude Haiku`）是在描述产品，保留。
规则针对的是**署名 trailer**，不是这个词本身。

来源：Heidi，2026-09-07。跨库口径见 `~/Desktop/obsidian all/Work_as_you_are/memories/reference_git_identity.md`。
