AyCode.Core/.github/LLM_PROTOCOL_DECISIONS.md

146 lines
57 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LLM Protocol Decisions
Append-only log of decisions about the AI AGENT CORE PROTOCOL and related LLM tooling (skills, instruction files, shared conventions) across the 8 known `.github/copilot-instructions.md` files.
---
## Current protocol state (quick reference)
Active as of **2026-04-26**. For the full evolution history, see the dated table near the bottom of this file. Read this summary first to orient yourself before diving into the dated entries.
**Session start flow**:
- **Primary files**: agent reads `copilot-instructions.md` + 3 SKILL.md files (`docs-discovery`, `docs-check`, `protocol-audit`). First response's `[LOADED_DOCS: ...]` shows 4 files.
- **Inherit files**: agent reads this inherit `copilot-instructions.md` + AyCode.Core's canonical `copilot-instructions.md` (for the numbered rules) + 3 SKILL.md files. First response's `[LOADED_DOCS: ...]` shows 5 files.
- **Why pre-load**: workspace skills are NOT in Claude Code's native skill-registry; pre-loading ensures implicit triggers fire reliably.
**AI AGENT CORE PROTOCOL** (present verbatim in each primary `.github/copilot-instructions.md`):
1. **MANDATORY OUTPUT PREFIX** — every response starts with `[LOADED_DOCS: N files (+K this turn: <short names>)]`. Short-name rule: basename by default; `TOPIC/README.md` for topic-folder READMEs (to disambiguate the many `README.md` files); extend upward for cross-project collisions. Never emit a bare `README.md` in the prefix.
2. **HARD-GATE: DOCS BEFORE CODE** — no `code_search` / source `get_file` until relevant `.md` docs are loaded. Includes **CROSS-REPO HARD-GATE** (applies to every repo entered via `own-dep-repos`) and **PER-QUESTION DOC-FIRST** (check for unloaded `.md` before grepping code).
3. **STRICT NO-RE-READ POLICY** — a doc is "in context" only if actually read via tool call in THIS conversation (session summaries / memory entries do NOT count — lossy compression).
4. **CONTEXT RECOVERY** — auto-detection triggers: session starts with a summary, mid-session compaction, or inability to quote exact content → reset `[LOADED_DOCS: NONE]` and re-read per Rule #2.
5. **EXPLICIT CONSENT FOR MODIFICATIONS** — no rewriting, creating, or deleting *any* file (code, docs, config, memory, or otherwise) without explicit user approval.
**Docs layout — Option C "folder + topic-prefixed companions"**:
- Paired topics live in `TOPIC/` folders: `TOPIC/README.md` (main, canonical) + `TOPIC/TOPIC_ISSUES.md` + `TOPIC/TOPIC_TODO.md` + optional `TOPIC/TOPIC_<subname>.md`.
- Single-file reference docs (`ARCHITECTURE.md`, `CONVENTIONS.md`, `GLOSSARY.md`, `DTOS.md`, etc.) remain flat at the `docs/` root.
- Each `docs/` root has a `README.md` index listing the topics.
- Project-specific variants of framework topics (e.g., the server-side logger in `AyCode.Core.Server`, the Nop bridge in `Mango.Nop.Services`) get their own `TOPIC/README.md` under the variant project's `docs/`.
- `.csproj` files use recursive glob: `<None Include="docs\**\*.md" />` so Pattern B nesting auto-shows in Visual Studio Solution Explorer without manual entries.
**Instruction files — 7 total** (was 8 before LLMP-DEC-51 / `Mango.FruitBank` deployment-host folder removal; deployment-context re-attributed to `FruitBank` per LLMP-DEC-52):
- **5 primary** files contain the full numbered AI AGENT CORE PROTOCOL: `AyCode.Core`, `AyCode.Blazor`, `Libraries`, `FruitBank` (Mango/Source), `FruitBankHybridApp`.
- **2 inherit** files reference AyCode.Core's protocol via blockquote (no duplicated numbered rules): `Mango.Nop.Core` (sub-project framework), `Nop.Plugin.Misc.AIPlugin` (plugin source).
- Each non-Core file has `## Shared Agent Skills` + `## Protocol History` sections.
- **Per-repo `prefix` field** (LLMP-DEC-58): every `@repo` block declares its own ID-prefix (`prefix = "ACCORE"`, `"ACBLAZOR"`, `"MGNOPLIB"`, `"MGNOPCORE"`, `"MGFBANKPLUG"`, `"FBANKNOP"`, `"FBANKAPP"` — 7 prefixes, 1 per repo).
- **`.github/` AND `docs/` files follow Framework-First** (LLMP-DEC-58 narrowed `.github/` exception; LLMP-DEC-62 extended the rule to `docs/`): each repo declares its own info (prefix, topics, etc.); only `LLM_PROTOCOL_DECISIONS.md` (workspace-meta history) and transient migration artifacts (`MIGRATION_ID_MAPPING.md`) may cross layers. Cross-layer awareness in tooling uses runtime discovery via `own-dep-repos` walking, not centralized listings. **Single bounded exception** per repo: `CONSUMERS.md` (one file per repo, optional) MAY list higher-layer repos that consume this one — bounded consumer-awareness for change-impact assessment, NOT framework-on-consumer coupling. AyCode.Core's lives at `AyCode.Core/CONSUMERS.md`.
**Issue / TODO / Decision ID format** (globally unique, 4-component as of LLMP-DEC-50..59):
- Format: `<PREFIX>-<TOPIC>-<TYPE>-<RAND>` (e.g., `ACCORE-LOG-I-K7M2`, `ACCORE-SIG-T-D7Q4`, `ACCORE-BIN-B-XXXX`, `ACCORE-XCUT-I-X8Q1`, `ACBLAZOR-GRID-T-V4P7`, `LLMP-DEC-50`).
- **`<PREFIX>`** (repo namespace): declared per-repo in `copilot-instructions.md` `@repo` block (`prefix = "..."` field, LLMP-DEC-58). Format spec + the framework's own `ACCORE` listing: `AyCode.Core/.github/REPO_PREFIXES.md`. Higher-layer prefixes are declared in their own repos (Framework-First — no central enumeration).
- **`<TOPIC>`** (framework / ACCORE topics): `LOG` (logger), `AUTH` (authentication), `SIG` (SignalR), `SBP` (SignalR binary protocol), `BIN` (binary serializer), `TOON` (Toon serializer), `XCUT` (cross-cutting within ACCORE), `META` (meta-tooling issues/TODOs about the protocol stack itself, LLMP-DEC-62), `LLMP` (LLM-protocol meta — bare format, no prefix). Higher-layer topics live in each repo's own `<repo>/.github/TOPIC_CODES.md` (e.g., AyCode.Blazor's `GRID`); see `AyCode.Core/.github/skills/docs-check/references/TOPIC_CODES.md` for the per-repo extension convention.
- **`<TYPE>`** (universal): `I` = issue, `T` = TODO, `B` = bug, `C` = critical (severity override), `DEC` = decision (LLMP-only).
- **`<RAND>`** (random suffix): 4-char `[A-Z0-9]`; ~1.7M combinations per `<PREFIX>-<TOPIC>-<TYPE>` triplet. Generated at entry creation; uniqueness verified via glob over active + archive files; collision triggers regeneration. **Avoids parallel-branch ID-collisions at merge time.**
- **LLMP exception**: `LLMP-DEC-N` entries (workspace-meta Decision Log) skip the prefix and use sequential `N` — single-file serialization avoids parallel-branch concern. Bare format `LLMP-DEC-1`, `LLMP-DEC-2`, ...
- **Cross-repo search**: prefix-wildcard glob (`*-LOG-I-*`, `*-XCUT-I-*`) finds all matches workspace-wide, no central index needed (LLMP-DEC-55 — `docs-discovery/SKILL.md` Cross-repo ID search section).
- **Append-only**: IDs never change once assigned. Hash anchors in markdown cross-refs use lowercase: `LOGGING_ISSUES.md#accore-log-i-k7m2`.
**Agent skills — five at `AyCode.Core/.github/skills/`** (2 reactive pre-loaded at session start per LLMP-DEC-43; 3 user-gated lazy-loaded on demand):
- **`docs-discovery`** (reactive) — extracts topic tokens from user requests, globs `**/docs/TOPIC/**/*.md` (+ companion patterns), loads the paired main+ISSUES+TODO set before source-code search. Cross-repo wildcard search for ID-pattern matches (`*-LOG-I-*` etc.) added in LLMP-DEC-55. Updates LOADED_DOCS via Rule #1 format.
- **`docs-check`** (reactive) — end-of-code-modifying-response skill: evaluates loaded `.md` for drift vs code, missing topic coverage, csproj-glob registration gaps, and new issue/TODO candidates. Emits the `[DOCUMENTATION CHECK]` section (or `[DOCUMENTATION CHECK] None.` single-line). Read-only on loaded docs; all patches as proposals per Rule #5.
- **`protocol-audit`** (user-gated) — audits `.github/copilot-instructions.md` files discovered via runtime walk of `own-dep-repos` from the invocation point (LLMP-DEC-58 redesign — was central-`REPOS.md` driven before). Common invariants C1-C4 for all (C1: 5 required `@repo` fields incl. `prefix`; C3: `prefix` format check, repurposed in LLMP-DEC-58); Primary-only (P1-P10) for files content-classified as primary; Inherit-only (I1-I3) for inherit files; Cross-cutting (X1, X2, X3). Reports PASS/FAIL per invariant-file cell with patch suggestions. Does NOT auto-apply patches.
- **`adr-author`** (user-gated) — Architecture Decision Record authoring; structured interview producing `docs/adr/NNNN-<slug>.md` (product decisions) or new `LLMP-DEC-N` row (meta-protocol decisions).
- **`docs-archive`** (user-gated) — rotates `Status: Closed` entries from active `_ISSUES.md` / `_TODO.md` / `LLM_PROTOCOL_DECISIONS.md` into year-bucketed archive files; archive-time collision-check on random suffix.
**Docs-sync enforcement (`[DOCUMENTATION CHECK]` at end of code-modifying responses)**:
- **Keep all .md in sync** — if code and loaded docs disagree, notify and ask (do NOT silently edit).
- **Identify missing documentation** — if a frequently-used pattern isn't documented in main topic docs, propose an entry.
- **Topic-based separation** — split logically distinct topics into separate `.md` files; keep concise and LLM-oriented.
- **File registration (scope: outside existing glob only)** — if a new `.md` falls outside the nearest `.csproj`'s recursive globs (`docs\**\*.md`, `**\README.md`), surface the needed glob patch. Common case (doc under `docs/`, folder-README) is zero-cost via csproj globs set up cluster-wide.
- **Issue / TODO surfacing** — surface concrete, non-duplicate, actionable `_ISSUES.md` / `_TODO.md` candidates as draft entries (priority P1-P3, rationale, code ref — **NO ID**, user assigns at apply-time). **Prerequisites (ALL must hold):** companion is in `LOADED_DOCS`; high-confidence (quotable evidence); concrete; not duplicate. **Max 3 items per response.** Also: surface `Status: FIXED` suggestions when a listed issue is fixed in the current response.
- **Empty-state output** — if `[DOCUMENTATION CHECK]` has nothing to report: `[DOCUMENTATION CHECK] None.` single line, no padding.
**Decision Log governance (this file)**:
- **Append-only.** Never rewrite or delete entries. Reversals and refinements get *new* entries that reference the superseded one by ID (e.g., "LLMP-DEC-26 superseded by LLMP-DEC-27").
- **Entries have `LLMP-DEC-N` IDs** (topic=LLMP, type=DEC — see TOPIC_CODES.md). Sequential, append-only, never renumber. Reference entries by ID for unambiguous citation from code comments, other `.md` files, or cross-repo.
- **Archive policy** (LLMP-DEC-65): active log keeps **last 15 entries** (rolling window); older entries rotate to **year-month bucket** archive files (`LLM_PROTOCOL_DECISIONS_<YYYY>_<MM>.md`, e.g., `_2026_04.md`). Sparse files OK — only month-buckets with archived entries get a file. Triggered manually via `docs-archive` skill on user request, or automatically when active count > 15. IDs stay unique across archives. **Supersedes** the original "annual at ~50" policy from LLMP-DEC-25.
- **`Affected` column** uses the scope codes defined below.
- **User consent required** for every new entry.
- **No skill / template version labels.** Skills and templates are continuously iterated; the Decision Log entry IS the version history. Reference changes by date or `LLMP-DEC-N` ID, not by synthetic version numbers (`v1.1`, `v2.0`, etc.) — neither in skill content, frontmatter metadata, nor in conversation when discussing changes. LLMP-DEC-45 removed legacy `metadata: version` fields from all SKILL.md files; LLMP-DEC-47 codifies the principle explicitly to prevent the linguistic regression of using `vN.M` as colloquial shorthand for "recent changes".
---
## Purpose
Quick lookup for **why** a rule is the way it is, to avoid:
- Re-debating decisions that were already discussed and resolved
- Silently "optimizing away" a rule whose edge-case purpose is no longer obvious
- Losing context between sessions / across team members
## Scope
**Tracked here:**
- `.github/copilot-instructions.md` rule additions / removals / rewordings
- `CLAUDE.md` changes
- New, modified, or removed agent skills (`docs-discovery`, `protocol-audit`, etc.)
- Protocol-level structural shifts (doc layout, file location conventions)
**NOT tracked here:**
- Code refactors or feature work — use commit messages / PR descriptions
- Code-architecture decisions — see `docs/ARCHITECTURE.md` at the relevant layer
- Trivial fixes (typos, path corrections without rule-semantic change)
## Writing rules
1. **Append-only.** If a decision is reversed or superseded, add a NEW entry that points to the old one. Do not rewrite history — the evolution itself is informative.
2. **One row per decision.** Keep the rationale concise; the purpose is scan-ability, not prose.
3. **`Affected` column** uses the scope codes defined below — always be explicit about which files were touched.
4. **Explicit consent required for additions** (per Rule #5 of the active `copilot-instructions.md`). The LLM proposes the entry; the user reviews and approves before the write.
5. **Reference this log** before proposing a protocol change — if the change was already discussed, the existing entry may save a debate.
## Scope codes (for the `Affected` column)
| Code | Meaning |
|------------------------|-----------------------------------------------------------------------------------------------------------|
| `5× primary` | All 5 primary `copilot-instructions.md` (AyCode.Core, AyCode.Blazor, Libraries, FruitBank, FruitBankHybridApp) |
| `4× non-Core primary` | The 4 primary files except AyCode.Core |
| `2× inherit` | The 2 inherit files (Mango.Nop.Core, Nop.Plugin.Misc.AIPlugin) — was 3× before LLMP-DEC-51 |
| `all 7` | All 7 files: 5 primary + 2 inherit (was `all 8` before LLMP-DEC-51) |
| `<repo>/...` | A single specific file path |
| `<skill-name>/...` | Skill directory under `.github/skills/` |
The "primary" vs "inherit" distinction is defined in `protocol-audit/references/REPOS.md`.
## 2026
> **Earlier entries archived**: LLMP-DEC-1..52 (2026-04-20 through 2026-04-26) → see [`LLM_PROTOCOL_DECISIONS_2026_04.md`](./LLM_PROTOCOL_DECISIONS_2026_04.md) per the **last-15-active retention policy** (LLMP-DEC-67). The active table below contains only the most recent 15 entries (rolling window). Cross-link integrity preserved: when a recent entry references `LLMP-DEC-X` (X ≤ 49), open the archive file to read the full text — IDs are stable, never reassigned.
>
> **Year-month buckets** (LLMP-DEC-65 policy): future archive files use `LLM_PROTOCOL_DECISIONS_<YYYY>_<MM>.md` (e.g., `_2026_05.md` for May 2026 entries). Cross-month archives are sparse files keyed on the entry's date column. The retention rule scans on `docs-archive` invocation: archive when active count > 15, target by entry date.
| ID | Date | Decision | Rationale | Affected |
|---------------|------------|-------------------------------------------------------|---------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| LLMP-DEC-53 | 2026-04-26 | Phase 1 of ID-format migration: created `REPO_PREFIXES.md` workspace prefix registry | First foundation step of the per-repo prefix namespace migration designed in LLMP-DEC-50. **Created**: `AyCode.Core/.github/REPO_PREFIXES.md` — workspace-meta-tooling registry listing 7 repo prefixes (ACCORE, ACBLAZOR, MGNOPLIB, MGNOPCORE, MGFBANKPLUG, FBANKNOP, FBANKAPP) plus the LLMP-DEC bare exception (workspace-meta, single-file serialization). The registry includes: full ID format spec (`<PREFIX>-<TOPIC>-<TYPE>-<RAND>`), 4-char random alphanumeric suffix `[A-Z0-9]` specification with generation rules (~1.7M combinations per topic-type-prefix triple), archive-time collision detection policy (skill aborts on collision, signals user, manual resolution), cross-references to `TOPIC_CODES.md` and `REPOS.md`, and add/remove workflow with explicit collision-check against C# class-name prefixes. **Workspace-meta-tooling exception preserved**: this registry lists prefixes across all layers (framework, shared libs, consumer products) — Framework-First Design Principle exception per existing convention (mirroring `TOPIC_CODES.md` and `REPOS.md` scope-note). **No entry IDs renamed yet** — this phase is purely the registry creation; existing IDs (LOG-I-N, BIN-I-N, etc.) remain unchanged. Phase 2 (TOPIC_CODES.md scope-note + format-rule update for the new 4-component ID), Phase 3 (skill `SKILL.md` updates with placeholder examples + ID-generation guidance + cross-repo glob), Phase 4 (mapping table — `OLD_ID → NEW_ID`), Phase 5 (per-topic rename of existing entries to new format), Phase 6 (cross-file cross-ref cleanup — ADRs, Decision Log, code comments, hash anchors), Phase 7 (final verification + completion entry) follow per the LLMP-DEC-50 plan. **User pre-Phase 1 commit established a rollback point**: if any phase produces unexpected state, `git reset` to the pre-migration tag is the safety net. | new file: `AyCode.Core/.github/REPO_PREFIXES.md` |
| LLMP-DEC-54 | 2026-04-26 | Phase 2 of ID-format migration: `TOPIC_CODES.md` updated for 4-component ID format and per-repo registry awareness | Phase 2 of the LLMP-DEC-50 migration. Updated `AyCode.Core/.github/skills/docs-check/references/TOPIC_CODES.md` in 8 sections to align with the new prefix scheme established in Phase 1 (LLMP-DEC-53, `REPO_PREFIXES.md`). **Changes**: (a) **Scope note** acknowledges per-repo `TOPIC_CODES.md` possibility (each repo may host its own at `<repo>/.github/skills/docs-check/references/TOPIC_CODES.md`); points to `REPO_PREFIXES.md` for the prefix scheme; flags that the legacy multi-repo Topic codes table will migrate in subsequent phases. (b) **Brief intro** updated to reference full 4-component ID format with cross-link to `REPO_PREFIXES.md`. (c) **Why this registry exists** — example IDs upgraded from 3-component (`LOG-I-5`) to 4-component (`ACCORE-LOG-I-K7M2`). (d) **Distinctions section**`LOG-C-1` example upgraded to `ACCORE-LOG-C-K7M2`. (e) **ID format rules** restructured: 6 rules → 5 rules (former rules 2 "Sequential number" + 3 "Counter scope" merged into new rule 2 "Random suffix" with 4-char `[A-Z0-9]` spec); LLMP exception explicit; full prefixed form mandatory in hash anchors. (f) **Registry maintenance workflow** — 5 steps → 7 steps; per-repo `TOPIC_CODES.md` ownership clarification; topic codes need NOT be globally unique (prefix disambiguates); collision check both against C# class-name prefixes AND within same repo's TOPIC_CODES.md. (g) **Examples** updated: all 13 examples use full 4-component placeholder format with realistic `<RAND>` illustrations + LLMP bare exception; explicit note that `<RAND>` is illustrative not actual. (h) **Cross-references section** — bare-ID-may-be-used wording removed (full prefixed form mandatory); workspace-registries entry added cross-linking to `REPO_PREFIXES.md`. **No existing entry IDs renamed** — Phase 2 is purely the convention update; the Topic codes table currently still lists all workspace topics (legacy state), to be migrated to per-repo registries in Phase 4-5. **Phase 1 + Phase 2 together establish the FORMAT FOUNDATION**; Phase 3 (skill `SKILL.md` updates with placeholder examples + ID-generation guidance + cross-repo glob), Phase 4 (mapping table), Phase 5 (per-topic existing-entry rename), Phase 6 (cross-file ref cleanup), Phase 7 (final verification) follow. | `docs-check/references/TOPIC_CODES.md` (Scope note, brief intro, "Why this registry exists", Distinctions, ID format rules, Registry maintenance, Examples, Cross-references — 8 sections updated) |
| LLMP-DEC-55 | 2026-04-26 | Phase 3 of ID-format migration: skill `SKILL.md` files updated for 4-component ID format and per-repo registry awareness | Phase 3 of the LLMP-DEC-50 migration. Updated 4 skill `SKILL.md` files + 1 reference template to align with the format foundation established in Phases 1-2 (LLMP-DEC-53 `REPO_PREFIXES.md`, LLMP-DEC-54 `TOPIC_CODES.md`). **`docs-check/SKILL.md`** (5 edits): (a) Step 5 Proposed ID spec — `{TOPIC}-{TYPE}-{N}``<PREFIX>-<TOPIC>-<TYPE>-<RAND>`, with both registries cross-linked, random-suffix generation procedure (glob + collision-check + regenerate), `<PREFIX>` source clarification (active repo's). (b) Sub-category example — `## SIG-I-4 [PROTO]: ...``## ACCORE-SIG-I-K7M2 [PROTO]: ...`. (c) Topic code selection — per-repo TOPIC_CODES.md awareness, prefix-disambiguation note, cross-repo XCUT case flagged as not-formalized, new-topic proposal references Registry maintenance workflow. (d) Step 6 renamed "Status update on fix" → "Status update on close" — aligned with LLMP-DEC-44 vocabulary (Open/InProgress/Closed); example anchor updated to full prefixed form; Resolution sub-section requirement added per Status field conventions. (e) Output template — `[tentative: TOPIC-TYPE-N]``[tentative: <PREFIX>-<TOPIC>-<TYPE>-<RAND>]`. **`docs-discovery/SKILL.md`** (2 edits): (f) Archive file ID example — `LOG-I-X``ACCORE-LOG-I-K7M2`. (g) NEW section "Cross-repo ID search" — describes prefix-wildcard glob patterns (`**/*-LOG-I-*`, `**/*-MEAS-T-*`) for finding entries of a topic across all repos, complementing Step 2's topic-folder discovery; explicit "globs do the work, no central index" principle. **`docs-archive/SKILL.md`** (1 edit): (h) Year-derivation example updated — `Fixed 2026-04-25`, `Won't fix 2026-04-25`, `LOG-I-X``Status: Closed (2026-04-25)`, `### Resolution` sub-section, `ACCORE-LOG-I-K7M2`; explicit Status vocabulary alignment with TOPIC_CODES.md (only Closed archives). **`adr-author/SKILL.md`** (1 edit): (i) Step 8 #4 follow-up TODO format — `{TOPIC}-T-N``<PREFIX>-<TOPIC>-T-<RAND>` with cross-link to TOPIC_CODES.md and REPO_PREFIXES.md. **`adr-author/references/ADR_TEMPLATE.md`** (1 edit): (j) Related TODOs/Issues placeholder — `<LOG-T-N, BIN-I-M, ...>` → realistic 4-component placeholders with registry cross-link. **No existing entry IDs renamed** — Phase 3 is purely skill-text update; existing entries (e.g., `LOG-I-1` through `LOG-I-10` in LOGGING_ISSUES.md) remain in legacy 3-component format until Phase 5 migrates them. **Phases 1-3 complete = format foundation done**; Phase 4 (mapping table OLD_ID → NEW_ID for existing entries), Phase 5 (per-topic existing-entry rename), Phase 6 (cross-file ref cleanup including ADR / Decision Log / code comments), Phase 7 (final verification + completion entry) follow per LLMP-DEC-50. | `docs-check/SKILL.md` (Steps 5/6, output template); `docs-discovery/SKILL.md` (Archive section example + new "Cross-repo ID search" section); `docs-archive/SKILL.md` (year-derivation example + Status vocabulary alignment); `adr-author/SKILL.md` (Step 8 #4 follow-up TODO format); `adr-author/references/ADR_TEMPLATE.md` (Related TODOs/Issues placeholder) |
| LLMP-DEC-56 | 2026-04-26 | Phase 4 of ID-format migration: created `MIGRATION_ID_MAPPING.md` mapping table (79 entries surveyed and given new random `<RAND>` suffix) | Phase 4 of LLMP-DEC-50 migration — survey + planning, no existing-entry rename. Workspace-wide grep `\b[A-Z]+-[A-Z]+-[0-9]+\b` over `.md` files: 79 unique entries identified — 77 in ACCORE (BIN: 19, LOG: 21, SIG: 15, SBP: 10, TOON: 11, XCUT: 1) + 2 in ACBLAZOR (GRID: 2). Other 5 repos: 0 entries. Each ID assigned a 4-char `[A-Z0-9]` random suffix; verified within-triplet uniqueness for all 12 `<PREFIX>-<TOPIC>-<TYPE>` triplets. **Pending forward-refs documented separately**: `LOG-T-12` (referenced in `docs/AUTH/README.md` + ADR-0001 but not defined in `LOGGING_TODO.md`) and `SBP-T-9` (referenced in decorator-feature-stack ADR but not defined in `SIGNALR_BINARY_PROTOCOL_TODO.md`) — Phase 4 captures them in 'Pending forward-references' section, decision deferred to Phase 6. **Template/placeholder IDs noted**: `GRID-I-1` (MGGRID_ISSUES.md example line), `AUTH-I-N` (generic placeholder) — not migrated, reformatted alongside topic rename in Phase 5. **Original Phase 7 deletion plan** for this mapping file later revised by user — see LLMP-DEC-58. | new file: `AyCode.Core/.github/MIGRATION_ID_MAPPING.md` |
| LLMP-DEC-57 | 2026-04-26 | Phase 5 of ID-format migration: per-topic rename of all 79 existing entries from 3-component `<TOPIC>-<TYPE>-<N>` to 4-component `<PREFIX>-<TOPIC>-<TYPE>-<RAND>` format (132 edits) | Phase 5 of LLMP-DEC-50 migration — actual entry rename. Topic-by-topic execution driven by Phase 4 mapping (LLMP-DEC-56). **Strict scope**: topic-pair files (`<TOPIC>_ISSUES.md` + `<TOPIC>_TODO.md`) + sister docs in same topic folder (e.g., `BINARY/README.md`, `BINARY_SGEN.md`, `BINARY_IMPLEMENTATION.md`, `TOON_INFERENCE.md`); inter-topic body anchors deferred to Phase 6. **Per-topic edit counts**: GRID 6 (2 IDs + placeholder template reformat), XCUT 7 (1 canonical + 2 cross-ref pointer headers in BINARY_ISSUES/SIGNALR_ISSUES + intra-XCUT body anchors), SBP 11 (10 IDs + 2 intra-file body refs), TOON 14 (11 IDs + 3 sister-doc anchors), BIN 33 (19 IDs + intra-pair anchors + 2 sister docs; **prefix-collision-driven descending order** required because BIN-I-1 is substring of BIN-I-10..15), SIG 21 (15 IDs + intra-pair anchors + sister doc + malformed `#issue-02` anchor fixed), LOG 40 (21 IDs + intra-pair anchors + sister LOGGING/README; LOG-I and LOG-T both required descending order — LOG-I-1 is prefix of LOG-I-10, LOG-T-1 is prefix of LOG-T-10/11). **Replace_all=true used per (file, old-id)** with descending-suffix order for prefix-collision-prone topics. **Final intra-scope verification**: 0 bare 3-component IDs remaining in any topic-pair file or sister doc; all 79 IDs renamed to canonical 4-component format. **Inter-topic refs known-deferred to Phase 6**: cross-file body anchors targeting renamed IDs (e.g., `XCUT_ISSUES.md#xcut-i-1` from `BINARY_TODO.md`), inter-topic body uppercase IDs (e.g., 'XCUT-I-1 / BIN-T-1 have landed' in SIG-T-6 body), AUTH/ADR cross-refs. | 7 topics, ~25 files: BINARY/{ISSUES,TODO,SGEN,IMPLEMENTATION}.md; LOGGING/{ISSUES,TODO,README}.md; SIGNALR/{ISSUES,TODO,README}.md; SIGNALR_BINARY_PROTOCOL/{ISSUES,TODO}.md; TOON/{ISSUES,TODO,README,IMPLEMENTATION,INFERENCE}.md; XCUT/{ISSUES,README}.md + cross-ref pointer entries in BINARY_ISSUES.md and SIGNALR_ISSUES.md; MGGRID/{TODO,ISSUES}.md; **132 edits total** |
| LLMP-DEC-58 | 2026-04-26 | Phase 5.1 (Framework-First retightening): `.github/` registries restructured to per-repo declarations + runtime discovery; `prefix` field added to all 7 `@repo` blocks; MIGRATION_ID_MAPPING.md retention policy revised | **User-identified Framework-First violation**: `REPO_PREFIXES.md` (in AyCode.Core/Layer 0/.github/) listed all 7 prefixes including consumer-side ones — Layer 0 must not enumerate higher-layer consumers. The previous workspace-meta-tooling exception (LLMP-DEC-53 era) was over-permissive. **Principle clarified by user**: *"minden repo csak magával egyszintű vagy alacsonyabb layer-el lehet cross"* (every repo cross-references only same-level or lower layers); Framework-First applies to `.github/` tooling too, except narrow workspace-meta history (LLMP-DEC log + transient migration artifacts). Cross-layer awareness uses **runtime discovery via `own-dep-repos` walking**, not centralized listings. **Concrete changes**: (a) `REPO_PREFIXES.md` rewritten — only ACCORE listed; per-repo declaration convention documented; cross-repo wildcard search documented (`*-LOG-I-*`); LLMP exception preserved. (b) `protocol-audit/references/REPOS.md` rewritten — only AyCode.Core's own primary file listed; runtime discovery via `own-dep-repos` walk documented; file-type classification (primary/inherit) by content inspection (no central registry of files). (c) `protocol-audit/SKILL.md` updated — frontmatter description changed; Step 1 rewritten for runtime discovery; **C1 invariant 4 → 5 required fields** (added `prefix`); **C3 invariant repurposed** to `prefix` format check (was 'matches REPOS.md expectations' — circular under new design, removed). (d) `docs-check/references/TOPIC_CODES.md` rewritten — only ACCORE topics; per-repo extension convention documented (consumer-side topics live in `<repo>/.github/TOPIC_CODES.md`). (e) `AyCode.Blazor/.github/TOPIC_CODES.md` NEW — ACBLAZOR's own topic registry (just `GRID`). (f) `AyCode.Core/.github/copilot-instructions.md` Layer #126 'Exception for workspace meta-tooling' narrowed: only LLMP-DEC log + transient migration artifacts (e.g., `MIGRATION_ID_MAPPING.md`) may cross layers; all other `.github/` files follow Framework-First. (g) `prefix = "<PREFIX>"` field added to all 7 `@repo` blocks: ACCORE / ACBLAZOR / MGNOPLIB / MGNOPCORE / MGFBANKPLUG / FBANKNOP / FBANKAPP. (h) Skill text cleanup: `docs-discovery/SKILL.md` cross-repo ID search examples (replaced specific consumer-prefix references with generic placeholders + ACCORE-internal example); `docs-check/SKILL.md` topic-code selection (removed hypothetical `MGFBANKPLUG-LOG`, generic phrasing). **MIGRATION_ID_MAPPING.md retention revised**: original Phase 7 plan was 'delete this file at migration end'; user revised to **'keep with LLM-targeted 2-week deletion-review reminder'** — any LLM reading the file from 2026-05-10 onward must surface a deletion-confirmation prompt to the user. Header note added with explicit date. | 12+ files: `REPO_PREFIXES.md` rewrite; `protocol-audit/references/REPOS.md` rewrite; `protocol-audit/SKILL.md` (frontmatter + Step 1 + C1 + C3); `docs-check/references/TOPIC_CODES.md` rewrite; `AyCode.Blazor/.github/TOPIC_CODES.md` NEW; `AyCode.Core/.github/copilot-instructions.md` Layer #126; **7 × @repo blocks** in 7 copilot-instructions.md files (`prefix` field); `docs-discovery/SKILL.md` + `docs-check/SKILL.md` (consumer-prefix example cleanup); `MIGRATION_ID_MAPPING.md` (retention header) |
| LLMP-DEC-59 | 2026-04-26 | Phase 6 of ID-format migration: cross-file cross-ref cleanup completed (37 edits across 13 files); migration end state — 0 OLD-format IDs in non-exception files workspace-wide | Phase 6 of LLMP-DEC-50 migration — final cross-file cross-ref cleanup. Inter-topic body anchors and uppercase ID body refs updated per the Phase 4 mapping (LLMP-DEC-56). **Files updated** (13): topic-pair files for inter-topic anchors (`XCUT_ISSUES.md`, `LOGGING_ISSUES.md`, `LOGGING_TODO.md`, `BINARY_TODO.md`, `SIGNALR_ISSUES.md`, `SIGNALR_TODO.md`, `SIGNALR_BINARY_PROTOCOL_TODO.md`); top-level cross-ref doc `CONVENTIONS.md` (4 anchor refs); AUTH topic body refs (`docs/AUTH/README.md` + `AUTH_ISSUES.md` — LOG-I-9 / LOG-I-10 renamed); ADR cross-refs (`docs/adr/0001-user-bearer-token-flow.md` — body + anchor refs renamed; `AyCode.Services/docs/adr/0001-acbinary-decorator-feature-stack-design.md` — SBP-T-5..8 renamed); `XCUT/README.md` outdated 'How XCUT-*-N IDs are numbered' section rewritten to reflect random-suffix format. **Pending forward-refs decision** (deferred from Phase 4): `LOG-T-12` and `SBP-T-9` chose **option (b)** per the LLMP-DEC-50 migration plan — rewrite references to 'forthcoming TODO' / 'no ID assigned yet' instead of reserving placeholder IDs; ID gets assigned when the entry is actually filed in `..._TODO.md`. **Pre-existing typo fixed**: `LOGGING_TODO.md` L88 had stale anchor `SIGNALR_TODO.md#log-t-5` (path → SIGNALR_TODO.md but anchor was `log-t-5`; intent was clearly `sig-t-5`) — corrected to `SIGNALR_TODO.md#accore-sig-t-m5l6`. **Code-comment refs (`.cs` files across all 7 repos)**: 0 OLD-format IDs found via cross-repo grep — no code edits required. **Migration end state**: 0 OLD-format IDs in any non-exception file workspace-wide; 3 allowed-exception files contain remaining OLD-format references — `MIGRATION_ID_MAPPING.md` (transient lookup table, see LLMP-DEC-58 retention policy), this `LLM_PROTOCOL_DECISIONS.md` (workspace-meta history), and `REPO_PREFIXES.md` (single pedagogical 'LOG-I-5' example illustrating the OLD format collision problem — kept intentionally to motivate the prefix design). **Migration scope summary** (Phases 1-6, LLMP-DEC-53/54/55/56/57/58/59): ~270 edits across ~25-30 files; 79 IDs renamed to 4-component random-suffix format; 5 of 7 repos clean of OLD format (the 2 with the legacy mapping/history files are the documented exceptions); all sister docs and ADRs updated; `.cs` code comments clean. | 13 files: 7 topic-pair / sister docs (inter-topic body anchors); 1 top-level (`CONVENTIONS.md`); 2 AUTH docs; 2 ADRs; 1 XCUT/README format-spec rewrite; **37 edits in Phase 6**; **~270 edits across all migration phases (1-6)** |
| LLMP-DEC-60 | 2026-04-26 | `## Current protocol state (quick reference)` summary section refreshed to reflect LLMP-DEC-50..59 outcomes (ID-format migration + Framework-First retightening + 7-instruction-file workspace) | After Phases 1-6 of the ID-format migration, the top-of-file summary section (introduced by LLMP-DEC-25 as a "what's currently active" snapshot, separate from the append-only dated entry table) had become stale on multiple counts: (a) "Active as of 2026-04-24" pre-dated all the migration entries; (b) ID format section described the OLD 3-component `<TOPIC>-<TYPE>-<N>` format pre-LLMP-DEC-50; (c) instruction file count "8 total: 5 primary + 3 inherit" pre-dated LLMP-DEC-51 (`Mango.FruitBank` deletion → 7 total: 5 primary + 2 inherit); (d) skill list mentioned only 3 skills (was outdated since LLMP-DEC-43 introduced the 5-skill 2-reactive/3-user-gated matrix), used `vN.M` version labels (banned by LLMP-DEC-47), and described `protocol-audit` as reading the central `references/REPOS.md` (Phase 5.1 / LLMP-DEC-58 redesigned it for runtime discovery via `own-dep-repos` walking + content-based file-type classification); (e) Scope codes table referenced `3× inherit` and `all 8`. **Updates applied**: date → 2026-04-26; ID format → 4-component `<PREFIX>-<TOPIC>-<TYPE>-<RAND>` with `<PREFIX>` per-repo declaration + `<RAND>` random-suffix spec + LLMP exception + cross-repo prefix-wildcard search note + cross-links to REPO_PREFIXES.md and per-repo TOPIC_CODES.md; instruction file count → 7 total (5 primary + 2 inherit) with brief notes on LLMP-DEC-51/52 (Mango.FruitBank deletion + FBANKNOP re-attribution) and LLMP-DEC-58 (per-repo `prefix` field added to all 7 `@repo` blocks); agent skills → 5 skills (2 reactive pre-loaded + 3 user-gated lazy-loaded) per LLMP-DEC-43, version labels removed; `protocol-audit` description updated for Phase 5.1 runtime-discovery design + new C1/C3 invariants; scope codes table → `2× inherit` + `all 7`; new note: `.github/` files follow Framework-First (LLMP-DEC-58 narrows the previous workspace-meta-tooling exception). **Append-only governance preserved**: dated entry table (LLMP-DEC-1..60) untouched; the summary section is by design a mutable snapshot per LLMP-DEC-25 (*"the dated entries remain the source of truth for *why* each decision was made; the summary is the *what* at a glance"*). | `AyCode.Core/.github/LLM_PROTOCOL_DECISIONS.md` (`## Current protocol state` section — date L9; "Instruction files" L30-33 + 2 new bullets on `prefix` field and Framework-First; ID format L35-40; agent skills L42-45; "Scope codes" table L99-100) |
| LLMP-DEC-61 | 2026-04-26 | Phase 7 (closure) of ID-format migration: migration formally complete | Phase 7 of LLMP-DEC-50 migration — **formal closure stamp**. All 7 phases of the original LLMP-DEC-50 plan executed: Phase 1 (LLMP-DEC-53) `REPO_PREFIXES.md` registry creation; Phase 2 (LLMP-DEC-54) `TOPIC_CODES.md` 4-component update; Phase 3 (LLMP-DEC-55) skill `SKILL.md` text updates with placeholders + cross-repo glob; Phase 4 (LLMP-DEC-56) `MIGRATION_ID_MAPPING.md` survey + 79-ID random-suffix generation; Phase 5 (LLMP-DEC-57) per-topic rename across 7 topics (132 edits); Phase 5.1 (LLMP-DEC-58) Framework-First retightening of `.github/` registries + per-repo `prefix` field added to all 7 `@repo` blocks + MIGRATION_ID_MAPPING retention policy revision; Phase 6 (LLMP-DEC-59) cross-file cross-ref cleanup (37 edits, 13 files); summary refresh (LLMP-DEC-60). **Final verification confirmed in LLMP-DEC-59 + cross-checked here**: 0 OLD-format IDs in any non-exception `.md` file or `.cs` file workspace-wide; the 3 allowed-exception files (`MIGRATION_ID_MAPPING.md` transient, `LLM_PROTOCOL_DECISIONS.md` workspace-meta history, `REPO_PREFIXES.md` single pedagogical 'LOG-I-5' example) intentionally retain OLD-format references for documented reasons. **Migration totals across LLMP-DEC-53..61**: ~270 edits, ~25-30 files modified, 79 IDs renamed to 4-component random-suffix format, 7 `@repo` blocks gained `prefix` field, 12+ registry/skill files restructured for Framework-First, 1 new file (`AyCode.Blazor/.github/TOPIC_CODES.md`). **Outstanding scheduled event** (NOT new work — auto-triggered): 2026-05-10 LLM-targeted deletion-review for `MIGRATION_ID_MAPPING.md` per LLMP-DEC-58 retention policy. Any LLM reading the file from that date onward must surface a deletion-confirmation prompt to the user; the prompt text is embedded in the file's header. **Migration formally complete** as of this entry; further protocol-stack work proceeds on the 4-component foundation. | `AyCode.Core/.github/LLM_PROTOCOL_DECISIONS.md` (this entry only — closure stamp; no file edits outside the Decision Log) |
| LLMP-DEC-62 | 2026-04-26 | Three protocol-stack additions: (a) `META` topic for meta-tooling issues/TODOs; (b) docs-side Framework-First rule with bounded `CONSUMERS.md` exception; (c) `adr-author` skill complexity-aware ask-back trigger restructure | **User-driven coherent batch** addressing 3 long-tail observations from the Phase 1-6 migration: **(1) Mental tracking failure** for protocol-stack issues. The 5-skill stack + 7 repos + per-repo registries had grown complex enough that issues observed mid-session (e.g., `LOGGING_TODO.md` L88 path/anchor typo, `Current protocol state` summary staleness, `docs-check` runtime-discovery deferral, anchor-mismatch typo class) had no formal home — they either landed in LLMP-DEC entries (which are meant for closed decisions, not open issues) or got lost. **Fix**: new `META` topic registered in `TOPIC_CODES.md` (ACCORE-META-*); `META_ISSUES.md` + `META_TODO.md` created at `AyCode.Core/.github/`; seeded with 3 META-T entries from the migration's deferred items: `ACCORE-META-T-J9N4` (docs-check runtime discovery for per-repo TOPIC_CODES.md), `ACCORE-META-T-K2P7` (protocol-audit anchor-mismatch detection invariant), `ACCORE-META-T-F8R3` (Current protocol state summary auto-staleness detection). Empty-state ISSUES file with template. **(2) Docs-side Framework-First** was implicit but not codified. Phase 5.1 (LLMP-DEC-58) retightened `.github/`, but `docs/` files still allowed cross-layer references in principle. User clarified the rule extends to `docs/` AND added a **bounded consumer-awareness exception**: a single `CONSUMERS.md` per repo MAY list higher-layer consumers for change-impact assessment when working in that repo. **Fix**: new sub-bullet in `AyCode.Core/.github/copilot-instructions.md` `## Framework-First Design Principle` section after the Phase-5.1 workspace-meta-history exception paragraph; new file `AyCode.Core/CONSUMERS.md` listing the 6 known ACCORE consumers (ACBLAZOR, MGNOPLIB, MGNOPCORE, MGFBANKPLUG, FBANKNOP, FBANKAPP) with brief usage notes + change-impact lens. The `CONSUMERS.md` is the SINGLE place in ACCORE allowed to name consumer repos; other docs / code stay consumer-agnostic. Top-of-tree consumer products (FBANKNOP, FBANKAPP) need no own CONSUMERS.md. **(3) `adr-author` skill over-trigger / under-trigger.** The previous "When to invoke" section had a flat list of trigger phrases ("let's plan X", "design Y", "döntsük el Y vagy Z") that fired too liberally for trivial planning AND missed architectural intent without the explicit "ADR" keyword. User proposed a 3-tier model: explicit ADR-keyword → auto-trigger; implicit planning + complexity-sniff → ASK-BACK; trivial → no trigger. **Fix**: `adr-author/SKILL.md` `## When to invoke` section restructured into 4 sub-cases — "Explicit ADR invocation (auto-trigger)" / "Implicit planning request (ASK BACK)" / "Trivial — no ADR" / "Proactive flag (drift)". Complexity-sniff heuristics enumerated explicitly (cross-cutting, cross-repo, reversibility-low, ≥2 alternatives, vocabulary signals, re-openable, new-API). Ask-back template is bilingual (Hungarian + English). Default behaviour: ASK if complexity-sniff fires; never silently auto-invoke. **Coherence**: the 3 changes reinforce each other — META topic gives meta-tooling issues a durable home; CONSUMERS.md formalizes a Phase 5.1 implicit gap with a Framework-First-respecting design; adr-author refinement reduces over-classification of "design discussion" as ADR-worthy (which would otherwise pollute the META topic with mis-classified entries). **Self-evidence**: this very batch was tested against the new adr-author trigger logic — user said *"de most nem kell ehhez adr"* (= "no ADR needed for this") and asked for the 3 changes done in one go; the new SKILL.md flow correctly handles this as "Implicit planning + ASK BACK + user said 'no'" → no `adr-author` skill invocation, just structured execution. | new files: `AyCode.Core/.github/META_ISSUES.md`, `AyCode.Core/.github/META_TODO.md` (3 seeded TODOs), `AyCode.Core/CONSUMERS.md`; modified: `AyCode.Core/.github/skills/docs-check/references/TOPIC_CODES.md` (META row added between XCUT and LLMP), `AyCode.Core/.github/copilot-instructions.md` (Framework-First section sub-bullet for docs-side rule + CONSUMERS.md exception), `AyCode.Core/.github/skills/adr-author/SKILL.md` (`## When to invoke` section restructured into 4 sub-cases) |
| LLMP-DEC-63 | 2026-04-26 | Filed 7 META-TODO entries from cross-source improvement review (3 parallel Copilot reviews + own analysis); codified workspace cost-function principle: **correctness > token-economy** | **User-initiated meta-review of protocol-stack improvement opportunities**, surfaced via 3 parallel Copilot session reviews after the LLMP-DEC-62 batch landed. The reviewers proposed ~17 candidate improvements across docs structure, skill behaviour, ADR governance. Cross-source convergence analysis (3-of-3, 2-of-3, 1-of-3, already-covered) identified genuine signal vs. individual ideas vs. overengineering. **User reframing of the cost function** — the reviewers' suggestions implicitly assumed "minimize tokens" as calibration goal, but user clarified: *"felesleges kör költsége >> tokenköltség. inkább több, mint hibás."* (wasted-round cost dominates token cost; prefer broader loading over wrong-answer-then-retry). This **extends the existing amortization principle (LLMP-DEC-43) from session-start-only to per-turn decisions** — every turn faces (a) read-then-answer vs. (b) guess-then-maybe-be-wrong; default toward (a). **7 new META-TODO entries filed** in `META_TODO.md` (LLMP-DEC-62's `META` topic infrastructure proven useful in its first week of existence): `ACCORE-META-T-M5T8` (TL;DR / "When to read" blocks on topic READMEs — 3-of-3 reviewer convergence + user agreement, P2); `ACCORE-META-T-Y4Q9` (Hot-path / Fast-path tagging — single-source, **recalibrated to P3** by user reframing because "load more" preference reduces fast-path criticality); `ACCORE-META-T-V7L2` (ADR quality lint, warning-mode not hard-fail, P3); `ACCORE-META-T-N8K3` (Last-verified-commit opt-in metadata for anti-hallucination drift detection, P3); `ACCORE-META-T-P9F4` (pre-load expansion with foundational reference docs — direct application of user reframing, P2); `ACCORE-META-T-R2W6` (workspace user-preference statement codifying "correctness > token-economy" — the meta-rule, P2); `ACCORE-META-T-C5J7` (docs-check / docs-discovery cap revisit refining LLMP-DEC-27, direct application, P3). **Implementation dependency clusters**: the P2 trio R2W6 → P9F4 → C5J7 should land together (R2W6 codifies the preference; P9F4 applies it to session-start; C5J7 applies it to skill behaviour) — half-state would be inconsistent; M5T8 → Y4Q9 are parent-child convention pair (TL;DR is the bigger signal, fast-path is finer-grained child); V7L2 + LLMP-DEC-62-era K2P7 are lint-family synergy candidates (one validates ADR structure, the other validates cross-ref anchors). **No implementation in this entry** — pure filing. The entries themselves are the actionable plan; **this LLMP-DEC documents the cost-function clarification** as a new protocol principle (which belongs in the Decision Log even before R2W6 codifies it into `copilot-instructions.md`, because the principle now governs subsequent agent behaviour as a known user preference even when the rule text isn't yet present). **Self-evidence again**: this very review — 3 Copilot reviews + user reframing → my recalibration → 7 META-T filed — exercised the LLMP-DEC-62 adr-author flow correctly: planning-language was used (`mi a véleményed`), complexity-sniff fired (≥2 alternatives, cross-cutting impact, new-API), I asked back (`Akarod hogy LLMP-DEC-63-at is felírjam`), user said yes → execute. No spurious ADR; no ad-hoc structural decision without confirmation. | `AyCode.Core/.github/META_TODO.md` (7 new entries `M5T8 / Y4Q9 / V7L2 / N8K3 / P9F4 / R2W6 / C5J7` inserted between `ACCORE-META-T-B6V2` and the TODO entry template — total META-T entries now 11) |
| LLMP-DEC-64 | 2026-04-27 | Fixed `protocol-audit/SKILL.md` C4 + X1 invariant text drift (5-skill matrix wording stale since LLMP-DEC-43); broadened `ACCORE-META-T-F8R3` scope to cover SKILL.md / registry text drift class | A parallel Claude session ran the post-Phase-5.1 `protocol-audit` skill against the workspace and surfaced **3 stale text references in `protocol-audit/SKILL.md` itself** — a positive self-evidence event for the runtime-discovery audit design (LLMP-DEC-58). All 3 share the SAME root cause: **LLMP-DEC-43** introduced the 5-skill 2-reactive/3-user-gated matrix (2 mandatory pre-loaded: `docs-discovery` + `docs-check`; 3 lazy-loaded: `protocol-audit` + `adr-author` + `docs-archive`); the `copilot-instructions.md` files (5 primary + 2 inherit) updated correctly to list all 5 skills + classification, but `protocol-audit/SKILL.md` invariant texts did not. **Drifts identified**: (i) C4 invariant text said *"all three skills"* — stale since 3-skill era; (ii) C4 expected `[LOADED_DOCS]` counts said *"4 for primary, 5 for inherit"* — stale (correct counts after LLMP-DEC-43: **3 for primary, 4 for inherit**, since 3 user-gated skills no longer pre-load); (iii) X1 invariant said *"all three bullets must be listed"* — same stale 3-skill list. **Audit impact**: the actual instruction files PASS (their `## Shared Agent Skills` now has 5 bullets, which is a SUPERSET of the stale 3-bullet check), but the invariant TEXT was misleading and would mislead future maintainers. **Patches applied**: 2 Edits to `protocol-audit/SKILL.md` — C4 rewritten to require reactive/user-gated classification + correct counts (3/4); X1 rewritten to require all 5 bullets with reactive/user-gated labels. **Broader META observation**: this is a **SKILL.md text drift class** parallel to the `Current protocol state` summary drift class previously captured in `ACCORE-META-T-F8R3`. F8R3's description was broadened (3 Edits to `META_TODO.md`) to cover BOTH classes — the auto-staleness detection (when implemented) catches `LLM_PROTOCOL_DECISIONS.md` summary drift AND any SKILL.md / registry text describing 'current state'. **Self-evidence (positive)**: the protocol-audit skill flagged its OWN SKILL.md content drift — exactly the design intent of LLMP-DEC-58 runtime-discovery audit (catches real maintenance debt). The Copilot session's report explicitly noted *"a runtime-discovery audit design (LLMP-DEC-58) is working as intended, surfacing real maintenance debt"* — independent confirmation. | `protocol-audit/SKILL.md` (C4 + X1 invariant text rewrites); `META_TODO.md` (`ACCORE-META-T-F8R3` description + parallel-drift-class section + Fix-direction options widened) |
| LLMP-DEC-65 | 2026-04-27 | Topic-code length cap raised 2-5 → 2-6 in `TOPIC_CODES.md` | Adding the new `SIGDS` topic (5 chars, fits the prior cap) prompted a forward-looking review of the topic-code length spec. The 2-5 cap originally derived from C# class-name visual-distinction concerns (≥3 to avoid `Ac*`/`Mg*` collision; ≤5 to keep IDs visually compact). User judgment: future composite topics (transport-prefixed DataSource variants, multi-domain layered topics) may benefit from one extra char of namespace headroom. Existing 9 ACCORE topics max at 4 chars (XCUT, AUTH, META, LLMP, TOON) — non-breaking change. The 2-6 range still stays well below the `@repo.prefix` 4-12 char range — visually distinct. **Two edits**: `TOPIC_CODES.md` Step 1 ("(2-5 uppercase chars)" → "(2-6 uppercase chars)") and Collision-avoidance section ("are 2-5 chars" → "are 2-6 chars"). Class-name collision rule preserved (no `Ac*`/`Mg*` start). | `docs-check/references/TOPIC_CODES.md` (2 sentence-level edits — Registry maintenance Step 1 + Collision avoidance section) |
| LLMP-DEC-66 | 2026-04-27 | Created `SIGDS` topic (`SIGNALR_DATASOURCE`) — registered in `TOPIC_CODES.md`, scaffolded `AyCode.Services.Server/docs/SIGNALR_DATASOURCE/{README, SIGNALR_DATASOURCE_ISSUES, SIGNALR_DATASOURCE_TODO}.md`, relocated DataSource doc from sibling `SIGNALR/` folder, updated 15 cross-refs across AyCode.Core (9) + AyCode.Blazor (6); README rewrite incorporates 7 doc-vs-code drift fixes + Sample-placeholder Framework-First cleanup; 3 new entries (B-T4K9 / I-W2H6 / T-N5R8) | `AcSignalRDataSource` is conceptually a **client-server DataSource** (change tracking, rollback, sync state, lifecycle events, `IList<T>` wrapper) — the SignalR transport is one current implementation detail, not the topic's defining identity. Previous placement under the `SIG` topic conflated transport concerns with state-management concerns. **Topic chosen**: `SIGDS` (5 chars, within the 2-6 cap raised in LLMP-DEC-65) — `SIG` prefix preserves "SignalR-coupled DataSource" identity (distinguishes from any future `RESTDS`, `GRPCDS` etc.); `DS` suffix is the universal DataSource shorthand. **Topic name**: `SIGNALR_DATASOURCE` (matches existing `SIGNALR_BINARY_PROTOCOL` uppercase+underscore convention). **Folder migration**: `AyCode.Services.Server/docs/SIGNALR/SIGNALR_DATASOURCE.md``AyCode.Services.Server/docs/SIGNALR_DATASOURCE/README.md` (folder + paired `SIGNALR_DATASOURCE_ISSUES.md` + `SIGNALR_DATASOURCE_TODO.md`). **README content rewrite** incorporates 7 doc-vs-code drift fixes identified in pre-migration code review: (a) abstract class declaration explicit + subclassing example; (b) `SerializerType` property + JSON/GZip path documented; (c) full `LoadDataSource*` overload set including in-memory `LoadDataSource(TIList fromSource, ...)`; (d) fallback re-serialize path in `LoadDataSourceFromResponseData`; (e) missing public methods enumerated — `AddRange`, `TryRemove`, `TryGetValue`, `TryGetIndex`, `AsReadOnly`, `BinarySearch`; (f) `TrackingState.Get` added to event/state values; (g) `TryRollbackItem(id, out originalValue)` signature shown. **Framework-First cleanup**: replaced consumer-leaking `Order*` placeholder (`OrderGetAll = 300`, etc.) with domain-agnostic `Sample*` (`SampleGetAll = 300`, etc.) — Layer 0 doc no longer references consumer domain types. **Cross-ref updates** (15 references): `AyCode.Core/.github/copilot-instructions.md` Layer #151; `AyCode.Core/README.md` doc-folder table cell; `docs/GLOSSARY.md`; `docs/CONVENTIONS.md`; `AyCode.Services/SignalRs/README.md`; `AyCode.Services.Server/SignalRs/README.md`; `AyCode.Services.Server/README.md`; `AyCode.Services.Server/docs/SIGNALR/README.md` (relative cross-ref `SIGNALR_DATASOURCE.md``../SIGNALR_DATASOURCE/README.md`); `AyCode.Services/docs/SIGNALR/README.md`; AyCode.Blazor: `docs/GLOSSARY.md` (×2 same path), `MGGRID/README.md` (×2 same path), `MGGRID/MGGRID_DATASOURCE.md`, `MGGRID/MGGRID_PARAMETERS.md`. **3 new entries**: `ACCORE-SIGDS-B-T4K9` (SaveChangesAsync inner Task drop), `ACCORE-SIGDS-I-W2H6` (BinarySearch NotImpl), `ACCORE-SIGDS-T-N5R8` (ChangeTracking Dictionary perf refactor — pre-existing `//TODO: Dictionary... - J.` comment). **Existing `ACCORE-SIG-I-T7S2`** (GetAll raw byte[] for populate/merge) stays in `SIGNALR_ISSUES.md` per append-only ID rule — its body has cross-cutting transport+DataSource concerns, naturally lives under `SIG`; the new `SIGNALR_DATASOURCE_ISSUES.md` opens with a cross-ref pointer to it. | `docs-check/references/TOPIC_CODES.md` (new `SIGDS` row inserted between `SBP` and `BIN`); 3 new files: `AyCode.Services.Server/docs/SIGNALR_DATASOURCE/README.md`, `SIGNALR_DATASOURCE_ISSUES.md`, `SIGNALR_DATASOURCE_TODO.md`; deleted: `AyCode.Services.Server/docs/SIGNALR/SIGNALR_DATASOURCE.md`; modified: 15 cross-ref locations across `AyCode.Core` (9 files) + `AyCode.Blazor` (4 files, 6 occurrences) |
| LLMP-DEC-67 | 2026-04-27 | Decision Log retention policy revised: **last-15-active rolling window + year-month bucket archives** (supersedes LLMP-DEC-25's "annual at ~50"); first archive operation executed (LLMP-DEC-1..52 → `LLM_PROTOCOL_DECISIONS_2026_04.md`); `docs-archive/SKILL.md` Rule A + Rule B refactor | **User-driven policy revision triggered by acute pain**: this `LLM_PROTOCOL_DECISIONS.md` file had grown past 25K tokens (multiple LLM sessions flagged the size as routine pre-load cost). The original LLMP-DEC-25 archival plan ("annual split at ~50 entries") was set when the protocol stack was nascent and entry velocity low. The April 2026 ID-format migration (LLMP-DEC-50..63 batch) generated 14 entries in 2 days; year-bucket archives would still grow into 100+-entry monsters during similar future high-velocity periods. **Two coordinated changes** based on user input *("inkább csak az utolsó 10 [→ 15] active entry-t tartsuk meg, többit archiválni; year+month bucket year helyett")*: **(A) Retention rule shift**: from "annual at ~50" to **last-N-active rolling window + year-month bucket archives**, where N = 15 (compromise between user's initial "10" suggestion and the migration-batch size of 14 entries — 15 keeps a complete recent initiative + buffer). **(B) Bucket granularity shift**: from `*_<year>.md` to `*_<YYYY>_<MM>.md`. Sparse files OK — only month-buckets containing archived entries get a file. Year-month scales for high-velocity periods (a heavy month produces a manageable file, a quiet month produces no file). **First archive operation**: LLMP-DEC-1..52 (2026-04-20 through 2026-04-26) moved to `LLM_PROTOCOL_DECISIONS_2026_04.md`. Active log now contains LLMP-DEC-53..67 (15 entries). **Second-pass archive note**: parallel sessions added LLMP-DEC-65 (topic-code length cap raise) and LLMP-DEC-66 (SIGDS topic creation) AFTER my drift-fix LLMP-DEC-64 but BEFORE this entry; the policy entry was originally planned as LLMP-DEC-65, became 67. The archive operation extended from 49 entries (LLMP-DEC-1..49) to 52 (LLMP-DEC-1..52) to maintain strict 15-cap at this entry's commit (without LLMP-DEC-50/51/52 archived too, active count would have been 18). **Cross-link integrity**: archive file is on-disk, on-demand readable; references from active entries to archived IDs (e.g., LLMP-DEC-58 references LLMP-DEC-43, LLMP-DEC-50) work — readers open the archive when following a link. IDs are append-only and stable across active ↔ archive boundaries. **Foundational decisions preserved**: the `## Current protocol state (quick reference)` summary at the top of the active file (introduced by LLMP-DEC-25, refreshed by LLMP-DEC-60) stays unchanged — survives all archiving. Foundational decisions (Rules #1-6, ID format spec, governance, etc.) reachable via the summary even when their dated entries are archived. **`docs-archive/SKILL.md` updates** (6 edits): frontmatter description rewritten; intro rewritten; `## Archive criterion (single rule)` restructured into `## Archive criteria (two rules)` with Rule A (Status-based for ISSUES/TODO) + Rule B (Last-15-active for DEC log) + "Why two rules" rationale; Step 4 updated to year-month bucket + sparse-files clause; pointer block example updated; Step 7 fully rewritten. **Governance section in summary** updated: LLMP-DEC-25-era "Archive annually at ~50" bullet replaced with "Last-15-active + year-month bucket" wording, cross-linking LLMP-DEC-67. **Active entry count = 15** — next archive triggers at LLMP-DEC-68 (LLMP-DEC-53 would rotate). | new file: `AyCode.Core/.github/LLM_PROTOCOL_DECISIONS_2026_04.md` (52 entries); modified: `AyCode.Core/.github/LLM_PROTOCOL_DECISIONS.md` (entries 1..52 removed via two sed passes; pointer block added + updated; governance bullet rewritten); `AyCode.Core/.github/skills/docs-archive/SKILL.md` (6 edits) |
## Known follow-ups
*(No open follow-ups. All items from previous audits resolved — see dated entries above for fix history.)*
## Notes
- Dates before 2026-04-24 are retroactive reconstructions from session history; intra-day ordering is approximate.
- For precise attribution of individual file changes, consult the git history of the affected files.
- This log is a **summary** artifact — it records the decision and its rationale, not the full diff.