AyCode.Core/.github/LLM_PROTOCOL_DECISIONS.md

57 KiB
Raw Blame History

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 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 sectionLOG-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-XACCORE-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-XStatus: 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.mdAyCode.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.