Cross-linking v2 + CR gating + KNEL repo naming rules

Gitea gets full Redmine URLs (#note-M anchors, never bare #NNN —
that resolves inside Gitea). GLPI CRs join the lockstep: CR filed
before the change, CR deep link required in PR bodies and tickets.
KNEL org repos all carry the KNEL prefix.

Standard: https://projects.knownelement.com/issues/820
This commit is contained in:
2026-09-06 09:41:05 -05:00
parent 26dcc247bb
commit 199bb26177
+18 -4
View File
@@ -43,6 +43,14 @@ question (see Questions). Effective 2026-08-31.
- PUSH AS YOU GO (ruling 2026-08-31, standing permission): agents commit AND push work as it lands — do not wait for the human. The human's primary monitoring surface is Redmine/Gitea/Discourse activity, not ssh to hosts or running crush. Never force-push; respect branch protections. - PUSH AS YOU GO (ruling 2026-08-31, standing permission): agents commit AND push work as it lands — do not wait for the human. The human's primary monitoring surface is Redmine/Gitea/Discourse activity, not ssh to hosts or running crush. Never force-push; respect branch protections.
- pfv-tsys5 fleet rolls (ruling 2026-08-31): crush may reboot OTHER VMs on pfv-tsys5 (sectestbed fleet) via `qm` as needed. VM 5111 (the human workstation hosting crush sessions) reboots only when the human pulls the trigger. The PVE host itself NEVER reboots casually (NFS server for -02). Hardware window slipped to ~OCT 2026: presume VM 5111 stays 8 vCPU / 48G until that window — plan on interim values as the operating values. - pfv-tsys5 fleet rolls (ruling 2026-08-31): crush may reboot OTHER VMs on pfv-tsys5 (sectestbed fleet) via `qm` as needed. VM 5111 (the human workstation hosting crush sessions) reboots only when the human pulls the trigger. The PVE host itself NEVER reboots casually (NFS server for -02). Hardware window slipped to ~OCT 2026: presume VM 5111 stays 8 vCPU / 48G until that window — plan on interim values as the operating values.
- Locale (ruling 2026-08-31): human + fleet sit in TEXAS, America/Chicago (Central; UTC-5 in summer). Times the human says ("1638 CST") are Central local. Never re-derive weekday/date from UTC log strings — docker/journal print UTC = local +5h; e.g. 2026-08-31 is a Monday, "Friday" = 2026-09-04. - Locale (ruling 2026-08-31): human + fleet sit in TEXAS, America/Chicago (Central; UTC-5 in summer). Times the human says ("1638 CST") are Central local. Never re-derive weekday/date from UTC log strings — docker/journal print UTC = local +5h; e.g. 2026-08-31 is a Monday, "Friday" = 2026-09-04.
- Repo naming (ruling 2026-09-06): every repo in the KNEL org carries the KNEL prefix (CamelCase per KNELBMS/KNELIAC; KNELk8s is the sanctioned k8s spelling). Executed 2026-09-06 under [#819]; new repos MUST follow. Gitea keeps permanent redirects for old names, but canonical URLs are the prefixed ones.
## Production change management (CR gating — ruling 2026-09-06)
- EVERY production change files a GLPI CR BEFORE the change lands. CR deep link format: `https://cmdb.knownelement.com/front/change.form.php?id=N`.
- The PR body MUST reference the CR deep link; the Redmine ticket MUST reference the CR deep link. A PR without its CR link is not ready for review.
- CRs are solved only WITH verification evidence as a followup (what was checked, logs/URLs). Closed is human-only.
- Physical-plant / live-infra changes additionally need a Uptime Kuma maintenance window before apply.
## Enforcement (mechanical, belt and suspenders) ## Enforcement (mechanical, belt and suspenders)
@@ -53,18 +61,24 @@ question (see Questions). Effective 2026-08-31.
## Systems of record ## Systems of record
- Redmine = ALL work tracking (tickets, schedule, decisions-as-work-items). Reference `[#NNN]` in every commit. NEVER close a ticket without explicit human permission. Ticket-first inside repos (see gate above). - Redmine = ALL work tracking (tickets, schedule, decisions-as-work-items). Every commit carries the full Redmine comment URL (`https://projects.knownelement.com/issues/NNN#note-M`) — never a bare `#NNN` (see Reference format below). NEVER close a ticket without explicit human permission. Ticket-first inside repos (see gate above).
- Discourse = long-form docs + durable decisions/rationale. Repo .md files are stubs pointing there (exceptions: AGENTS.md, STATUS.md, questions-v*.md, runbooks that must live beside code). - Discourse = long-form docs + durable decisions/rationale. Repo .md files are stubs pointing there (exceptions: AGENTS.md, STATUS.md, questions-v*.md, runbooks that must live beside code).
- No per-repo JOURNAL.md (ruling 2026-08-31): work lives in Redmine, decisions in Discourse. Existing repo JOURNALs are read-only history — do not extend. - No per-repo JOURNAL.md (ruling 2026-08-31): work lives in Redmine, decisions in Discourse. Existing repo JOURNALs are read-only history — do not extend.
- STATUS.md = agent-owned, git-tracked, SUPER SPARSE: active ticket #s + one-line state each + an Inbox for mid-task interrupts. No narrative, no history — Redmine has that. Point-in-time only. - STATUS.md = agent-owned, git-tracked, SUPER SPARSE: active ticket #s + one-line state each + an Inbox for mid-task interrupts. No narrative, no history — Redmine has that. Point-in-time only.
## Cross-linking (gitea ↔ redmine ↔ discourse — always in lockstep) ## Cross-linking (gitea ↔ redmine ↔ discourse ↔ glpi — always in lockstep)
- Every gitea repo README links its Redmine project AND its Discourse doc/category. - Every gitea repo README links its Redmine project AND its Discourse doc/category.
- Every Redmine project overview links its gitea repo(s) AND Discourse category. - Every Redmine project overview links its gitea repo(s) AND Discourse category.
- Every Discourse doc/category links its gitea repo AND Redmine project. - Every Discourse doc/category links its gitea repo AND Redmine project.
- Per work item: ticket ↔ Discourse doc ↔ PR/commit ([#NNN] in subject or body). - Per work item: ticket ↔ Discourse doc ↔ PR/commit ↔ CR. Redmine ticket comments MUST carry the full Gitea commit/PR URLs (clickable). Discourse posts link the CR, the commit and the ticket.
- Links are created AT BIRTH of any artifact and updated in the same turn the work lands. Anyone landing on ANY of the three must reach the other two in one click. An artifact without its links is not done. - Links are created AT BIRTH of any artifact and updated in the same turn the work lands. Anyone landing on ANY of the systems must reach the others in one click. An artifact without its links is not done.
## Reference format (ruling 2026-09-06 — no bare `#NNN` in Gitea)
- In Gitea (commit messages, PR bodies, comments), a bare `#NNN` resolves against Gitea's OWN issue tracker — it NEVER links Redmine. All Redmine references in Gitea are FULL URLs, and the URL of record is the issue COMMENT anchor: `https://projects.knownelement.com/issues/NNN#note-M`.
- In Redmine, bare `#NNN` is correct (resolves locally). Gitea artifacts referenced FROM Redmine use full URLs: `https://git.knownelement.com/KNEL/<Repo>/commit/<sha>`.
- Rule of thumb: whichever system you are writing IN gets the short form; every OTHER system gets the full clickable URL.
## Commit messages (ruling 2026-09-01) ## Commit messages (ruling 2026-09-01)