From 6a8212f3e0a091183758af11b7747635b523803b Mon Sep 17 00:00:00 2001 From: AriusII <35581726+AriusII@users.noreply.github.com> Date: Mon, 21 Sep 2026 16:31:38 +0200 Subject: [PATCH] Add engineering roadmap and evidence-linked execution specifications --- .github/ISSUE_TEMPLATE/engineering-work.yml | 49 + .github/ISSUE_TEMPLATE/epic.yml | 49 + .github/ISSUE_TEMPLATE/research.yml | 49 + .github/PULL_REQUEST_TEMPLATE.md | 33 + .github/workflows/ci.yml | 6 + .github/workflows/main-ci.yml | 2 + .github/workflows/pull-request-ci.yml | 2 + ROADMAP.md | 99 + docs/adr/0004-capability-matrix.md | 14 +- docs/engineering/ARCHIVE_RECONCILIATION.md | 52 + docs/engineering/CROSS_REPOSITORY_SEQUENCE.md | 29 + docs/engineering/EVIDENCE_AND_LIMITS.md | 36 + docs/engineering/GOVERNANCE.md | 39 + docs/engineering/PROJECT_CONFIGURATION.md | 34 + docs/engineering/README.md | 11 + docs/engineering/VALIDATION_PROTOCOL.md | 39 + docs/engineering/archive-reconciliation.json | 92 + docs/engineering/backlog.json | 2381 +++++++++++++++++ docs/engineering/work-items/CLI-001.md | 96 + docs/engineering/work-items/CLI-002.md | 96 + docs/engineering/work-items/CLI-003.md | 97 + docs/engineering/work-items/CLI-004.md | 94 + docs/engineering/work-items/CLI-005.md | 95 + docs/engineering/work-items/CLI-006.md | 95 + docs/engineering/work-items/CLI-007.md | 96 + docs/engineering/work-items/CLI-008.md | 100 + docs/engineering/work-items/CLI-009.md | 102 + docs/engineering/work-items/CLI-010.md | 98 + docs/engineering/work-items/CLI-011.md | 95 + docs/engineering/work-items/CLI-012.md | 96 + docs/engineering/work-items/CLI-013.md | 98 + docs/engineering/work-items/CLI-014.md | 98 + docs/engineering/work-items/CLI-015.md | 98 + docs/engineering/work-items/CLI-016.md | 98 + docs/engineering/work-items/CLI-017.md | 100 + docs/engineering/work-items/CLI-018.md | 98 + docs/engineering/work-items/CLI-019.md | 94 + docs/engineering/work-items/CLI-020.md | 96 + docs/engineering/work-items/CLI-021.md | 95 + docs/engineering/work-items/CLI-022.md | 100 + docs/engineering/work-items/CLI-023.md | 95 + docs/engineering/work-items/CLI-024.md | 99 + docs/engineering/work-items/CLI-E01.md | 96 + docs/engineering/work-items/CLI-E02.md | 92 + docs/engineering/work-items/CLI-E03.md | 96 + docs/engineering/work-items/CLI-E04.md | 93 + docs/engineering/work-items/CLI-E05.md | 95 + docs/engineering/work-items/CLI-E06.md | 93 + docs/engineering/work-items/CLI-E07.md | 92 + docs/engineering/work-items/CLI-E08.md | 96 + docs/engineering/work-items/CLI-PLAN.md | 97 + eng/Validate-EngineeringManifest.py | 415 +++ .../test_validate_engineering_manifest.py | 94 + 53 files changed, 6702 insertions(+), 2 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/engineering-work.yml create mode 100644 .github/ISSUE_TEMPLATE/epic.yml create mode 100644 .github/ISSUE_TEMPLATE/research.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 ROADMAP.md create mode 100644 docs/engineering/ARCHIVE_RECONCILIATION.md create mode 100644 docs/engineering/CROSS_REPOSITORY_SEQUENCE.md create mode 100644 docs/engineering/EVIDENCE_AND_LIMITS.md create mode 100644 docs/engineering/GOVERNANCE.md create mode 100644 docs/engineering/PROJECT_CONFIGURATION.md create mode 100644 docs/engineering/README.md create mode 100644 docs/engineering/VALIDATION_PROTOCOL.md create mode 100644 docs/engineering/archive-reconciliation.json create mode 100644 docs/engineering/backlog.json create mode 100644 docs/engineering/work-items/CLI-001.md create mode 100644 docs/engineering/work-items/CLI-002.md create mode 100644 docs/engineering/work-items/CLI-003.md create mode 100644 docs/engineering/work-items/CLI-004.md create mode 100644 docs/engineering/work-items/CLI-005.md create mode 100644 docs/engineering/work-items/CLI-006.md create mode 100644 docs/engineering/work-items/CLI-007.md create mode 100644 docs/engineering/work-items/CLI-008.md create mode 100644 docs/engineering/work-items/CLI-009.md create mode 100644 docs/engineering/work-items/CLI-010.md create mode 100644 docs/engineering/work-items/CLI-011.md create mode 100644 docs/engineering/work-items/CLI-012.md create mode 100644 docs/engineering/work-items/CLI-013.md create mode 100644 docs/engineering/work-items/CLI-014.md create mode 100644 docs/engineering/work-items/CLI-015.md create mode 100644 docs/engineering/work-items/CLI-016.md create mode 100644 docs/engineering/work-items/CLI-017.md create mode 100644 docs/engineering/work-items/CLI-018.md create mode 100644 docs/engineering/work-items/CLI-019.md create mode 100644 docs/engineering/work-items/CLI-020.md create mode 100644 docs/engineering/work-items/CLI-021.md create mode 100644 docs/engineering/work-items/CLI-022.md create mode 100644 docs/engineering/work-items/CLI-023.md create mode 100644 docs/engineering/work-items/CLI-024.md create mode 100644 docs/engineering/work-items/CLI-E01.md create mode 100644 docs/engineering/work-items/CLI-E02.md create mode 100644 docs/engineering/work-items/CLI-E03.md create mode 100644 docs/engineering/work-items/CLI-E04.md create mode 100644 docs/engineering/work-items/CLI-E05.md create mode 100644 docs/engineering/work-items/CLI-E06.md create mode 100644 docs/engineering/work-items/CLI-E07.md create mode 100644 docs/engineering/work-items/CLI-E08.md create mode 100644 docs/engineering/work-items/CLI-PLAN.md create mode 100644 eng/Validate-EngineeringManifest.py create mode 100644 eng/tests/test_validate_engineering_manifest.py diff --git a/.github/ISSUE_TEMPLATE/engineering-work.yml b/.github/ISSUE_TEMPLATE/engineering-work.yml new file mode 100644 index 0000000..9d77a17 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/engineering-work.yml @@ -0,0 +1,49 @@ +name: Engineering work item +description: Define an evidence-backed, owned and reviewable engineering outcome. +title: "[CLI] " +body: + - type: markdown + attributes: + value: | + Keep CE integration in SDK and application policy/workflows in Client. + Do not report fixture, source or AOT publication evidence as live-host qualification. + - type: textarea + id: outcome + attributes: + label: Outcome and owner + description: State the problem, owning layer, desired behavior and explicit exclusions. + validations: + required: true + - type: textarea + id: evidence + attributes: + label: Source and current behavior + description: Include pinned file/commit links and distinguish observations from hypotheses. + validations: + required: true + - type: textarea + id: scope + attributes: + label: Requirements and risks + description: Include ownership, target/lifecycle, cancellation, partial effects and compatibility. + validations: + required: true + - type: textarea + id: acceptance + attributes: + label: Acceptance criteria and validation + description: Specify executable checks, commands, fixtures and live gates; mark unexecuted tests. + validations: + required: true + - type: textarea + id: dependencies + attributes: + label: Parent, blockers and required artifacts + description: Link issues and exact containing SDK artifacts; also set native GitHub relationships. + validations: + required: true + - type: textarea + id: delivery + attributes: + label: Proposed branch, PR scope and documentation + description: Use a focused PR; do not auto-close upstream work or create an epic-sized change. diff --git a/.github/ISSUE_TEMPLATE/epic.yml b/.github/ISSUE_TEMPLATE/epic.yml new file mode 100644 index 0000000..6086b83 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/epic.yml @@ -0,0 +1,49 @@ +name: Engineering epic +description: Define an evidence-backed, owned and reviewable engineering outcome. +title: "[CLI] " +body: + - type: markdown + attributes: + value: | + Keep CE integration in SDK and application policy/workflows in Client. + Do not report fixture, source or AOT publication evidence as live-host qualification. + - type: textarea + id: outcome + attributes: + label: Outcome and owner + description: State the problem, owning layer, desired behavior and explicit exclusions. + validations: + required: true + - type: textarea + id: evidence + attributes: + label: Source and current behavior + description: Include pinned file/commit links and distinguish observations from hypotheses. + validations: + required: true + - type: textarea + id: scope + attributes: + label: Requirements and risks + description: Include ownership, target/lifecycle, cancellation, partial effects and compatibility. + validations: + required: true + - type: textarea + id: acceptance + attributes: + label: Acceptance criteria and validation + description: Specify executable checks, commands, fixtures and live gates; mark unexecuted tests. + validations: + required: true + - type: textarea + id: dependencies + attributes: + label: Parent, blockers and required artifacts + description: Link issues and exact containing SDK artifacts; also set native GitHub relationships. + validations: + required: true + - type: textarea + id: delivery + attributes: + label: Proposed branch, PR scope and documentation + description: Use a focused PR; do not auto-close upstream work or create an epic-sized change. diff --git a/.github/ISSUE_TEMPLATE/research.yml b/.github/ISSUE_TEMPLATE/research.yml new file mode 100644 index 0000000..fc03620 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/research.yml @@ -0,0 +1,49 @@ +name: Research and qualification +description: Define an evidence-backed, owned and reviewable engineering outcome. +title: "[CLI] " +body: + - type: markdown + attributes: + value: | + Keep CE integration in SDK and application policy/workflows in Client. + Do not report fixture, source or AOT publication evidence as live-host qualification. + - type: textarea + id: outcome + attributes: + label: Outcome and owner + description: State the problem, owning layer, desired behavior and explicit exclusions. + validations: + required: true + - type: textarea + id: evidence + attributes: + label: Source and current behavior + description: Include pinned file/commit links and distinguish observations from hypotheses. + validations: + required: true + - type: textarea + id: scope + attributes: + label: Requirements and risks + description: Include ownership, target/lifecycle, cancellation, partial effects and compatibility. + validations: + required: true + - type: textarea + id: acceptance + attributes: + label: Acceptance criteria and validation + description: Specify executable checks, commands, fixtures and live gates; mark unexecuted tests. + validations: + required: true + - type: textarea + id: dependencies + attributes: + label: Parent, blockers and required artifacts + description: Link issues and exact containing SDK artifacts; also set native GitHub relationships. + validations: + required: true + - type: textarea + id: delivery + attributes: + label: Proposed branch, PR scope and documentation + description: Use a focused PR; do not auto-close upstream work or create an epic-sized change. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..1a824b8 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,33 @@ +## Outcome and linked issue + +Closes + +## Scope and architectural ownership + +Describe resulting behavior, affected contracts, and exclusions. SDK owns CE integration; Client owns workflows and policy. + +## Dependencies and containing artifacts + +Link upstream prerequisites without closing them. Identify the SDK package containing every consumed primitive. + +## Validation actually performed + +| Check | Command / profile | Actual result | Evidence | +|---|---|---|---| +| Unit / fixture | | Not executed | | +| Packed consumer | | Not executed | | +| Live host | | Not executed | | +| AOT publication | | Not executed | | + +## Compatibility, lifetime and partial effects + +Explain public API or behavior changes, ownership, target switches, cleanup, cancellation and migration. + +## Documentation and review checklist + +- [ ] Scope is focused; existing repository style and contribution rules are preserved. +- [ ] Relevant regression evidence is attached; pending gates remain explicit. +- [ ] No raw state/owner escapes the normal Client boundary. +- [ ] Capability and artifact claims match actual results. +- [ ] Documentation and release impact are recorded. +- [ ] No automatic merge, release, protection change or unsupported capability activation is requested. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce9b073..3864c01 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,6 +37,12 @@ jobs: **/packages.lock.json Directory.Packages.props + - name: Validate engineering backlog and validator tests + run: | + python --version + python eng/Validate-EngineeringManifest.py + python -m unittest discover -s eng/tests -v + - name: Restore locked dependency graph run: dotnet restore CheatEngine.Client.slnx --locked-mode diff --git a/.github/workflows/main-ci.yml b/.github/workflows/main-ci.yml index 404b801..d824f3c 100644 --- a/.github/workflows/main-ci.yml +++ b/.github/workflows/main-ci.yml @@ -11,6 +11,8 @@ on: - 'Directory.Build.targets' - 'Directory.Packages.props' - 'README.md' + - 'ROADMAP.md' + - 'docs/**' - 'eng/**' - 'global.json' - 'libs/**' diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index aef0f7c..6eb8aa6 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -11,6 +11,8 @@ on: - 'Directory.Build.targets' - 'Directory.Packages.props' - 'README.md' + - 'ROADMAP.md' + - 'docs/**' - 'eng/**' - 'global.json' - 'libs/**' diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..41a0c4d --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,99 @@ +# CheatEngine.Client Roadmap + +**Planning baseline: September 21, 2026.** This is an outcome-based plan, not a delivery-date commitment. The initial preparation attempt was denied GitHub writes; the later operator-authorized deployment is recorded in [the engineering evidence receipt](docs/engineering/EVIDENCE_AND_LIMITS.md). The roadmap still does not imply product implementation, package publication, or live-host qualification. + +## Operating boundary + +SDK owns CE integration; Client owns developer-facing workflows. Independent reliability fixes need not wait for all SDK research. Source merged, package shipped, fixture passed and host qualified are separate gates. + +## Milestones + +| Phase | Outcome | Exit evidence | +|---|---|---| +| CLI-M0 | Governance and capability truth | Public status separates implementation, artifact, host qualification and policy. | +| CLI-M1 | Reliability and activation integrity | No-target, retained-codec and construction-rollback tests match production semantics. | +| CLI-M2 | SDK boundary adoption | Built-in integration delegates to shipped SDK contracts with preserved outcomes. | +| CLI-M3 | Modules and public API boundaries | Generated public contracts contain no raw state/owner escape; activation/module lifetime tested. | +| CLI-M4 | Workflow and fluent correctness | Cardinality, partial effects, budgets and fluent names are truthful and documented. | +| CLI-M5 | Evidence-gated advanced workflows | Only workflows with target/ownership/cleanup evidence are enabled. | +| CLI-M6 | Packaging and developer readiness | Clean consumer/template/deployment/live results independently recorded. | + +## Epics and implementable work + +### CLI-E01 — Governance and capability truth +Maintain the developer-facing support model and evidence-linked execution plan. + +| Work item | Priority | Prerequisites | +|---|---|---| +| [CLI-001](docs/engineering/work-items/CLI-001.md) — Reconcile Client audit evidence with source and consumed packages | P1 | Refinement and evidence; no declared issue blocker | +| [CLI-002](docs/engineering/work-items/CLI-002.md) — Separate capability implementation, host evidence, and policy | P1 | CLI-001 | +| [CLI-003](docs/engineering/work-items/CLI-003.md) — Adopt Client governance, roadmap, and issue-to-PR workflow | P1 | Refinement and evidence; no declared issue blocker | + +### CLI-E02 — Immediate reliability corrections +Repair classified failures, retained contexts, and partial activation cleanup independently of broad SDK expansion. + +| Work item | Priority | Prerequisites | +|---|---|---| +| [CLI-004](docs/engineering/work-items/CLI-004.md) — Align expected process failures with production dispatcher semantics | P1 | Refinement and evidence; no declared issue blocker | +| [CLI-005](docs/engineering/work-items/CLI-005.md) — Expire memory-codec contexts after each invocation | P1 | Refinement and evidence; no declared issue blocker | +| [CLI-006](docs/engineering/work-items/CLI-006.md) — Complete all activation rollback stages and preserve original errors | P1 | Refinement and evidence; no declared issue blocker | + +### CLI-E03 — SDK contract adoption +Replace duplicated built-in CE interpretation with the actual containing SDK artifacts. + +| Work item | Priority | Prerequisites | +|---|---|---| +| [CLI-007](docs/engineering/work-items/CLI-007.md) — Replace built-in CE Lua declarations with SDK semantic operations | P1 | SDK-008, SDK-023 | +| [CLI-008](docs/engineering/work-items/CLI-008.md) — Preserve SDK failure provenance and partial effect information | P1 | SDK-007, SDK-023 | +| [CLI-009](docs/engineering/work-items/CLI-009.md) — Bind Client workflows to authoritative SDK target identity | P1 | SDK-010, SDK-011, SDK-023 | + +### CLI-E04 — Modules, public boundaries, and activation composition +Keep application extensibility safe without leaking raw SDK state or duplicating registration mechanisms. + +| Work item | Priority | Prerequisites | +|---|---|---| +| [CLI-010](docs/engineering/work-items/CLI-010.md) — Use SDK registration leases for generated Lua modules | P1 | SDK-009, SDK-022, SDK-023, CLI-006 | +| [CLI-011](docs/engineering/work-items/CLI-011.md) — Enforce recursive public and generated API type boundaries | P1 | Refinement and evidence; no declared issue blocker | +| [CLI-012](docs/engineering/work-items/CLI-012.md) — Specify activation-local DI and multi-plugin composition | P2 | CLI-006, SDK-005 | + +### CLI-E05 — Memory, scan, and table workflows +Preserve cardinality, partial effects, limits and target consistency across friendly APIs. + +| Work item | Priority | Prerequisites | +|---|---|---| +| [CLI-013](docs/engineering/work-items/CLI-013.md) — Make AOB cardinality and result budgets truthful | P1 | SDK-014, SDK-023, CLI-008, CLI-009 | +| [CLI-014](docs/engineering/work-items/CLI-014.md) — Report memory batch effects and cancellation milestones | P1 | SDK-013, CLI-008, CLI-009, CLI-005 | +| [CLI-015](docs/engineering/work-items/CLI-015.md) — Adopt typed record and symbol commands with safe workflow policy | P1 | SDK-021, SDK-023, CLI-008, CLI-009 | + +### CLI-E06 — Qualified advanced workflow adoption +Enable scan, allocation, patch and event workflows only after their specific lower-layer gates. + +| Work item | Priority | Prerequisites | +|---|---|---| +| [CLI-016](docs/engineering/work-items/CLI-016.md) — Adopt qualified SDK value-scan sessions | P2 | SDK-015, SDK-023, CLI-009, CLI-002 | +| [CLI-017](docs/engineering/work-items/CLI-017.md) — Adopt target-bound allocation and patch leases | P1 | SDK-011, SDK-017, SDK-023, CLI-009, CLI-008 | +| [CLI-018](docs/engineering/work-items/CLI-018.md) — Define gated debugger and subscription workflow adapters | P2 | SDK-018, SDK-019, CLI-019, CLI-009 | + +### CLI-E07 — Developer experience and bounded observation +Define coherent lifetime, reader, completion and discoverability policies. + +| Work item | Priority | Prerequisites | +|---|---|---| +| [CLI-019](docs/engineering/work-items/CLI-019.md) — Bound event consumers and specify stream completion | P2 | Refinement and evidence; no declared issue blocker | +| [CLI-020](docs/engineering/work-items/CLI-020.md) — Standardize fluent terminals and supported workflow examples | P2 | CLI-002, CLI-013 | +| [CLI-021](docs/engineering/work-items/CLI-021.md) — Unify stale-client and local-process operation semantics | P2 | Refinement and evidence; no declared issue blocker | + +### CLI-E08 — Package, deployment, and release readiness +Validate actual packages, external consumers, deployment sets and measured end-to-end behavior. + +| Work item | Priority | Prerequisites | +|---|---|---| +| [CLI-022](docs/engineering/work-items/CLI-022.md) — Validate minimum SDK artifacts and public compatibility | P1 | SDK-023, CLI-007, CLI-010, CLI-011 | +| [CLI-023](docs/engineering/work-items/CLI-023.md) — Verify coherent deployment sets and external plugin inheritance | P2 | CLI-022 | +| [CLI-024](docs/engineering/work-items/CLI-024.md) — Publish end-to-end qualification and performance budgets | P2 | CLI-022, CLI-023, SDK-024 | + +## Execution notes + +A phase is an outcome grouping, not a global lock. A research task can proceed while an unrelated reliability fix ships. The graph specifies technical prerequisites; it does not estimate capacity. Before Client adoption, identify a package containing every required SDK primitive even when a prior SDK minimum-contract release is already complete. + +Create a branch only when a leaf is ready. Keep SDK and Client PRs separate; publish the containing SDK artifact before declaring dependent Client behavior supported. Parent issue closure is never inferred from a single child PR. diff --git a/docs/adr/0004-capability-matrix.md b/docs/adr/0004-capability-matrix.md index 35ec06a..0be6b3a 100644 --- a/docs/adr/0004-capability-matrix.md +++ b/docs/adr/0004-capability-matrix.md @@ -6,8 +6,18 @@ ## Context An interface alone does not establish that a Cheat Engine operation is safe to create, use, dispose, or repeat across -plugin activation. In particular, SDK 1.0.0 does not expose the ownership factory required for the Client to create and -adopt `MemScan` and `FoundList` instances without inventing an unverified handle-lifetime contract. +plugin activation. Source and package evidence must also be kept separate. The reviewed SDK source baseline +`aa3fcc3cdf629468e69d0c68817183d44a719894` contains +`CheatEngine.SDK.Engine.Scanning.Values.MemoryScanSessions.TryCreate`, whereas the released `CheatEngine.SDK` 1.0.0 +package consumed by Client does not expose that factory. The Client therefore cannot adopt `MemScan` and `FoundList` +instances from the released package without inventing an unverified handle-lifetime contract. + +| Evidence object | `MemoryScanSessions.TryCreate` | Client consequence | +|---|---|---| +| SDK source `aa3fcc3cdf629468e69d0c68817183d44a719894` | Present | A later SDK artifact may make an adoption path possible; source presence alone does not enable Client. | +| Released NuGet `CheatEngine.SDK` 1.0.0 | Absent | `IValueScanner` remains capability-gated. | + +The required Cheat Engine 7.7 x64 ownership and lifecycle qualification remains separate from both observations. ## Decision and why diff --git a/docs/engineering/ARCHIVE_RECONCILIATION.md b/docs/engineering/ARCHIVE_RECONCILIATION.md new file mode 100644 index 0000000..8bb6f6a --- /dev/null +++ b/docs/engineering/ARCHIVE_RECONCILIATION.md @@ -0,0 +1,52 @@ +# Architecture-Review Archive Reconciliation + +## Purpose and evidence boundary + +This document makes the supplied `CheatEngineNet_Architecture_Review_2026-09-21.zip` usable as a bounded, reproducible planning input. Its machine-readable counterpart is [archive-reconciliation.json](archive-reconciliation.json), which the repository validator checks. + +The archive is context. It is not a source checkout, a restored NuGet package, a generated consumer, or a Cheat Engine live run. Consequently, a capability can be source-observed while still failing the package or live gate. For example, the reviewed SDK source at `aa3fcc3cdf629468e69d0c68817183d44a719894` contains the later `MemoryScanSessions.TryCreate` work, whereas published `CheatEngine.SDK` 1.0.0 does not; [ADR 0004](../adr/0004-capability-matrix.md) keeps Client publication gated accordingly. + +## Archive identity and inventory + +| Item | Verified value | +|---|---| +| Archive file | `CheatEngineNet_Architecture_Review_2026-09-21.zip` | +| Archive SHA-256 | `fc1f178916ec14fb993e405018112ddedd8dc316a86aa6fe9251b42c09547802` | +| Internal content manifest | `SHA256SUMS.json` | +| Internal manifest SHA-256 | `a81aa3e52362eab942a4e1d211502958d70cb240f263072d6e39b87920440680` | +| Findings register | 36 canonical IDs, `R01`–`R36` | +| Qualification plan | 80 scenarios, all specified rather than executed | +| Ownership matrix | 32 rows | +| Capability matrix | 17 rows | + +The archive was independently checked with its supplied `tools/validate_package.py --require-manifest` command and Python test suite. The committed validator checks the recorded identity and complete finding crosswalk; it intentionally does not expect the archive to be present at a particular local path. + +## Findings-to-Client crosswalk + +The following groups cover each canonical finding exactly once. They point to the stable Client plan IDs rather than claim that a historical issue, ADR, or test ID has been recreated. + +| Group | Findings | Client execution items | +|---|---|---| +| Evidence and delivery | R17, R18, R19, R31, R32, R35, R36 | CLI-001, CLI-002, CLI-003, CLI-022, CLI-023, CLI-024 | +| Immediate corrections | R02, R03, R04, R12, R21 | CLI-004, CLI-005, CLI-006, CLI-021 | +| SDK contracts | R01, R08, R09, R10, R16 | CLI-007, CLI-008, CLI-010, CLI-011 | +| Identity and owners | R05, R06, R07, R20, R27 | CLI-009, CLI-016, CLI-017 | +| Bounded workflows | R11, R13, R14, R22, R28, R29 | CLI-013, CLI-014, CLI-015, CLI-020 | +| Advanced qualification | R15, R23, R24, R25, R26, R30, R33, R34 | CLI-012, CLI-018, CLI-019, CLI-023, CLI-024 | + +## Ownership and qualification sequence + +The archive ownership matrix assigns CE mappings, ABI safety, Lua protection, and low-level native owners to the SDK. Client owns activation policy, DI composition, typed workflows, and fluent public ergonomics. Package compatibility and live qualification are shared: the SDK supplies a supportable artifact and the Client verifies its actual consumer and plugin-host behavior. + +The planning order follows the archive roadmap: establish package and host identity; make process/dispatcher/rollback deterministic; consume the SDK contracts; add the higher-level workflows; qualify retained-resource ownership; then validate callbacks, deployment, multi-plugin behavior, and performance. The [cross-repository sequence](CROSS_REPOSITORY_SEQUENCE.md) and work-item dependency graph express the actionable edges. + +## Source, package, fixture, and live evidence + +| Evidence level | What it can establish | What it cannot establish | +|---|---|---| +| Source | An exact reviewed commit contains a code path or contract. | That a released package contains it or that a host can use it. | +| Package | The exact nupkg and generated consumer expose the qualified contract. | That it works with the selected Cheat Engine host. | +| Fixture | The declared controlled fixture exercised the stated behavior. | Broader host/version compatibility. | +| Live | The named CE 7.7 host and artifact passed the recorded scenario. | A universal compatibility or security guarantee. | + +No level may be silently promoted. The 80 archive scenarios remain `Specified_Not_Executed` until their actual environment, command, result, and cleanup evidence are recorded. See [the validation protocol](VALIDATION_PROTOCOL.md) for the repository and live qualification gates. diff --git a/docs/engineering/CROSS_REPOSITORY_SEQUENCE.md b/docs/engineering/CROSS_REPOSITORY_SEQUENCE.md new file mode 100644 index 0000000..5077845 --- /dev/null +++ b/docs/engineering/CROSS_REPOSITORY_SEQUENCE.md @@ -0,0 +1,29 @@ +# Cross-Repository Execution Sequence + +## Start with independent reliability work + +Client expected process failures, codec-context expiration and complete activation rollback can be refined immediately. They must not wait for the entire low-level research roadmap. This initial lane includes CLI-004, CLI-005 and CLI-006, followed by composed regression tests. Preserve the production dispatcher's intentional treatment of programming exceptions. + +## Establish the reusable SDK contract + +SDK-007 supplies factual outcomes. SDK-008 centralizes built-in runtime/process/symbol/table semantics. SDK-010 and SDK-011 establish target authority and safe resource handoff. SDK-012 qualifies Lua universe/state behavior. SDK-009 supplies ownership-aware registration. SDK-021 supplies record commands. SDK-022 compiles combined generated consumers; SDK-023 records the minimum containing artifact. + +These dependencies are not a demand for a giant PR. Contract, implementation, tests and migration can be reviewable slices. Keep each primitive's evidence and first containing package explicit. Registering a name, disposing an owner or reading an address must not independently reinterpret CE inside Client. + +## Adopt instead of bypass + +CLI-007/008/009 consume the SDK semantic/outcome/target contracts. CLI-010 consumes SDK registration safety while preserving Client composition policy. Existing stable SDK value types are allowed deliberately; raw Lua state, borrowed CE objects and native owners are not normal Client DTOs. CLI-011 protects nested generic and generated signatures. + +## Qualify vertical workflows + +AOB outcomes and scan workload are SDK-014; cardinality and copied-result budgets are CLI-013. Source presence of MemoryScanSessions does not close SDK-015 qualification, and the Client adapter remains gated until CLI-016 is accepted. Allocation and patch handoff depend on target identity and exact cleanup semantics; CLI-017 proposes separate allocation and patch PRs under one coherent adoption issue. + +SDK-018 owns debugger continuation and borrowed callback state. CLI-018 exposes copied observation and qualified synchronous decision interfaces, not a second debugger. CLI-019 independently bounds pending consumers and defines disposal. Dropping telemetry cannot discard a required native continuation decision. + +## Artifact gates do not disappear after the first release + +SDK-023 is the minimum contract artifact. A later SDK-017 or SDK-018 implementation may require a later package. Every consuming Client issue must name a package that contains all its actual prerequisites. “SDK task closed” and “some SDK package exists” are insufficient. No release number is assigned before the artifact is published and its contents verified. + +## Delivery links + +The machine-readable dependency list is `docs/engineering/backlog.json`: each item has `blocked_by` and `blocks`, while `external_dependencies` records SDK-to-Client edges. The deployed issue bodies and Project membership are a receipt, not proof that every native parent/dependency edge or saved Project view has been re-read. Verify those GitHub-specific relations separately before marking a work item ready. diff --git a/docs/engineering/EVIDENCE_AND_LIMITS.md b/docs/engineering/EVIDENCE_AND_LIMITS.md new file mode 100644 index 0000000..b268855 --- /dev/null +++ b/docs/engineering/EVIDENCE_AND_LIMITS.md @@ -0,0 +1,36 @@ +# Evidence, Provenance, and Deployment Receipt + +## Review inputs and limits + +The architecture-review archive supplied for this bootstrap was validated with its own SHA-256, JSON, Markdown-link, and Python-tool checks. Its identity, inventory, bounded finding crosswalk, and source/package/fixture/live boundary are recorded in [the archive reconciliation](ARCHIVE_RECONCILIATION.md). It provides the decision brief, findings, ownership/capability matrices, and qualification scenarios that shaped this plan. It is context rather than a source clone, a NuGet artifact, or live-host evidence: it does not establish a byte-for-byte import, exhaustive reconciliation of every historical finding, or a verified mapping to every original ADR/test ID. SDK-001 and CLI-001 explicitly retain that continuity work. New stable planning IDs are used instead of inventing original IDs. + +## Current repository observations + +| Repository | Main inspected | Relevant merged work | +|---|---|---| +| CheatEngine.SDK | `aa3fcc3cdf629468e69d0c68817183d44a719894` | PR #19: owned runtime primitives and generated Lua marshalling. | +| CheatEngine.Client | `923a4ded85898f53ef4cd2ff5872d2fd9001071a` | PR #7: fluent high-level APIs and generated Lua modules. | + +Both repositories reported no open issues/PRs at the initial metadata read; an organization issue search found no open issues in these two repositories. The SDK search returned eight historical issues, including closed NuGet/publication and documentation work. Those were not reopened. Main is protected. The metadata's user-level push/admin flags did not establish the active integration's effective write permissions. + +SDK CONTRIBUTING and AGENTS and the Client README were read in this bootstrap. Relevant .github/root metadata was inspected to preserve existing conventions. Most deep implementation references come from the prior review; they are marked `PriorAuditReference`, not misrepresented as newly executed or fully reread. The prior official CE comparison remains pinned to `ec45d5f47f92a239ba0bf51ec5d04a7509c3fd37`, not an inspected live CE 7.7 binary. + +## Deployment receipt as of September 21, 2026 + +The first preparation attempt received `Resource not accessible by integration`. That historical failure is not the final deployment state. A later operator-authorized import created and populated the private [CheatEngineNet — Engineering Execution Project](https://github.com/orgs/CheatEngineNet/projects/1): + +- the Client roadmap root is [#8](https://github.com/CheatEngineNet/CheatEngine.Client/issues/8), with epics [#9–#16](https://github.com/CheatEngineNet/CheatEngine.Client/issues/9) and leaves [#17–#40](https://github.com/CheatEngineNet/CheatEngine.Client/issues/17); +- the Project has the Client planning fields `CE Planning ID`, `CE Layer`, `CE Phase`, `CE Priority`, `CE Readiness`, `CE Start`, and `CE Target` in addition to GitHub built-ins; +- the root, epics, leaves, milestones, native hierarchy, and declared Client/SDK dependencies were read back after import. Their issue bodies contain stable `ce-bootstrap:` markers. + +This is a metadata receipt, not a product-validation result. Project views, workflow automation, and any subsequent human edits must be inspected in GitHub before a planning state is relied upon. + +## Tool coverage + +GitHub metadata is verified with authenticated repository tooling after the operator has authorized it. Repository files do not contain credentials, automation for Project mutation, or a claim that a local document can replace GitHub's current state. + +## Verification categories + +`ArchiveValidated`, `MetadataRead`, `PriorAuditReference`, `WebPrimary`, `Proposal`, `FixtureVerified` and `LiveVerified` are distinct. Planning records carry no FixtureVerified or LiveVerified status. Archive validation covers the archive package and its Python tests only; repository product validation is recorded separately with its exact commands and results. + +The archive is not a source clone. Existing implementation claims are credited, but qualification work must recheck exact source and actual containing package. Package version, source commit and assembly version remain separate identifiers. diff --git a/docs/engineering/GOVERNANCE.md b/docs/engineering/GOVERNANCE.md new file mode 100644 index 0000000..3e363cf --- /dev/null +++ b/docs/engineering/GOVERNANCE.md @@ -0,0 +1,39 @@ +# Engineering Operating Model + +## Authority and source of truth + +The versioned roadmap records intent, architecture, acceptance evidence and proposed sequencing. GitHub issues record current execution, decisions and delivery links. Pull requests contain reviewable changes. The organization Project aggregates those same issues; it is not a second copy of their specifications. Repository milestones are outcome groups. Epic issues are parents, not monolithic implementation tasks. + +The bootstrap manifest is the reviewed **initial import specification**, not a bot that continuously overwrites human refinement. Reruns reuse stable markers and leave existing issue bodies, checked tasks, assignments, states and dates untouched. Refinements belong in the issue and subsequent documentation PRs. Regenerate a new reviewed import only for genuinely new scope. + +## Definition of Ready + +A leaf is ready when the owner layer is unambiguous; the source call path has been revalidated; the desired behavior, exclusions and acceptance criteria are understood; blocking contracts have reached the required state; the containing SDK artifact is known for Client consumption; and the maintainer has accepted the PR scope. A lack of incoming graph edges alone does not make an issue ready. + +Research may start before an implementation prerequisite is complete when its scope is discovery rather than mutation. Record that distinction; do not remove a real delivery blocker merely to make a board look unblocked. Artifact publication and live-host qualification are independent from source merge. + +## Definition of Done + +Require a focused reviewed PR, exact validation commands and results, updated contract/support documentation, compatibility notes, and evidence that cleanup, failures and relevant target/activation transitions work. For source-only or fixture-only delivery, retain the remaining live gate explicitly. A public interface, merged class, green documentation check or AOT executable publish does not establish live CE support. + +An epic closes only when each child is completed with evidence or explicitly deferred through an accepted decision. A deferred capability is not delivered. The roadmap root is a navigation and acceptance record, not an issue every child PR should close. + +## Branch and PR policy + +Create one branch for a coherent leaf or clearly documented slice, not one per epic and not all proposed branches in advance. Target main through a PR. Preserve SDK CONTRIBUTING and AGENTS: focused imperative commits, no required Conventional Commit prefixes, no Co-authored-by trailers, no LINQ in C# production changes, and existing build/style rules. This bootstrap makes no protection or release-workflow changes. + +A PR closes only the issue it actually completes. Cross-repository prerequisites are references and blockers, not collateral closing directives. The intended sequence is SDK contract PR, containing SDK package, Client adapter PR, then declared profile qualification. There is no automatic merge, version tag, release or package publication in the tooling. + +## Priority and planning + +P1 protects an affected reliability or compatibility promise. P2 is near-term alignment or capability delivery. P3 is optional/exploratory scope requiring deliberate prioritization. These are not security severity levels. No effort points, assignees, dates or delivery versions are invented. Dates should be added only after capacity and dependency commitments are agreed. + +## Refinement cadence and exceptions + +Review blocked work, package availability, live evidence and narrow PR scope during normal team refinement. Temporary Client mappings require a SDK owner, issue, replacement artifact and removal condition. Do not introduce an indefinite “Core may do anything” exception. Respect intentional raw SDK expert access without exposing raw state or owners through normal Client APIs. + +## Sources + +- [SDK contribution rules](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/CONTRIBUTING.md) +- [SDK repository guidelines](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/AGENTS.md) +- [Client architecture and live gates](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) diff --git a/docs/engineering/PROJECT_CONFIGURATION.md b/docs/engineering/PROJECT_CONFIGURATION.md new file mode 100644 index 0000000..0f2ea87 --- /dev/null +++ b/docs/engineering/PROJECT_CONFIGURATION.md @@ -0,0 +1,34 @@ +# Organization Project Configuration + +## One shared execution Project + +The private organization [CheatEngineNet — Engineering Execution Project](https://github.com/orgs/CheatEngineNet/projects/1) contains the SDK and Client roadmap issues. Maintain separate SDK and Client table views rather than duplicating every issue into independently maintained planning boards. Each repository retains its own seven milestones and roadmap root. + +This repository deliberately does not ship a Project-mutating script or a second Project manifest. Project administration remains an explicit operator action: read the current metadata first, make a narrow GitHub change only when authorized, and retain the resulting issue/Project receipt. The local [`backlog.json`](backlog.json) is the reviewed source for Client planning IDs, fields, hierarchy, and dependency intent; it is not a remote-state synchronizer. + +## Fields + +Use built-in Status and repository/milestone data. Add CE Planning ID, CE Layer, CE Phase, CE Priority, CE Readiness, CE Start and CE Target. Readiness begins at Needs refinement; having no blocker does not automatically imply Ready. Contract, artifact and live gates are tracked explicitly in issues and reviewed before changing readiness. Dates remain empty until real capacity and sequencing commitments exist. + +## Saved views and remaining UI configuration + +| View | Layout | Selection | Purpose | +|---|---|---|---| +| SDK Backlog | Table | SDK repository | Group by milestone; show priority, readiness and dependencies. | +| Client Backlog | Table | Client repository | Show SDK blockers and exact package gates. | +| Cross-repository Board | Board | Open issues | Group by built-in Status; do not duplicate state into several label schemes. | +| Blocking Contracts | Table | Open issues | Display native dependency fields and separate artifact blockers. | +| Roadmap | Roadmap | Epic label | Use CE Start / CE Target only after dates are accepted. | + +The Project currently has the named CE fields. Grouping, sorting, roadmap date-field binding, saved-view configuration, and Project workflow automation remain explicit GitHub UI checks; they are not asserted by the local manifest validator. GitHub roadmap visualization requires date information, so an undated outcome plan must not manufacture dates just to fill a chart. + +## Operating guidance + +Keep completed issues in the Project unless the team approves archival behavior. Avoid automatic closure of epics or cross-repository issues on a child merge. Keep unsafe/unqualified capability work visible as deferred or gated, not silently removed. Do not add a new organization issue type globally just to represent an epic; the bootstrap uses ordinary issues, a dedicated label, and native hierarchy. + +## Sources + +- [Project creation](https://cli.github.com/manual/gh_project_create) +- [Field creation](https://cli.github.com/manual/gh_project_field-create) +- [Item editing](https://cli.github.com/manual/gh_project_item-edit) +- [Roadmap layout](https://docs.github.com/en/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/customizing-the-roadmap-layout) diff --git a/docs/engineering/README.md b/docs/engineering/README.md new file mode 100644 index 0000000..e588845 --- /dev/null +++ b/docs/engineering/README.md @@ -0,0 +1,11 @@ +# Engineering Reference + +Start with [the repository roadmap](../../ROADMAP.md) and the work-item specifications in `work-items/`. + +This documentation is the reviewed engineering baseline. GitHub issues and PR discussions become the execution record after deployment; the local manifest is not a continuous state-synchronization service and must not overwrite later human refinement. + +The package baseline is September 21, 2026. The original preparation session was denied GitHub write access, then an operator-authorized deployment created the recorded Project and issue set. The receipt is documented in [Evidence and limits](EVIDENCE_AND_LIMITS.md); documentation still does not prove native metadata or product qualification. + +Read [Governance](GOVERNANCE.md), [Evidence and limits](EVIDENCE_AND_LIMITS.md), [the archive reconciliation](ARCHIVE_RECONCILIATION.md), [Cross-repository sequencing](CROSS_REPOSITORY_SEQUENCE.md), and [Validation](VALIDATION_PROTOCOL.md). + +SDK owns integration facts, native safety, Lua protection and resource authority. Client owns developer workflows and policy. A contract in source, a published artifact and a live-tested capability are different evidence states. diff --git a/docs/engineering/VALIDATION_PROTOCOL.md b/docs/engineering/VALIDATION_PROTOCOL.md new file mode 100644 index 0000000..ba3f523 --- /dev/null +++ b/docs/engineering/VALIDATION_PROTOCOL.md @@ -0,0 +1,39 @@ +# Validation and Release Protocol + +## Package validation versus product validation + +Run the repository-owned structural gate for the delivered Client manifest and work-item documents: + +```powershell +python eng/Validate-EngineeringManifest.py +python -m unittest discover -s eng/tests -v +``` + +The supplied architecture-review archive has its own independent integrity check; run it from the extracted archive root: + +```powershell +python tools/validate_package.py . --require-manifest +python -m unittest discover -s tools/tests -v +``` + +The repository validator also checks the committed archive-reconciliation inventory: the archive identity, 36 finding IDs, 80 specified scenarios, ownership summary, and references to known Client items. It does not read an archive from a machine-specific path. These checks validate documentation/data/tool integrity only. They do not establish that either .NET repository builds or that a Cheat Engine plugin works. Product validation uses the commands in the repository [README](../../README.md), and acceptance records begin with Not executed until their actual evidence is attached. + +## Source and fixture gates + +Recheck the exact call path before implementing an inherited audit observation. The process Try failure test must compose the production dispatcher behavior; a fake that catches a different exception cannot validate the seam. Runtime probes must distinguish missing global from a present throwing function. AOB must distinguish a qualified no-match shape from Lua/global/userdata failures. Retained codec contexts must fail before SDK entry after the invocation expires. + +Inject failures before native mutation, after native success, before owner publication, during each cleanup stage and after mutation before snapshot refresh. Report partial effects and uncertain cleanup; do not assume false means nothing happened. Two target fixtures must prove that old owners never release into a newly selected process. + +## Package and generated consumer gates + +Use shipped packages in clean consumers, not sibling project references. Record content hashes and bridge/generator identity. Test minimum and selected later SDK versions; the version range is not a claim that every possible intermediate package was tested. Compile generated code and inspect public nested types rather than relying only on emitted text or shallow reflection tests. + +## Live and performance gates + +Record host executable, Lua/bridge identity, OS/architecture, target profile and exact plugin artifacts. Include enable/failure/disable/re-enable, target changes and simultaneous plugins. A standalone AOT executable publish is not a native plugin load/unload test. Explicitly retain unavailable support when the live gate is missing. + +Benchmark direct SDK, immediate/queued Client, primitive/batch/codec/snapshot/AOB/event and cleanup paths separately. Record managed bytes, native/Lua measures when available, boundary-call counts and latency distributions. Preserve target, cancellation, outcome and ownership semantics. No performance values are supplied by this bootstrap. + +## GitHub deployment verification + +Read back each issue marker and milestone, all native parents and blocking edges, the two documentation branch trees and draft PRs. The optional Project verifier checks membership, configured fields and saved-view names/layouts/filters. Grouping, roadmap date-field binding and automation remain manual checks. Preserve the receipt when a run stops. A partial run is not transactionally rolled back or relabeled successful. diff --git a/docs/engineering/archive-reconciliation.json b/docs/engineering/archive-reconciliation.json new file mode 100644 index 0000000..a3eb112 --- /dev/null +++ b/docs/engineering/archive-reconciliation.json @@ -0,0 +1,92 @@ +{ + "schema_version": 1, + "archive": { + "file_name": "CheatEngineNet_Architecture_Review_2026-09-21.zip", + "sha256": "fc1f178916ec14fb993e405018112ddedd8dc316a86aa6fe9251b42c09547802", + "content_manifest": "SHA256SUMS.json", + "content_manifest_sha256": "a81aa3e52362eab942a4e1d211502958d70cb240f263072d6e39b87920440680" + }, + "baselines": { + "client_source": "923a4ded85898f53ef4cd2ff5872d2fd9001071a", + "sdk_source": "aa3fcc3cdf629468e69d0c68817183d44a719894", + "sdk_published_package": "1.0.0", + "target_profile": "Cheat Engine 7.7, Windows x64" + }, + "counts": { + "findings": 36, + "specified_product_scenarios": 80, + "ownership_rows": 32, + "capability_rows": 17 + }, + "evidence_levels": [ + "source", + "package", + "fixture", + "live" + ], + "ownership_summary": [ + { + "area": "Cheat Engine mappings, native ABI safety, Lua protection, and low-level native owners", + "owner": "SDK", + "client_boundary": "Client consumes only supported SDK contracts; it does not reproduce ABI, longjmp, bootstrap, or native-owner mechanics." + }, + { + "area": "Activation workflow, DI composition, policy, and public fluent ergonomics", + "owner": "Client", + "client_boundary": "Client owns application-facing lifecycle policy and expresses SDK-backed workflows without leaking SDK handles." + }, + { + "area": "Package compatibility, generated-consumer proof, and plugin-host qualification", + "owner": "Shared", + "client_boundary": "SDK supplies the package contract; Client validates its consumer graph. A source observation is not package or live proof." + }, + { + "area": "Fixture and live Cheat Engine qualification", + "owner": "Shared", + "client_boundary": "Client scenarios run only after the corresponding SDK source and package prerequisites are established." + } + ], + "finding_groups": [ + { + "id": "evidence-and-delivery", + "description": "Provenance, package identity, generated-consumer, deployment, and capability evidence are planned through the evidence and qualification leaves.", + "findings": ["R17", "R18", "R19", "R31", "R32", "R35", "R36"], + "client_items": ["CLI-001", "CLI-002", "CLI-003", "CLI-022", "CLI-023", "CLI-024"] + }, + { + "id": "immediate-corrections", + "description": "Activation ownership, deterministic rollback, dispatcher behavior, and runtime capability checks are sequenced before high-level workflows.", + "findings": ["R02", "R03", "R04", "R12", "R21"], + "client_items": ["CLI-004", "CLI-005", "CLI-006", "CLI-021"] + }, + { + "id": "sdk-contracts", + "description": "Client-facing processes, runtime diagnostics, failure mapping, and public contracts remain gated on their upstream SDK contracts.", + "findings": ["R01", "R08", "R09", "R10", "R16"], + "client_items": ["CLI-007", "CLI-008", "CLI-010", "CLI-011"] + }, + { + "id": "identity-and-owners", + "description": "Target identity changes, retained resources, scanning, and patch ownership are bounded as Client workflows over SDK-native ownership.", + "findings": ["R05", "R06", "R07", "R20", "R27"], + "client_items": ["CLI-009", "CLI-016", "CLI-017"] + }, + { + "id": "bounded-workflows", + "description": "Memory codecs, AOB/value scan behavior, tables, configuration policy, and destructive-operation bounds remain explicit consumer responsibilities.", + "findings": ["R11", "R13", "R14", "R22", "R28", "R29"], + "client_items": ["CLI-013", "CLI-014", "CLI-015", "CLI-020"] + }, + { + "id": "advanced-qualification", + "description": "Callbacks, reentrancy, generated modules, AOT, performance, plugin coexistence, and registration are qualified only at their dedicated later gates.", + "findings": ["R15", "R23", "R24", "R25", "R26", "R30", "R33", "R34"], + "client_items": ["CLI-012", "CLI-018", "CLI-019", "CLI-023", "CLI-024"] + } + ], + "not_proof": [ + "The reconciliation does not attest that the archive is a source clone or that its source observations appear in a published package.", + "The reconciliation does not mark any of the 80 scenarios as fixture- or live-executed.", + "The reconciliation does not replace the controlled Cheat Engine 7.7 live qualification gate." + ] +} diff --git a/docs/engineering/backlog.json b/docs/engineering/backlog.json new file mode 100644 index 0000000..d68115e --- /dev/null +++ b/docs/engineering/backlog.json @@ -0,0 +1,2381 @@ +{ + "schema_version": 1, + "bootstrap_id": "ce-engineering-2026-09-21", + "repository": { + "key": "client", + "repository": "CheatEngineNet/CheatEngine.Client", + "baseline": "923a4ded85898f53ef4cd2ff5872d2fd9001071a", + "default_branch": "main", + "bootstrap_branch": "chore/engineering-bootstrap-2026-09-21", + "docs_root": "docs/engineering", + "prefix": "CLI" + }, + "items": [ + { + "id": "CLI-PLAN", + "repository_key": "client", + "kind": "roadmap", + "title": "Establish the Client developer-workflow roadmap and execution baseline", + "parent": null, + "epic": null, + "milestone": null, + "priority": "P1", + "observation": "This is the navigation root for the engineering bootstrap, not an implemented feature or a GitHub Project object.", + "objective": "Connect outcome milestones, owned epics, implementable issues, source evidence, package gates and focused PRs.", + "requirements": [ + "Keep one owning repository per implementation task.", + "Keep hierarchy, blocking dependencies, package gates and release qualification distinct.", + "Never close this root automatically from one child implementation PR." + ], + "acceptance": [ + "Every work item links to its owning epic and verified sources.", + "Native GitHub relationships and deployment status are recorded accurately.", + "No speculative due dates, assignees, release versions or live-verification results are assigned." + ], + "tests": [ + "Manifest integrity, hierarchy and cross-repository dependency validation." + ], + "risks": "An attractive board cannot substitute for precise contracts, acceptance evidence, and maintainable issue scopes.", + "blocked_by": [], + "sources": [ + "S01", + "C01", + "G01", + "G02", + "G03", + "G04" + ], + "branch": null, + "pr_title": null, + "scope_exclusions": [ + "No automatic implementation branch farm, auto-merge, release or protection change." + ], + "completion_artifacts": [ + "Navigable roadmap, detailed backlog and verified deployment receipt." + ], + "mandatory": "Governance root; close only when the defined roadmap scope is accepted or deliberately superseded.", + "evidence": "Proposal; initial GitHub writes were denied by the integration.", + "children": [ + "CLI-E01", + "CLI-E02", + "CLI-E03", + "CLI-E04", + "CLI-E05", + "CLI-E06", + "CLI-E07", + "CLI-E08" + ], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:roadmap", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-PLAN.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Connect outcome milestones, owned epics, implementable issues, source evidence, package gates and focused PRs.", + "body_template": "\n\n## CLI-PLAN — Establish the Client developer-workflow roadmap and execution baseline\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** roadmap · **Priority:** P1 · **Milestone:** Cross-phase navigation\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThis is the navigation root for the engineering bootstrap, not an implemented feature or a GitHub Project object.\n\n**Evidence classification:** Proposal; initial GitHub writes were denied by the integration.\n\n### Outcome and rationale\n\nConnect outcome milestones, owned epics, implementable issues, source evidence, package gates and focused PRs.\n\n**Expected benefit:** Connect outcome milestones, owned epics, implementable issues, source evidence, package gates and focused PRs.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Keep one owning repository per implementation task.\n- [ ] Keep hierarchy, blocking dependencies, package gates and release qualification distinct.\n- [ ] Never close this root automatically from one child implementation PR.\n\n### Acceptance criteria\n\n- [ ] Every work item links to its owning epic and verified sources.\n- [ ] Native GitHub relationships and deployment status are recorded accurately.\n- [ ] No speculative due dates, assignees, release versions or live-verification results are assigned.\n\n### Required validation\n\n- [ ] Manifest integrity, hierarchy and cross-repository dependency validation.\n\n### Scope exclusions\n\n- No automatic implementation branch farm, auto-merge, release or protection change.\n\n### Parent and children\n\nRepository roadmap root; not a GitHub Projects object.\n\n- {{issue:CLI-E01}}\n- {{issue:CLI-E02}}\n- {{issue:CLI-E03}}\n- {{issue:CLI-E04}}\n- {{issue:CLI-E05}}\n- {{issue:CLI-E06}}\n- {{issue:CLI-E07}}\n- {{issue:CLI-E08}}\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nNo epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository.\n\n### Risks and compatibility\n\nAn attractive board cannot substitute for precise contracts, acceptance evidence, and maintainable issue scopes.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Navigable roadmap, detailed backlog and verified deployment receipt.\n\nGovernance root; close only when the defined roadmap scope is accepted or deliberately superseded.\n\n### Sources\n\n- [S01 — Existing build/test, focused branches and release rules; preserve rather than overwrite.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/CONTRIBUTING.md)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [G01 — Issue API; filter pull_request entries from issue lists.](https://docs.github.com/en/rest/issues/issues)\n- [G02 — Repository-specific milestones.](https://docs.github.com/en/rest/issues/milestones)\n- [G03 — Native hierarchy uses issue IDs, not issue numbers.](https://docs.github.com/en/rest/issues/sub-issues)\n- [G04 — Native blocked-by relationship with the blocker issue_id.](https://docs.github.com/en/rest/issues/issue-dependencies)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-E01", + "repository_key": "client", + "kind": "epic", + "title": "Governance and capability truth", + "parent": "CLI-PLAN", + "epic": null, + "milestone": "CLI-M0", + "priority": "P1", + "observation": "This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.", + "objective": "Maintain the developer-facing support model and evidence-linked execution plan.", + "requirements": [ + "Review child source evidence and preserve the SDK/Client responsibility boundary.", + "Sequence only real dependencies; do not block a child on closing its own parent.", + "Require an explicit decision and evidence for any deferred capability." + ], + "acceptance": [ + "Each child is completed with evidence or explicitly deferred by an approved decision.", + "Cross-repository artifact gates have named versions and hashes when adopted.", + "Compatibility and support documentation match actual delivery, not interface count." + ], + "tests": [ + "Review the acceptance evidence of each child; do not count parent closure as an additional runtime test." + ], + "risks": "A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.", + "blocked_by": [], + "sources": [ + "C01", + "C19", + "H02", + "H01", + "C09", + "C14", + "G01", + "G02", + "G03", + "G04" + ], + "branch": null, + "pr_title": null, + "scope_exclusions": [ + "No monolithic epic implementation PR." + ], + "completion_artifacts": [ + "Linked child PRs, tests, and a final scope/deferral review." + ], + "mandatory": "Outcome group; optional scope remains explicitly gated or deferred.", + "evidence": "Proposal derived from the attached summaries and pinned source references.", + "children": [ + "CLI-001", + "CLI-002", + "CLI-003" + ], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:epic", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-E01.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Maintain the developer-facing support model and evidence-linked execution plan.", + "body_template": "\n\n## CLI-E01 — Governance and capability truth\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M0\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThis grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.\n\n**Evidence classification:** Proposal derived from the attached summaries and pinned source references.\n\n### Outcome and rationale\n\nMaintain the developer-facing support model and evidence-linked execution plan.\n\n**Expected benefit:** Maintain the developer-facing support model and evidence-linked execution plan.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary.\n- [ ] Sequence only real dependencies; do not block a child on closing its own parent.\n- [ ] Require an explicit decision and evidence for any deferred capability.\n\n### Acceptance criteria\n\n- [ ] Each child is completed with evidence or explicitly deferred by an approved decision.\n- [ ] Cross-repository artifact gates have named versions and hashes when adopted.\n- [ ] Compatibility and support documentation match actual delivery, not interface count.\n\n### Required validation\n\n- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test.\n\n### Scope exclusions\n\n- No monolithic epic implementation PR.\n\n### Parent and children\n\nParent: {{issue:CLI-PLAN}}\n\n- {{issue:CLI-001}}\n- {{issue:CLI-002}}\n- {{issue:CLI-003}}\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nNo epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository.\n\n### Risks and compatibility\n\nA grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Linked child PRs, tests, and a final scope/deferral review.\n\nOutcome group; optional scope remains explicitly gated or deferred.\n\n### Sources\n\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json)\n- [H02 — Merged high-level API/modules; preserve this work.](https://github.com/CheatEngineNet/CheatEngine.Client/pull/7)\n- [H01 — Merged foundations; author-reported tests are not independently executed.](https://github.com/CheatEngineNet/CheatEngine.SDK/pull/19)\n- [C09 — Prior audit: capability and exception-family mismatch.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/RuntimeClient.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n- [G01 — Issue API; filter pull_request entries from issue lists.](https://docs.github.com/en/rest/issues/issues)\n- [G02 — Repository-specific milestones.](https://docs.github.com/en/rest/issues/milestones)\n- [G03 — Native hierarchy uses issue IDs, not issue numbers.](https://docs.github.com/en/rest/issues/sub-issues)\n- [G04 — Native blocked-by relationship with the blocker issue_id.](https://docs.github.com/en/rest/issues/issue-dependencies)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-E02", + "repository_key": "client", + "kind": "epic", + "title": "Immediate reliability corrections", + "parent": "CLI-PLAN", + "epic": null, + "milestone": "CLI-M1", + "priority": "P1", + "observation": "This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.", + "objective": "Repair classified failures, retained contexts, and partial activation cleanup independently of broad SDK expansion.", + "requirements": [ + "Review child source evidence and preserve the SDK/Client responsibility boundary.", + "Sequence only real dependencies; do not block a child on closing its own parent.", + "Require an explicit decision and evidence for any deferred capability." + ], + "acceptance": [ + "Each child is completed with evidence or explicitly deferred by an approved decision.", + "Cross-repository artifact gates have named versions and hashes when adopted.", + "Compatibility and support documentation match actual delivery, not interface count." + ], + "tests": [ + "Review the acceptance evidence of each child; do not count parent closure as an additional runtime test." + ], + "risks": "A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.", + "blocked_by": [], + "sources": [ + "C05", + "C06", + "C03", + "C04", + "C07", + "C14" + ], + "branch": null, + "pr_title": null, + "scope_exclusions": [ + "No monolithic epic implementation PR." + ], + "completion_artifacts": [ + "Linked child PRs, tests, and a final scope/deferral review." + ], + "mandatory": "Outcome group; optional scope remains explicitly gated or deferred.", + "evidence": "Proposal derived from the attached summaries and pinned source references.", + "children": [ + "CLI-004", + "CLI-005", + "CLI-006" + ], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:epic", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-E02.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Repair classified failures, retained contexts, and partial activation cleanup independently of broad SDK expansion.", + "body_template": "\n\n## CLI-E02 — Immediate reliability corrections\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M1\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThis grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.\n\n**Evidence classification:** Proposal derived from the attached summaries and pinned source references.\n\n### Outcome and rationale\n\nRepair classified failures, retained contexts, and partial activation cleanup independently of broad SDK expansion.\n\n**Expected benefit:** Repair classified failures, retained contexts, and partial activation cleanup independently of broad SDK expansion.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary.\n- [ ] Sequence only real dependencies; do not block a child on closing its own parent.\n- [ ] Require an explicit decision and evidence for any deferred capability.\n\n### Acceptance criteria\n\n- [ ] Each child is completed with evidence or explicitly deferred by an approved decision.\n- [ ] Cross-repository artifact gates have named versions and hashes when adopted.\n- [ ] Compatibility and support documentation match actual delivery, not interface count.\n\n### Required validation\n\n- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test.\n\n### Scope exclusions\n\n- No monolithic epic implementation PR.\n\n### Parent and children\n\nParent: {{issue:CLI-PLAN}}\n\n- {{issue:CLI-004}}\n- {{issue:CLI-005}}\n- {{issue:CLI-006}}\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nNo epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository.\n\n### Risks and compatibility\n\nA grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Linked child PRs, tests, and a final scope/deferral review.\n\nOutcome group; optional scope remains explicitly gated or deferred.\n\n### Sources\n\n- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs)\n- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs)\n- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs)\n- [C04 — Public extension context with an implementation-enforced lifetime.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/Memory/IMemoryReadContext.cs)\n- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-E03", + "repository_key": "client", + "kind": "epic", + "title": "SDK contract adoption", + "parent": "CLI-PLAN", + "epic": null, + "milestone": "CLI-M2", + "priority": "P1", + "observation": "This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.", + "objective": "Replace duplicated built-in CE interpretation with the actual containing SDK artifacts.", + "requirements": [ + "Review child source evidence and preserve the SDK/Client responsibility boundary.", + "Sequence only real dependencies; do not block a child on closing its own parent.", + "Require an explicit decision and evidence for any deferred capability." + ], + "acceptance": [ + "Each child is completed with evidence or explicitly deferred by an approved decision.", + "Cross-repository artifact gates have named versions and hashes when adopted.", + "Compatibility and support documentation match actual delivery, not interface count." + ], + "tests": [ + "Review the acceptance evidence of each child; do not count parent closure as an additional runtime test." + ], + "risks": "A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.", + "blocked_by": [], + "sources": [ + "C02", + "C09", + "C19", + "C03", + "C13", + "C11", + "N03", + "C08", + "C06", + "C05" + ], + "branch": null, + "pr_title": null, + "scope_exclusions": [ + "No monolithic epic implementation PR." + ], + "completion_artifacts": [ + "Linked child PRs, tests, and a final scope/deferral review." + ], + "mandatory": "Outcome group; optional scope remains explicitly gated or deferred.", + "evidence": "Proposal derived from the attached summaries and pinned source references.", + "children": [ + "CLI-007", + "CLI-008", + "CLI-009" + ], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:epic", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-E03.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Replace duplicated built-in CE interpretation with the actual containing SDK artifacts.", + "body_template": "\n\n## CLI-E03 — SDK contract adoption\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M2\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThis grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.\n\n**Evidence classification:** Proposal derived from the attached summaries and pinned source references.\n\n### Outcome and rationale\n\nReplace duplicated built-in CE interpretation with the actual containing SDK artifacts.\n\n**Expected benefit:** Replace duplicated built-in CE interpretation with the actual containing SDK artifacts.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary.\n- [ ] Sequence only real dependencies; do not block a child on closing its own parent.\n- [ ] Require an explicit decision and evidence for any deferred capability.\n\n### Acceptance criteria\n\n- [ ] Each child is completed with evidence or explicitly deferred by an approved decision.\n- [ ] Cross-repository artifact gates have named versions and hashes when adopted.\n- [ ] Compatibility and support documentation match actual delivery, not interface count.\n\n### Required validation\n\n- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test.\n\n### Scope exclusions\n\n- No monolithic epic implementation PR.\n\n### Parent and children\n\nParent: {{issue:CLI-PLAN}}\n\n- {{issue:CLI-007}}\n- {{issue:CLI-008}}\n- {{issue:CLI-009}}\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nNo epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository.\n\n### Risks and compatibility\n\nA grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Linked child PRs, tests, and a final scope/deferral review.\n\nOutcome group; optional scope remains explicitly gated or deferred.\n\n### Sources\n\n- [C02 — Prior audit: built-in CE Lua declarations remain Client-owned.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/ClientLuaGlobals.cs)\n- [C09 — Prior audit: capability and exception-family mismatch.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/RuntimeClient.cs)\n- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json)\n- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs)\n- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs)\n- [C11 — Prior audit: SDK delegation but ambiguous false becomes rejection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkAobScanPort.cs)\n- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes)\n- [C08 — Prior audit: local observed epoch is not authoritative target identity.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/TargetSelectionLifetime.cs)\n- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs)\n- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-E04", + "repository_key": "client", + "kind": "epic", + "title": "Modules, public boundaries, and activation composition", + "parent": "CLI-PLAN", + "epic": null, + "milestone": "CLI-M3", + "priority": "P1", + "observation": "This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.", + "objective": "Keep application extensibility safe without leaking raw SDK state or duplicating registration mechanisms.", + "requirements": [ + "Review child source evidence and preserve the SDK/Client responsibility boundary.", + "Sequence only real dependencies; do not block a child on closing its own parent.", + "Require an explicit decision and evidence for any deferred capability." + ], + "acceptance": [ + "Each child is completed with evidence or explicitly deferred by an approved decision.", + "Cross-repository artifact gates have named versions and hashes when adopted.", + "Compatibility and support documentation match actual delivery, not interface count." + ], + "tests": [ + "Review the acceptance evidence of each child; do not count parent closure as an additional runtime test." + ], + "risks": "A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.", + "blocked_by": [], + "sources": [ + "C13", + "S06", + "C07", + "C20", + "N03", + "C14", + "S08" + ], + "branch": null, + "pr_title": null, + "scope_exclusions": [ + "No monolithic epic implementation PR." + ], + "completion_artifacts": [ + "Linked child PRs, tests, and a final scope/deferral review." + ], + "mandatory": "Outcome group; optional scope remains explicitly gated or deferred.", + "evidence": "Proposal derived from the attached summaries and pinned source references.", + "children": [ + "CLI-010", + "CLI-011", + "CLI-012" + ], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:epic", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-E04.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Keep application extensibility safe without leaking raw SDK state or duplicating registration mechanisms.", + "body_template": "\n\n## CLI-E04 — Modules, public boundaries, and activation composition\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M3\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThis grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.\n\n**Evidence classification:** Proposal derived from the attached summaries and pinned source references.\n\n### Outcome and rationale\n\nKeep application extensibility safe without leaking raw SDK state or duplicating registration mechanisms.\n\n**Expected benefit:** Keep application extensibility safe without leaking raw SDK state or duplicating registration mechanisms.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary.\n- [ ] Sequence only real dependencies; do not block a child on closing its own parent.\n- [ ] Require an explicit decision and evidence for any deferred capability.\n\n### Acceptance criteria\n\n- [ ] Each child is completed with evidence or explicitly deferred by an approved decision.\n- [ ] Cross-repository artifact gates have named versions and hashes when adopted.\n- [ ] Compatibility and support documentation match actual delivery, not interface count.\n\n### Required validation\n\n- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test.\n\n### Scope exclusions\n\n- No monolithic epic implementation PR.\n\n### Parent and children\n\nParent: {{issue:CLI-PLAN}}\n\n- {{issue:CLI-010}}\n- {{issue:CLI-011}}\n- {{issue:CLI-012}}\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nNo epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository.\n\n### Risks and compatibility\n\nA grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Linked child PRs, tests, and a final scope/deferral review.\n\nOutcome group; optional scope remains explicitly gated or deferred.\n\n### Sources\n\n- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs)\n- [S06 — Prior audit: generation stamps but name-based unregister.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/source-generators/CheatEngine.SDK.SourceGenerators.Shared/LuaEmit/LuaRegistrationEmitter.cs)\n- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs)\n- [C20 — Prior audit: approved SDK values versus broad compile/runtime dependency.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/CheatEngine.Client.Abstractions.csproj)\n- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n- [S08 — Prior audit: static host state and runtime admission.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Hosting/Bootstrap/PluginHost.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-E05", + "repository_key": "client", + "kind": "epic", + "title": "Memory, scan, and table workflows", + "parent": "CLI-PLAN", + "epic": null, + "milestone": "CLI-M4", + "priority": "P1", + "observation": "This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.", + "objective": "Preserve cardinality, partial effects, limits and target consistency across friendly APIs.", + "requirements": [ + "Review child source evidence and preserve the SDK/Client responsibility boundary.", + "Sequence only real dependencies; do not block a child on closing its own parent.", + "Require an explicit decision and evidence for any deferred capability." + ], + "acceptance": [ + "Each child is completed with evidence or explicitly deferred by an approved decision.", + "Cross-repository artifact gates have named versions and hashes when adopted.", + "Compatibility and support documentation match actual delivery, not interface count." + ], + "tests": [ + "Review the acceptance evidence of each child; do not count parent closure as an additional runtime test." + ], + "risks": "A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.", + "blocked_by": [], + "sources": [ + "C10", + "C11", + "C16", + "C03", + "C05", + "C01", + "C12", + "C18", + "C02" + ], + "branch": null, + "pr_title": null, + "scope_exclusions": [ + "No monolithic epic implementation PR." + ], + "completion_artifacts": [ + "Linked child PRs, tests, and a final scope/deferral review." + ], + "mandatory": "Outcome group; optional scope remains explicitly gated or deferred.", + "evidence": "Proposal derived from the attached summaries and pinned source references.", + "children": [ + "CLI-013", + "CLI-014", + "CLI-015" + ], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:epic", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-E05.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Preserve cardinality, partial effects, limits and target consistency across friendly APIs.", + "body_template": "\n\n## CLI-E05 — Memory, scan, and table workflows\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M4\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThis grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.\n\n**Evidence classification:** Proposal derived from the attached summaries and pinned source references.\n\n### Outcome and rationale\n\nPreserve cardinality, partial effects, limits and target consistency across friendly APIs.\n\n**Expected benefit:** Preserve cardinality, partial effects, limits and target consistency across friendly APIs.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary.\n- [ ] Sequence only real dependencies; do not block a child on closing its own parent.\n- [ ] Require an explicit decision and evidence for any deferred capability.\n\n### Acceptance criteria\n\n- [ ] Each child is completed with evidence or explicitly deferred by an approved decision.\n- [ ] Cross-repository artifact gates have named versions and hashes when adopted.\n- [ ] Compatibility and support documentation match actual delivery, not interface count.\n\n### Required validation\n\n- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test.\n\n### Scope exclusions\n\n- No monolithic epic implementation PR.\n\n### Parent and children\n\nParent: {{issue:CLI-PLAN}}\n\n- {{issue:CLI-013}}\n- {{issue:CLI-014}}\n- {{issue:CLI-015}}\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nNo epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository.\n\n### Risks and compatibility\n\nA grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Linked child PRs, tests, and a final scope/deferral review.\n\nOutcome group; optional scope remains explicitly gated or deferred.\n\n### Sources\n\n- [C10 — Prior audit: whole scan precedes module lookup and post-filtering.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/PatternScanner.cs)\n- [C11 — Prior audit: SDK delegation but ambiguous false becomes rejection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkAobScanPort.cs)\n- [C16 — Prior audit: immutable terminals, post-filter limits, readability naming.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Fluent/Scanning/AobScanBuilder.cs)\n- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs)\n- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [C12 — Prior audit: Parent/destroy semantics and mutation/snapshot ambiguity.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkTableRecordMutationPort.cs)\n- [C18 — Prior audit: table-root allowlist and documented path TOCTOU limitation.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/CoreClientPolicy.cs)\n- [C02 — Prior audit: built-in CE Lua declarations remain Client-owned.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/ClientLuaGlobals.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-E06", + "repository_key": "client", + "kind": "epic", + "title": "Qualified advanced workflow adoption", + "parent": "CLI-PLAN", + "epic": null, + "milestone": "CLI-M5", + "priority": "P1", + "observation": "This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.", + "objective": "Enable scan, allocation, patch and event workflows only after their specific lower-layer gates.", + "requirements": [ + "Review child source evidence and preserve the SDK/Client responsibility boundary.", + "Sequence only real dependencies; do not block a child on closing its own parent.", + "Require an explicit decision and evidence for any deferred capability." + ], + "acceptance": [ + "Each child is completed with evidence or explicitly deferred by an approved decision.", + "Cross-repository artifact gates have named versions and hashes when adopted.", + "Compatibility and support documentation match actual delivery, not interface count." + ], + "tests": [ + "Review the acceptance evidence of each child; do not count parent closure as an additional runtime test." + ], + "risks": "A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.", + "blocked_by": [], + "sources": [ + "S03", + "C14", + "C21", + "S04", + "S05", + "C15", + "U01" + ], + "branch": null, + "pr_title": null, + "scope_exclusions": [ + "No monolithic epic implementation PR." + ], + "completion_artifacts": [ + "Linked child PRs, tests, and a final scope/deferral review." + ], + "mandatory": "Outcome group; optional scope remains explicitly gated or deferred.", + "evidence": "Proposal derived from the attached summaries and pinned source references.", + "children": [ + "CLI-016", + "CLI-017", + "CLI-018" + ], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:epic", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-E06.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Enable scan, allocation, patch and event workflows only after their specific lower-layer gates.", + "body_template": "\n\n## CLI-E06 — Qualified advanced workflow adoption\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M5\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThis grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.\n\n**Evidence classification:** Proposal derived from the attached summaries and pinned source references.\n\n### Outcome and rationale\n\nEnable scan, allocation, patch and event workflows only after their specific lower-layer gates.\n\n**Expected benefit:** Enable scan, allocation, patch and event workflows only after their specific lower-layer gates.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary.\n- [ ] Sequence only real dependencies; do not block a child on closing its own parent.\n- [ ] Require an explicit decision and evidence for any deferred capability.\n\n### Acceptance criteria\n\n- [ ] Each child is completed with evidence or explicitly deferred by an approved decision.\n- [ ] Cross-repository artifact gates have named versions and hashes when adopted.\n- [ ] Compatibility and support documentation match actual delivery, not interface count.\n\n### Required validation\n\n- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test.\n\n### Scope exclusions\n\n- No monolithic epic implementation PR.\n\n### Parent and children\n\nParent: {{issue:CLI-PLAN}}\n\n- {{issue:CLI-016}}\n- {{issue:CLI-017}}\n- {{issue:CLI-018}}\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nNo epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository.\n\n### Risks and compatibility\n\nA grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Linked child PRs, tests, and a final scope/deferral review.\n\nOutcome group; optional scope remains explicitly gated or deferred.\n\n### Sources\n\n- [S03 — Prior audit: new factory already exists; qualify, do not recreate.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Scanning/Values/MemoryScanSessions.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md)\n- [S04 — Prior audit: current-target allocation bindings.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Allocation/LuaTargetMemoryAllocationOperations.cs)\n- [S05 — Prior audit: patch and disable-info ownership handoff.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Assembly/AutoAssemblerPatcher.cs)\n- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs)\n- [U01 — Historical loader/tables/callback dispatch comparison.](https://github.com/cheat-engine/cheat-engine/blob/ec45d5f47f92a239ba0bf51ec5d04a7509c3fd37/Cheat%20Engine/plugin.pas)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-E07", + "repository_key": "client", + "kind": "epic", + "title": "Developer experience and bounded observation", + "parent": "CLI-PLAN", + "epic": null, + "milestone": "CLI-M5", + "priority": "P2", + "observation": "This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.", + "objective": "Define coherent lifetime, reader, completion and discoverability policies.", + "requirements": [ + "Review child source evidence and preserve the SDK/Client responsibility boundary.", + "Sequence only real dependencies; do not block a child on closing its own parent.", + "Require an explicit decision and evidence for any deferred capability." + ], + "acceptance": [ + "Each child is completed with evidence or explicitly deferred by an approved decision.", + "Cross-repository artifact gates have named versions and hashes when adopted.", + "Compatibility and support documentation match actual delivery, not interface count." + ], + "tests": [ + "Review the acceptance evidence of each child; do not count parent closure as an additional runtime test." + ], + "risks": "A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.", + "blocked_by": [], + "sources": [ + "C15", + "C01", + "C16", + "N03", + "C06", + "C14" + ], + "branch": null, + "pr_title": null, + "scope_exclusions": [ + "No monolithic epic implementation PR." + ], + "completion_artifacts": [ + "Linked child PRs, tests, and a final scope/deferral review." + ], + "mandatory": "Outcome group; optional scope remains explicitly gated or deferred.", + "evidence": "Proposal derived from the attached summaries and pinned source references.", + "children": [ + "CLI-019", + "CLI-020", + "CLI-021" + ], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:epic", + "ce:priority:P2" + ], + "path": "docs/engineering/work-items/CLI-E07.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Define coherent lifetime, reader, completion and discoverability policies.", + "body_template": "\n\n## CLI-E07 — Developer experience and bounded observation\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P2 · **Milestone:** CLI-M5\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThis grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.\n\n**Evidence classification:** Proposal derived from the attached summaries and pinned source references.\n\n### Outcome and rationale\n\nDefine coherent lifetime, reader, completion and discoverability policies.\n\n**Expected benefit:** Define coherent lifetime, reader, completion and discoverability policies.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary.\n- [ ] Sequence only real dependencies; do not block a child on closing its own parent.\n- [ ] Require an explicit decision and evidence for any deferred capability.\n\n### Acceptance criteria\n\n- [ ] Each child is completed with evidence or explicitly deferred by an approved decision.\n- [ ] Cross-repository artifact gates have named versions and hashes when adopted.\n- [ ] Compatibility and support documentation match actual delivery, not interface count.\n\n### Required validation\n\n- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test.\n\n### Scope exclusions\n\n- No monolithic epic implementation PR.\n\n### Parent and children\n\nParent: {{issue:CLI-PLAN}}\n\n- {{issue:CLI-019}}\n- {{issue:CLI-020}}\n- {{issue:CLI-021}}\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nNo epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository.\n\n### Risks and compatibility\n\nA grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Linked child PRs, tests, and a final scope/deferral review.\n\nOutcome group; optional scope remains explicitly gated or deferred.\n\n### Sources\n\n- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [C16 — Prior audit: immutable terminals, post-filter limits, readability naming.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Fluent/Scanning/AobScanBuilder.cs)\n- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes)\n- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-E08", + "repository_key": "client", + "kind": "epic", + "title": "Package, deployment, and release readiness", + "parent": "CLI-PLAN", + "epic": null, + "milestone": "CLI-M6", + "priority": "P1", + "observation": "This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.", + "objective": "Validate actual packages, external consumers, deployment sets and measured end-to-end behavior.", + "requirements": [ + "Review child source evidence and preserve the SDK/Client responsibility boundary.", + "Sequence only real dependencies; do not block a child on closing its own parent.", + "Require an explicit decision and evidence for any deferred capability." + ], + "acceptance": [ + "Each child is completed with evidence or explicitly deferred by an approved decision.", + "Cross-repository artifact gates have named versions and hashes when adopted.", + "Compatibility and support documentation match actual delivery, not interface count." + ], + "tests": [ + "Review the acceptance evidence of each child; do not count parent closure as an additional runtime test." + ], + "risks": "A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.", + "blocked_by": [], + "sources": [ + "C19", + "C20", + "C01", + "N03", + "C17", + "S11", + "C21", + "C03", + "C15", + "S13" + ], + "branch": null, + "pr_title": null, + "scope_exclusions": [ + "No monolithic epic implementation PR." + ], + "completion_artifacts": [ + "Linked child PRs, tests, and a final scope/deferral review." + ], + "mandatory": "Outcome group; optional scope remains explicitly gated or deferred.", + "evidence": "Proposal derived from the attached summaries and pinned source references.", + "children": [ + "CLI-022", + "CLI-023", + "CLI-024" + ], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:epic", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-E08.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Validate actual packages, external consumers, deployment sets and measured end-to-end behavior.", + "body_template": "\n\n## CLI-E08 — Package, deployment, and release readiness\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M6\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThis grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing.\n\n**Evidence classification:** Proposal derived from the attached summaries and pinned source references.\n\n### Outcome and rationale\n\nValidate actual packages, external consumers, deployment sets and measured end-to-end behavior.\n\n**Expected benefit:** Validate actual packages, external consumers, deployment sets and measured end-to-end behavior.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary.\n- [ ] Sequence only real dependencies; do not block a child on closing its own parent.\n- [ ] Require an explicit decision and evidence for any deferred capability.\n\n### Acceptance criteria\n\n- [ ] Each child is completed with evidence or explicitly deferred by an approved decision.\n- [ ] Cross-repository artifact gates have named versions and hashes when adopted.\n- [ ] Compatibility and support documentation match actual delivery, not interface count.\n\n### Required validation\n\n- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test.\n\n### Scope exclusions\n\n- No monolithic epic implementation PR.\n\n### Parent and children\n\nParent: {{issue:CLI-PLAN}}\n\n- {{issue:CLI-022}}\n- {{issue:CLI-023}}\n- {{issue:CLI-024}}\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nNo epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository.\n\n### Risks and compatibility\n\nA grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Linked child PRs, tests, and a final scope/deferral review.\n\nOutcome group; optional scope remains explicitly gated or deferred.\n\n### Sources\n\n- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json)\n- [C20 — Prior audit: approved SDK values versus broad compile/runtime dependency.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/CheatEngine.Client.Abstractions.csproj)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes)\n- [C17 — Prior audit: build-only native calls, external-base checks and per-file deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/buildTransitive/CheatEngine.Client.Hosting.targets)\n- [S11 — Protected native boundary and bridge contract reference.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/native/cheatengine-sdk-lua-bridge/README.md)\n- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md)\n- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs)\n- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs)\n- [S13 — Live fixture entry point, identified in contribution guidance.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/tests/CheatEngine.SDK.LivePlugin/README.md)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-001", + "repository_key": "client", + "kind": "governance", + "title": "Reconcile Client audit evidence with source and consumed packages", + "parent": "CLI-E01", + "epic": "CLI-E01", + "milestone": "CLI-M0", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The reviewed archive is validated planning context, not source/package/live proof; existing high-level APIs from PR #7 must not be recreated as missing.", + "objective": "Establish Client-specific provenance and a truthful theme-to-work-item crosswalk.", + "requirements": [ + "Record Client/SDK commits, the actually consumed nupkg and source-only additions separately.", + "Import original finding/ADR/test identifiers only from recovered original registers.", + "Retain unavailable advanced implementations until their individual gates pass." + ], + "acceptance": [ + "No invented original finding ID or assertion of exhaustive archive coverage.", + "Each Client adoption item identifies its corresponding SDK work item.", + "Historical source statements are revalidated before changes." + ], + "tests": [ + "Ledger rejects source present as proof of packaged/live support.", + "Cross-repository reference validator catches unresolved planning IDs." + ], + "risks": "The summaries are a usable planning basis, not a substitute for all detailed audit registers.", + "blocked_by": [], + "sources": [ + "C01", + "C19", + "H02", + "H01" + ], + "branch": "docs/cli-001-evidence-reconciliation", + "pr_title": "Reconcile Client audit evidence with source and consumed packages", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-002" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:governance", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-001.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Establish Client-specific provenance and a truthful theme-to-work-item crosswalk.", + "body_template": "\n\n## CLI-001 — Reconcile Client audit evidence with source and consumed packages\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** governance · **Priority:** P1 · **Milestone:** CLI-M0\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe Client main revision matches the prior review. The prior complete ZIP is not locally available, and existing high-level APIs from PR #7 must not be recreated as missing.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nEstablish Client-specific provenance and a truthful theme-to-work-item crosswalk.\n\n**Expected benefit:** Establish Client-specific provenance and a truthful theme-to-work-item crosswalk.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Record Client/SDK commits, the actually consumed nupkg and source-only additions separately.\n- [ ] Import original finding/ADR/test identifiers only from recovered original registers.\n- [ ] Retain unavailable advanced implementations until their individual gates pass.\n\n### Acceptance criteria\n\n- [ ] No invented original finding ID or assertion of exhaustive archive coverage.\n- [ ] Each Client adoption item identifies its corresponding SDK work item.\n- [ ] Historical source statements are revalidated before changes.\n\n### Required validation\n\n- [ ] Ledger rejects source present as proof of packaged/live support.\n- [ ] Cross-repository reference validator catches unresolved planning IDs.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E01}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\n- {{issue:CLI-002}}\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `docs/cli-001-evidence-reconciliation`\n\nPR title: **Reconcile Client audit evidence with source and consumed packages**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nThe summaries are a usable planning basis, not a substitute for all detailed audit registers.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json)\n- [H02 — Merged high-level API/modules; preserve this work.](https://github.com/CheatEngineNet/CheatEngine.Client/pull/7)\n- [H01 — Merged foundations; author-reported tests are not independently executed.](https://github.com/CheatEngineNet/CheatEngine.SDK/pull/19)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-002", + "repository_key": "client", + "kind": "feature", + "title": "Separate capability implementation, host evidence, and policy", + "parent": "CLI-E01", + "epic": "CLI-E01", + "milestone": "CLI-M0", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Runtime capability probes and unavailable service registrations describe different support dimensions. Opting into unsafe Lua is policy, not proof of working host support.", + "objective": "Expose a small immutable capability model with explicit reasons and independently sourced dimensions.", + "requirements": [ + "Distinguish implemented, available in package, observed in host, live-qualified, policy-allowed and active-lifetime prerequisites.", + "Do not treat every probe exception as unavailability; preserve unavailable versus present-but-failing.", + "Generate documentation from the same ledger without auto-promoting discovered symbols." + ], + "acceptance": [ + "Every unavailable public domain explains its actual missing gate.", + "Enabling an option cannot manufacture host evidence.", + "Existing supported workflows remain discoverable without raw SDK details." + ], + "tests": [ + "Missing, throwing and malformed runtime global cases.", + "Policy combinations and unavailable-adapter status tests." + ], + "risks": "Avoid a large generic capability framework; deterministic records and reasoned derivation are sufficient.", + "blocked_by": [ + "CLI-001" + ], + "sources": [ + "C09", + "C14", + "C01" + ], + "branch": "feat/cli-002-capability-evidence-model", + "pr_title": "Separate capability implementation, host evidence, and policy", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-016", + "CLI-020" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-002.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Expose a small immutable capability model with explicit reasons and independently sourced dimensions.", + "body_template": "\n\n## CLI-002 — Separate capability implementation, host evidence, and policy\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M0\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nRuntime capability probes and unavailable service registrations describe different support dimensions. Opting into unsafe Lua is policy, not proof of working host support.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nExpose a small immutable capability model with explicit reasons and independently sourced dimensions.\n\n**Expected benefit:** Expose a small immutable capability model with explicit reasons and independently sourced dimensions.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Distinguish implemented, available in package, observed in host, live-qualified, policy-allowed and active-lifetime prerequisites.\n- [ ] Do not treat every probe exception as unavailability; preserve unavailable versus present-but-failing.\n- [ ] Generate documentation from the same ledger without auto-promoting discovered symbols.\n\n### Acceptance criteria\n\n- [ ] Every unavailable public domain explains its actual missing gate.\n- [ ] Enabling an option cannot manufacture host evidence.\n- [ ] Existing supported workflows remain discoverable without raw SDK details.\n\n### Required validation\n\n- [ ] Missing, throwing and malformed runtime global cases.\n- [ ] Policy combinations and unavailable-adapter status tests.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E01}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:CLI-001}}\n\n### Blocks\n\n- {{issue:CLI-016}}\n- {{issue:CLI-020}}\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-002-capability-evidence-model`\n\nPR title: **Separate capability implementation, host evidence, and policy**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nAvoid a large generic capability framework; deterministic records and reasoned derivation are sufficient.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C09 — Prior audit: capability and exception-family mismatch.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/RuntimeClient.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-003", + "repository_key": "client", + "kind": "governance", + "title": "Adopt Client governance, roadmap, and issue-to-PR workflow", + "parent": "CLI-E01", + "epic": "CLI-E01", + "milestone": "CLI-M0", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Client has a mature README and existing ADR/build/live gates. This bootstrap must add management structure, not replace architecture or release policy.", + "objective": "Adopt additive planning documents, native issue hierarchy, blockers and review templates.", + "requirements": [ + "Keep Issues as current execution state and Markdown as scope/architecture authority.", + "Use focused branches from main only after readiness; no empty implementation branches for the entire backlog.", + "Keep cross-repository blockers explicit and verify actual GitHub metadata separately from local plans." + ], + "acceptance": [ + "The documentation/tooling PR contains no product runtime changes.", + "Roadmap, milestone, epic and task links are navigable after deployment.", + "No automated merge, publication, reviewer assignment or branch protection change." + ], + "tests": [ + "Manifest, DAG, source and local link checks.", + "Two-run deployment idempotency in a test repository." + ], + "risks": "A PR is not a deployment of native project metadata, and a Markdown checklist is not a native sub-issue relation.", + "blocked_by": [], + "sources": [ + "C01", + "G01", + "G02", + "G03", + "G04" + ], + "branch": "docs/cli-003-engineering-governance", + "pr_title": "Adopt Client governance, roadmap, and issue-to-PR workflow", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:governance", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-003.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Adopt additive planning documents, native issue hierarchy, blockers and review templates.", + "body_template": "\n\n## CLI-003 — Adopt Client governance, roadmap, and issue-to-PR workflow\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** governance · **Priority:** P1 · **Milestone:** CLI-M0\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nClient has a mature README and existing ADR/build/live gates. This bootstrap must add management structure, not replace architecture or release policy.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nAdopt additive planning documents, native issue hierarchy, blockers and review templates.\n\n**Expected benefit:** Adopt additive planning documents, native issue hierarchy, blockers and review templates.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Keep Issues as current execution state and Markdown as scope/architecture authority.\n- [ ] Use focused branches from main only after readiness; no empty implementation branches for the entire backlog.\n- [ ] Keep cross-repository blockers explicit and verify actual GitHub metadata separately from local plans.\n\n### Acceptance criteria\n\n- [ ] The documentation/tooling PR contains no product runtime changes.\n- [ ] Roadmap, milestone, epic and task links are navigable after deployment.\n- [ ] No automated merge, publication, reviewer assignment or branch protection change.\n\n### Required validation\n\n- [ ] Manifest, DAG, source and local link checks.\n- [ ] Two-run deployment idempotency in a test repository.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E01}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `docs/cli-003-engineering-governance`\n\nPR title: **Adopt Client governance, roadmap, and issue-to-PR workflow**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nA PR is not a deployment of native project metadata, and a Markdown checklist is not a native sub-issue relation.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [G01 — Issue API; filter pull_request entries from issue lists.](https://docs.github.com/en/rest/issues/issues)\n- [G02 — Repository-specific milestones.](https://docs.github.com/en/rest/issues/milestones)\n- [G03 — Native hierarchy uses issue IDs, not issue numbers.](https://docs.github.com/en/rest/issues/sub-issues)\n- [G04 — Native blocked-by relationship with the blocker issue_id.](https://docs.github.com/en/rest/issues/issue-dependencies)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-004", + "repository_key": "client", + "kind": "bug", + "title": "Align expected process failures with production dispatcher semantics", + "parent": "CLI-E02", + "epic": "CLI-E02", + "milestone": "CLI-M1", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The prior audit traces expected no-target exceptions through a dispatcher that rethrows callback exceptions; a test fake can instead return false and mask the mismatch.", + "objective": "Return expected domain failures as typed outcomes without swallowing application callback bugs.", + "requirements": [ + "Classify no target, disappeared process and missing local metadata inside ProcessClient.", + "Keep the general dispatcher policy for programmer/user callback exceptions explicit.", + "Make contract fakes reproduce production exception transport rather than an easier imagined adapter." + ], + "acceptance": [ + "TryGetCurrent with PID zero returns the documented TargetNotAttached outcome.", + "An arbitrary user Action exception still follows the dispatcher contract.", + "Race-to-exit lookup failures have stable, documented semantics." + ], + "tests": [ + "Production-semantics dispatcher plus controlled process host.", + "Composed regression for no-target, disappeared target and throwing user callback." + ], + "risks": "Changing every dispatcher exception into false would hide defects and break a different contract.", + "blocked_by": [], + "sources": [ + "C05", + "C06" + ], + "branch": "fix/cli-004-process-try-semantics", + "pr_title": "Align expected process failures with production dispatcher semantics", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:bug", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-004.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Return expected domain failures as typed outcomes without swallowing application callback bugs.", + "body_template": "\n\n## CLI-004 — Align expected process failures with production dispatcher semantics\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** bug · **Priority:** P1 · **Milestone:** CLI-M1\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe prior audit traces expected no-target exceptions through a dispatcher that rethrows callback exceptions; a test fake can instead return false and mask the mismatch.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nReturn expected domain failures as typed outcomes without swallowing application callback bugs.\n\n**Expected benefit:** Return expected domain failures as typed outcomes without swallowing application callback bugs.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Classify no target, disappeared process and missing local metadata inside ProcessClient.\n- [ ] Keep the general dispatcher policy for programmer/user callback exceptions explicit.\n- [ ] Make contract fakes reproduce production exception transport rather than an easier imagined adapter.\n\n### Acceptance criteria\n\n- [ ] TryGetCurrent with PID zero returns the documented TargetNotAttached outcome.\n- [ ] An arbitrary user Action exception still follows the dispatcher contract.\n- [ ] Race-to-exit lookup failures have stable, documented semantics.\n\n### Required validation\n\n- [ ] Production-semantics dispatcher plus controlled process host.\n- [ ] Composed regression for no-target, disappeared target and throwing user callback.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E02}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `fix/cli-004-process-try-semantics`\n\nPR title: **Align expected process failures with production dispatcher semantics**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nChanging every dispatcher exception into false would hide defects and break a different contract.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs)\n- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-005", + "repository_key": "client", + "kind": "bug", + "title": "Expire memory-codec contexts after each invocation", + "parent": "CLI-E02", + "epic": "CLI-E02", + "milestone": "CLI-M1", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The prior audit describes a retainable reference context whose methods call SDK memory directly without an invocation expiration guard; pointer width is cached in that context.", + "objective": "Make custom-codec access valid only inside its original invocation.", + "requirements": [ + "Expire in finally on successful and failing codec calls.", + "Validate active invocation, activation identity and allowed thread before any SDK operation, including scoped metadata access.", + "Use current SDK facts now and strengthen target binding when the authoritative target contract is adopted; do not delay the local expiration fix." + ], + "acceptance": [ + "Retained references fail before invoking SDK after return or exception.", + "Cross-thread and re-enable reuse cannot use a recycled invocation.", + "Do not pool contexts while an old reference could reach a later invocation." + ], + "tests": [ + "Capture public context and invoke afterward with SDK call counters.", + "PointerSize after expiration, codec exception, worker use and re-enable." + ], + "risks": "A ref-struct-only public redesign would be a separate compatibility decision; a small expiration guard can close the immediate lifetime gap.", + "blocked_by": [], + "sources": [ + "C03", + "C04", + "C07" + ], + "branch": "fix/cli-005-codec-context-lifetime", + "pr_title": "Expire memory-codec contexts after each invocation", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-014" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:bug", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-005.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Make custom-codec access valid only inside its original invocation.", + "body_template": "\n\n## CLI-005 — Expire memory-codec contexts after each invocation\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** bug · **Priority:** P1 · **Milestone:** CLI-M1\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe prior audit describes a retainable reference context whose methods call SDK memory directly without an invocation expiration guard; pointer width is cached in that context.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nMake custom-codec access valid only inside its original invocation.\n\n**Expected benefit:** Make custom-codec access valid only inside its original invocation.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Expire in finally on successful and failing codec calls.\n- [ ] Validate active invocation, activation identity and allowed thread before any SDK operation, including scoped metadata access.\n- [ ] Use current SDK facts now and strengthen target binding when the authoritative target contract is adopted; do not delay the local expiration fix.\n\n### Acceptance criteria\n\n- [ ] Retained references fail before invoking SDK after return or exception.\n- [ ] Cross-thread and re-enable reuse cannot use a recycled invocation.\n- [ ] Do not pool contexts while an old reference could reach a later invocation.\n\n### Required validation\n\n- [ ] Capture public context and invoke afterward with SDK call counters.\n- [ ] PointerSize after expiration, codec exception, worker use and re-enable.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E02}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\n- {{issue:CLI-014}}\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `fix/cli-005-codec-context-lifetime`\n\nPR title: **Expire memory-codec contexts after each invocation**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nA ref-struct-only public redesign would be a separate compatibility decision; a small expiration guard can close the immediate lifetime gap.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs)\n- [C04 — Public extension context with an implementation-enforced lifetime.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/Memory/IMemoryReadContext.cs)\n- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-006", + "repository_key": "client", + "kind": "bug", + "title": "Complete all activation rollback stages and preserve original errors", + "parent": "CLI-E02", + "epic": "CLI-E02", + "milestone": "CLI-M1", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Prior review observes sequential unprotected scope/provider/configuration cleanup in partial CreateActivation, while normal cleanup already aggregates failures.", + "objective": "Use a consistent all-stages cleanup policy for partially and fully constructed activations.", + "requirements": [ + "Attempt each owned cleanup stage independently and exactly as ownership permits.", + "Preserve original construction failure before secondary cleanup diagnostics.", + "Keep CE resource/module teardown before SDK detach; avoid double DI ownership." + ], + "acceptance": [ + "A throwing scope Dispose does not skip provider/configuration cleanup.", + "The original enable failure remains identifiable.", + "Normal disable order is preserved and repeated teardown is controlled." + ], + "tests": [ + "Failure during service resolution plus failing scope/provider/configuration disposables.", + "Module-enable rollback and re-enable after failed activation." + ], + "risks": "Disposal aggregation is not permission to destroy a shared service twice or detach before admitted work drains.", + "blocked_by": [], + "sources": [ + "C07", + "C14" + ], + "branch": "fix/cli-006-activation-rollback", + "pr_title": "Complete all activation rollback stages and preserve original errors", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-010", + "CLI-012" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:bug", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-006.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Use a consistent all-stages cleanup policy for partially and fully constructed activations.", + "body_template": "\n\n## CLI-006 — Complete all activation rollback stages and preserve original errors\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** bug · **Priority:** P1 · **Milestone:** CLI-M1\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nPrior review observes sequential unprotected scope/provider/configuration cleanup in partial CreateActivation, while normal cleanup already aggregates failures.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nUse a consistent all-stages cleanup policy for partially and fully constructed activations.\n\n**Expected benefit:** Use a consistent all-stages cleanup policy for partially and fully constructed activations.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Attempt each owned cleanup stage independently and exactly as ownership permits.\n- [ ] Preserve original construction failure before secondary cleanup diagnostics.\n- [ ] Keep CE resource/module teardown before SDK detach; avoid double DI ownership.\n\n### Acceptance criteria\n\n- [ ] A throwing scope Dispose does not skip provider/configuration cleanup.\n- [ ] The original enable failure remains identifiable.\n- [ ] Normal disable order is preserved and repeated teardown is controlled.\n\n### Required validation\n\n- [ ] Failure during service resolution plus failing scope/provider/configuration disposables.\n- [ ] Module-enable rollback and re-enable after failed activation.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E02}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\n- {{issue:CLI-010}}\n- {{issue:CLI-012}}\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `fix/cli-006-activation-rollback`\n\nPR title: **Complete all activation rollback stages and preserve original errors**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nDisposal aggregation is not permission to destroy a shared service twice or detach before admitted work drains.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-007", + "repository_key": "client", + "kind": "feature", + "title": "Replace built-in CE Lua declarations with SDK semantic operations", + "parent": "CLI-E03", + "epic": "CLI-E03", + "milestone": "CLI-M2", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The Client currently owns built-in CE names/signatures through ClientLuaGlobals despite using the SDK generator.", + "objective": "Make Client Core a semantic adapter, not a second CE mapping catalog.", + "requirements": [ + "Replace every built-in declaration with its corresponding published SDK operation.", + "Retain exact-name process ambiguity policy, table-root authorization and user-facing workflows.", + "Update runtime architecture interpretation consistently instead of independently decoding targetIs64Bit." + ], + "acceptance": [ + "The reviewed eleven-name correspondence has no untracked duplicates.", + "Unavailable/throwing/malformed outcomes retain SDK origin.", + "Required minimum SDK artifact is part of the package contract." + ], + "tests": [ + "Semantic adapter parity fixtures for process/runtime/symbol/table operations.", + "Clean consumer restore against minimum SDK artifact." + ], + "risks": "Do not remove working mappings before the replacement package is consumable; record temporary exceptions explicitly.", + "blocked_by": [ + "SDK-008", + "SDK-023" + ], + "sources": [ + "C02", + "C09", + "C19" + ], + "branch": "feat/cli-007-adopt-sdk-semantic-operations", + "pr_title": "Replace built-in CE Lua declarations with SDK semantic operations", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-022" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-007.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Make Client Core a semantic adapter, not a second CE mapping catalog.", + "body_template": "\n\n## CLI-007 — Replace built-in CE Lua declarations with SDK semantic operations\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M2\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe Client currently owns built-in CE names/signatures through ClientLuaGlobals despite using the SDK generator.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nMake Client Core a semantic adapter, not a second CE mapping catalog.\n\n**Expected benefit:** Make Client Core a semantic adapter, not a second CE mapping catalog.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Replace every built-in declaration with its corresponding published SDK operation.\n- [ ] Retain exact-name process ambiguity policy, table-root authorization and user-facing workflows.\n- [ ] Update runtime architecture interpretation consistently instead of independently decoding targetIs64Bit.\n\n### Acceptance criteria\n\n- [ ] The reviewed eleven-name correspondence has no untracked duplicates.\n- [ ] Unavailable/throwing/malformed outcomes retain SDK origin.\n- [ ] Required minimum SDK artifact is part of the package contract.\n\n### Required validation\n\n- [ ] Semantic adapter parity fixtures for process/runtime/symbol/table operations.\n- [ ] Clean consumer restore against minimum SDK artifact.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E03}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-008}}\n- {{issue:SDK-023}}\n\n### Blocks\n\n- {{issue:CLI-022}}\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-007-adopt-sdk-semantic-operations`\n\nPR title: **Replace built-in CE Lua declarations with SDK semantic operations**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nDo not remove working mappings before the replacement package is consumable; record temporary exceptions explicitly.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C02 — Prior audit: built-in CE Lua declarations remain Client-owned.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/ClientLuaGlobals.cs)\n- [C09 — Prior audit: capability and exception-family mismatch.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/RuntimeClient.cs)\n- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-008", + "repository_key": "client", + "kind": "feature", + "title": "Preserve SDK failure provenance and partial effect information", + "parent": "CLI-E03", + "epic": "CLI-E03", + "milestone": "CLI-M2", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Prior audit: memory failures become strings/generic errors and generated false results may be labeled LuaError regardless of original cause.", + "objective": "Project SDK outcomes losslessly while keeping normal Client contracts handle-free.", + "requirements": [ + "Separate misuse, expected failure and integration failure.", + "Keep optional diagnostics cold-path; do not parse message text.", + "Add completed-step/effect fields for state-changing workflows and document compatibility changes." + ], + "acceptance": [ + "Missing global, host rejection, malformed result and Lua error remain distinct.", + "An empty successful result does not mask unavailable capability.", + "A post-mutation refresh failure does not imply no effect." + ], + "tests": [ + "Cross-layer outcome table using actual SDK fixture behavior.", + "Old consumer compilation and exception/behavior compatibility tests." + ], + "risks": "A blanket result redesign can break application fakes; prefer additive overloads/adapters.", + "blocked_by": [ + "SDK-007", + "SDK-023" + ], + "sources": [ + "C03", + "C13", + "C11", + "N03" + ], + "branch": "feat/cli-008-lossless-sdk-outcomes", + "pr_title": "Preserve SDK failure provenance and partial effect information", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-013", + "CLI-014", + "CLI-015", + "CLI-017" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-008.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Project SDK outcomes losslessly while keeping normal Client contracts handle-free.", + "body_template": "\n\n## CLI-008 — Preserve SDK failure provenance and partial effect information\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M2\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nPrior audit: memory failures become strings/generic errors and generated false results may be labeled LuaError regardless of original cause.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nProject SDK outcomes losslessly while keeping normal Client contracts handle-free.\n\n**Expected benefit:** Project SDK outcomes losslessly while keeping normal Client contracts handle-free.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Separate misuse, expected failure and integration failure.\n- [ ] Keep optional diagnostics cold-path; do not parse message text.\n- [ ] Add completed-step/effect fields for state-changing workflows and document compatibility changes.\n\n### Acceptance criteria\n\n- [ ] Missing global, host rejection, malformed result and Lua error remain distinct.\n- [ ] An empty successful result does not mask unavailable capability.\n- [ ] A post-mutation refresh failure does not imply no effect.\n\n### Required validation\n\n- [ ] Cross-layer outcome table using actual SDK fixture behavior.\n- [ ] Old consumer compilation and exception/behavior compatibility tests.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E03}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-007}}\n- {{issue:SDK-023}}\n\n### Blocks\n\n- {{issue:CLI-013}}\n- {{issue:CLI-014}}\n- {{issue:CLI-015}}\n- {{issue:CLI-017}}\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-008-lossless-sdk-outcomes`\n\nPR title: **Preserve SDK failure provenance and partial effect information**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nA blanket result redesign can break application fakes; prefer additive overloads/adapters.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs)\n- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs)\n- [C11 — Prior audit: SDK delegation but ambiguous false becomes rejection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkAobScanPort.cs)\n- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-009", + "repository_key": "client", + "kind": "feature", + "title": "Bind Client workflows to authoritative SDK target identity", + "parent": "CLI-E03", + "epic": "CLI-E03", + "milestone": "CLI-M2", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Client observes selection changes through local snapshots. SDK-owned target identity is needed for future allocations, patches and stale queued operations.", + "objective": "Capture SDK target/activation authority for effectful workflow steps and high-level leases.", + "requirements": [ + "Validate captured identity at actual execution, not only before waiting for dispatch.", + "Keep pure copied snapshots distinct from live operations.", + "Never release an old lease through the new current target or invisibly switch targets during cleanup." + ], + "acceptance": [ + "External target change invalidates affected workflow leases.", + "PID reuse/A-to-B-to-A cannot silently reactivate an old lease.", + "The local epoch is only a Client policy marker, not duplicated native authority." + ], + "tests": [ + "Queued work plus external target switch.", + "Stale lease method/release, terminated process and same PID/new incarnation." + ], + "risks": "Only explicit original-target cleanup or safe refusal is acceptable under uncertain identity.", + "blocked_by": [ + "SDK-010", + "SDK-011", + "SDK-023" + ], + "sources": [ + "C08", + "C06", + "C05" + ], + "branch": "feat/cli-009-target-bound-workflows", + "pr_title": "Bind Client workflows to authoritative SDK target identity", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-013", + "CLI-014", + "CLI-015", + "CLI-016", + "CLI-017", + "CLI-018" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-009.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Capture SDK target/activation authority for effectful workflow steps and high-level leases.", + "body_template": "\n\n## CLI-009 — Bind Client workflows to authoritative SDK target identity\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M2\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nClient observes selection changes through local snapshots. SDK-owned target identity is needed for future allocations, patches and stale queued operations.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nCapture SDK target/activation authority for effectful workflow steps and high-level leases.\n\n**Expected benefit:** Capture SDK target/activation authority for effectful workflow steps and high-level leases.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Validate captured identity at actual execution, not only before waiting for dispatch.\n- [ ] Keep pure copied snapshots distinct from live operations.\n- [ ] Never release an old lease through the new current target or invisibly switch targets during cleanup.\n\n### Acceptance criteria\n\n- [ ] External target change invalidates affected workflow leases.\n- [ ] PID reuse/A-to-B-to-A cannot silently reactivate an old lease.\n- [ ] The local epoch is only a Client policy marker, not duplicated native authority.\n\n### Required validation\n\n- [ ] Queued work plus external target switch.\n- [ ] Stale lease method/release, terminated process and same PID/new incarnation.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E03}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-010}}\n- {{issue:SDK-011}}\n- {{issue:SDK-023}}\n\n### Blocks\n\n- {{issue:CLI-013}}\n- {{issue:CLI-014}}\n- {{issue:CLI-015}}\n- {{issue:CLI-016}}\n- {{issue:CLI-017}}\n- {{issue:CLI-018}}\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-009-target-bound-workflows`\n\nPR title: **Bind Client workflows to authoritative SDK target identity**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nOnly explicit original-target cleanup or safe refusal is acceptable under uncertain identity.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C08 — Prior audit: local observed epoch is not authoritative target identity.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/TargetSelectionLifetime.cs)\n- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs)\n- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-010", + "repository_key": "client", + "kind": "feature", + "title": "Use SDK registration leases for generated Lua modules", + "parent": "CLI-E04", + "epic": "CLI-E04", + "milestone": "CLI-M3", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The Client generator emits stack preflight/rollback while SDK generation already owns marshalling and closure generation.", + "objective": "Retain Client descriptors/order/policy and delegate registration safety to SDK leases.", + "requirements": [ + "Generate module descriptors and calls to the SDK registration contract instead of raw stack mechanisms.", + "Keep application collision policy explicit and release modules in reverse activation order.", + "Preserve a later replacement global when disposing the original module registration." + ], + "acceptance": [ + "Client-generated built-in module code does not implement a second low-level registration algorithm.", + "Partial enable failure releases only owned registrations.", + "Retained function values cannot call disposed plugin code." + ], + "tests": [ + "Compiled consumer with two modules, name replacement and partial registration failure.", + "Disable/re-enable and Lua reset fixtures." + ], + "risks": "Client-local reservations alone cannot serialize arbitrary scripts or other plugins.", + "blocked_by": [ + "SDK-009", + "SDK-022", + "SDK-023", + "CLI-006" + ], + "sources": [ + "C13", + "S06", + "C07" + ], + "branch": "feat/cli-010-sdk-module-registration", + "pr_title": "Use SDK registration leases for generated Lua modules", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-022" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-010.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Retain Client descriptors/order/policy and delegate registration safety to SDK leases.", + "body_template": "\n\n## CLI-010 — Use SDK registration leases for generated Lua modules\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M3\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe Client generator emits stack preflight/rollback while SDK generation already owns marshalling and closure generation.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nRetain Client descriptors/order/policy and delegate registration safety to SDK leases.\n\n**Expected benefit:** Retain Client descriptors/order/policy and delegate registration safety to SDK leases.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Generate module descriptors and calls to the SDK registration contract instead of raw stack mechanisms.\n- [ ] Keep application collision policy explicit and release modules in reverse activation order.\n- [ ] Preserve a later replacement global when disposing the original module registration.\n\n### Acceptance criteria\n\n- [ ] Client-generated built-in module code does not implement a second low-level registration algorithm.\n- [ ] Partial enable failure releases only owned registrations.\n- [ ] Retained function values cannot call disposed plugin code.\n\n### Required validation\n\n- [ ] Compiled consumer with two modules, name replacement and partial registration failure.\n- [ ] Disable/re-enable and Lua reset fixtures.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E04}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-009}}\n- {{issue:SDK-022}}\n- {{issue:SDK-023}}\n- {{issue:CLI-006}}\n\n### Blocks\n\n- {{issue:CLI-022}}\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-010-sdk-module-registration`\n\nPR title: **Use SDK registration leases for generated Lua modules**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nClient-local reservations alone cannot serialize arbitrary scripts or other plugins.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs)\n- [S06 — Prior audit: generation stamps but name-based unregister.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/source-generators/CheatEngine.SDK.SourceGenerators.Shared/LuaEmit/LuaRegistrationEmitter.cs)\n- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-011", + "repository_key": "client", + "kind": "bug", + "title": "Enforce recursive public and generated API type boundaries", + "parent": "CLI-E04", + "epic": "CLI-E04", + "milestone": "CLI-M3", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The prior review identifies shallow result-type checks and a generic branch that can bypass subsequent forbidden-definition checks.", + "objective": "Inspect the complete public type graph while allowing deliberately approved SDK value contracts.", + "requirements": [ + "Traverse generic definitions/arguments, arrays, constraints, nested returns and emitted code.", + "Reject LuaState, raw CE handles, ABI records, callbacks and ownership wrappers from normal Client contracts.", + "Keep approved immutable addresses/IDs/enums; do not clone every SDK value or split packages prematurely." + ], + "acceptance": [ + "Nested forbidden types are rejected consistently by tests/generator diagnostics.", + "Allowed immutable SDK values remain usable.", + "Generated consumer compilation tests the boundary, not only source strings." + ], + "tests": [ + "Nested generic/array/constraint positives and negatives.", + "Old application fake implementations and default builder tests." + ], + "risks": "Compile-time architecture checks are not a security sandbox. Type moves can also break assembly identity.", + "blocked_by": [], + "sources": [ + "C13", + "C20", + "N03" + ], + "branch": "fix/cli-011-recursive-type-boundaries", + "pr_title": "Enforce recursive public and generated API type boundaries", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-022" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:bug", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-011.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Inspect the complete public type graph while allowing deliberately approved SDK value contracts.", + "body_template": "\n\n## CLI-011 — Enforce recursive public and generated API type boundaries\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** bug · **Priority:** P1 · **Milestone:** CLI-M3\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe prior review identifies shallow result-type checks and a generic branch that can bypass subsequent forbidden-definition checks.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nInspect the complete public type graph while allowing deliberately approved SDK value contracts.\n\n**Expected benefit:** Inspect the complete public type graph while allowing deliberately approved SDK value contracts.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Traverse generic definitions/arguments, arrays, constraints, nested returns and emitted code.\n- [ ] Reject LuaState, raw CE handles, ABI records, callbacks and ownership wrappers from normal Client contracts.\n- [ ] Keep approved immutable addresses/IDs/enums; do not clone every SDK value or split packages prematurely.\n\n### Acceptance criteria\n\n- [ ] Nested forbidden types are rejected consistently by tests/generator diagnostics.\n- [ ] Allowed immutable SDK values remain usable.\n- [ ] Generated consumer compilation tests the boundary, not only source strings.\n\n### Required validation\n\n- [ ] Nested generic/array/constraint positives and negatives.\n- [ ] Old application fake implementations and default builder tests.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E04}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\n- {{issue:CLI-022}}\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `fix/cli-011-recursive-type-boundaries`\n\nPR title: **Enforce recursive public and generated API type boundaries**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nCompile-time architecture checks are not a security sandbox. Type moves can also break assembly identity.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs)\n- [C20 — Prior audit: approved SDK values versus broad compile/runtime dependency.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/CheatEngine.Client.Abstractions.csproj)\n- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-012", + "repository_key": "client", + "kind": "validation", + "title": "Specify activation-local DI and multi-plugin composition", + "parent": "CLI-E04", + "epic": "CLI-E04", + "milestone": "CLI-M3", + "priority": "P2", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The plugin creates a fresh provider per enable, with services registered as singletons within that provider. Extra scopes in a persistent provider do not recreate those singletons.", + "objective": "Make the supported composition lifetime explicit and test it independently of SDK load-context isolation.", + "requirements": [ + "Document one provider per activation and ownership of DI-created disposables.", + "Test aliases, modules and options without duplicate disposal.", + "Qualify simultaneous plugins against the SDK coexistence result; do not infer it from separate providers." + ], + "acceptance": [ + "Every enable receives fresh Client lifetime and module state.", + "Two scopes in one provider have documented behavior.", + "No promise of persistent-root hosting without an explicit activation factory design." + ], + "tests": [ + "Provider/scope/alias disposal matrix.", + "Two plugins in one host after SDK coexistence qualification." + ], + "risks": "Changing all registrations to scoped mechanically can change semantics and does not solve shared SDK static state.", + "blocked_by": [ + "CLI-006", + "SDK-005" + ], + "sources": [ + "C07", + "C14", + "S08" + ], + "branch": "test/cli-012-activation-di-contract", + "pr_title": "Specify activation-local DI and multi-plugin composition", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:validation", + "ce:priority:P2" + ], + "path": "docs/engineering/work-items/CLI-012.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Make the supported composition lifetime explicit and test it independently of SDK load-context isolation.", + "body_template": "\n\n## CLI-012 — Specify activation-local DI and multi-plugin composition\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** validation · **Priority:** P2 · **Milestone:** CLI-M3\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe plugin creates a fresh provider per enable, with services registered as singletons within that provider. Extra scopes in a persistent provider do not recreate those singletons.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nMake the supported composition lifetime explicit and test it independently of SDK load-context isolation.\n\n**Expected benefit:** Make the supported composition lifetime explicit and test it independently of SDK load-context isolation.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Document one provider per activation and ownership of DI-created disposables.\n- [ ] Test aliases, modules and options without duplicate disposal.\n- [ ] Qualify simultaneous plugins against the SDK coexistence result; do not infer it from separate providers.\n\n### Acceptance criteria\n\n- [ ] Every enable receives fresh Client lifetime and module state.\n- [ ] Two scopes in one provider have documented behavior.\n- [ ] No promise of persistent-root hosting without an explicit activation factory design.\n\n### Required validation\n\n- [ ] Provider/scope/alias disposal matrix.\n- [ ] Two plugins in one host after SDK coexistence qualification.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E04}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:CLI-006}}\n- {{issue:SDK-005}}\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `test/cli-012-activation-di-contract`\n\nPR title: **Specify activation-local DI and multi-plugin composition**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nChanging all registrations to scoped mechanically can change semantics and does not solve shared SDK static state.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n- [S08 — Prior audit: static host state and runtime admission.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Hosting/Bootstrap/PluginHost.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-013", + "repository_key": "client", + "kind": "feature", + "title": "Make AOB cardinality and result budgets truthful", + "parent": "CLI-E05", + "epic": "CLI-E05", + "milestone": "CLI-M4", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Current scanning runs before module resolution and post-filters native results. FirstOrNone cannot safely infer no-match from an ambiguous SDK false.", + "objective": "Compose qualified SDK scan outcomes into predictable fluent cardinality semantics.", + "requirements": [ + "Resolve absent/invalid module requests before expensive native work when target consistency permits.", + "Map qualified no-match to success/null, not every false.", + "Differentiate copied-result caps from native workload bounds and rename ReadableExecutable with a compatibility alias matching actual flags." + ], + "acceptance": [ + "FirstOrNone, RequireSingle and Take behave distinctly on zero/one/many matches.", + "A missing module proven before admission does not launch a full scan.", + "Documentation never claims Take(1) bounds CE scan work." + ], + "tests": [ + "No-hit/error/malformed outcomes and uniqueness/truncation tests.", + "Module/range boundaries and protection-name compatibility examples." + ], + "risks": "Early-stop cannot prove uniqueness; post-filtering and ordering must remain explicit.", + "blocked_by": [ + "SDK-014", + "SDK-023", + "CLI-008", + "CLI-009" + ], + "sources": [ + "C10", + "C11", + "C16" + ], + "branch": "feat/cli-013-aob-cardinality-budgets", + "pr_title": "Make AOB cardinality and result budgets truthful", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-020" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-013.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Compose qualified SDK scan outcomes into predictable fluent cardinality semantics.", + "body_template": "\n\n## CLI-013 — Make AOB cardinality and result budgets truthful\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M4\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nCurrent scanning runs before module resolution and post-filters native results. FirstOrNone cannot safely infer no-match from an ambiguous SDK false.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nCompose qualified SDK scan outcomes into predictable fluent cardinality semantics.\n\n**Expected benefit:** Compose qualified SDK scan outcomes into predictable fluent cardinality semantics.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Resolve absent/invalid module requests before expensive native work when target consistency permits.\n- [ ] Map qualified no-match to success/null, not every false.\n- [ ] Differentiate copied-result caps from native workload bounds and rename ReadableExecutable with a compatibility alias matching actual flags.\n\n### Acceptance criteria\n\n- [ ] FirstOrNone, RequireSingle and Take behave distinctly on zero/one/many matches.\n- [ ] A missing module proven before admission does not launch a full scan.\n- [ ] Documentation never claims Take(1) bounds CE scan work.\n\n### Required validation\n\n- [ ] No-hit/error/malformed outcomes and uniqueness/truncation tests.\n- [ ] Module/range boundaries and protection-name compatibility examples.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E05}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-014}}\n- {{issue:SDK-023}}\n- {{issue:CLI-008}}\n- {{issue:CLI-009}}\n\n### Blocks\n\n- {{issue:CLI-020}}\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-013-aob-cardinality-budgets`\n\nPR title: **Make AOB cardinality and result budgets truthful**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nEarly-stop cannot prove uniqueness; post-filtering and ordering must remain explicit.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C10 — Prior audit: whole scan precedes module lookup and post-filtering.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/PatternScanner.cs)\n- [C11 — Prior audit: SDK delegation but ambiguous false becomes rejection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkAobScanPort.cs)\n- [C16 — Prior audit: immutable terminals, post-filter limits, readability naming.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Fluent/Scanning/AobScanBuilder.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-014", + "repository_key": "client", + "kind": "feature", + "title": "Report memory batch effects and cancellation milestones", + "parent": "CLI-E05", + "epic": "CLI-E05", + "milestone": "CLI-M4", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Homogeneous batches reduce dispatch count but still perform sequential primitive calls. Failure indices in text do not provide a stable partial-effect contract.", + "objective": "Expose completed prefix, failed/canceled step and effect certainty for composed memory workflows.", + "requirements": [ + "Preserve current admission-only cancellation where promised; make between-step cancellation an explicit policy.", + "Copy span input before it outlives its synchronous caller; do not introduce dangling zero-copy buffers.", + "Keep pointer-width/address arithmetic in qualified SDK primitives." + ], + "acceptance": [ + "Failure at k reports which prior operations completed.", + "Cancellation never claims to interrupt an already-running synchronous CE primitive.", + "One dispatch is not described as one native call or an atomic transaction." + ], + "tests": [ + "Failure/cancellation before admission, between steps and after native success.", + "Span lifetime, pointer overflow and custom-codec regression tests." + ], + "risks": "Rollback writes are not a transaction and can fail; do not retry partial workflows invisibly.", + "blocked_by": [ + "SDK-013", + "CLI-008", + "CLI-009", + "CLI-005" + ], + "sources": [ + "C03", + "C05", + "C01" + ], + "branch": "feat/cli-014-memory-effects-cancellation", + "pr_title": "Report memory batch effects and cancellation milestones", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-014.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Expose completed prefix, failed/canceled step and effect certainty for composed memory workflows.", + "body_template": "\n\n## CLI-014 — Report memory batch effects and cancellation milestones\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M4\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nHomogeneous batches reduce dispatch count but still perform sequential primitive calls. Failure indices in text do not provide a stable partial-effect contract.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nExpose completed prefix, failed/canceled step and effect certainty for composed memory workflows.\n\n**Expected benefit:** Expose completed prefix, failed/canceled step and effect certainty for composed memory workflows.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Preserve current admission-only cancellation where promised; make between-step cancellation an explicit policy.\n- [ ] Copy span input before it outlives its synchronous caller; do not introduce dangling zero-copy buffers.\n- [ ] Keep pointer-width/address arithmetic in qualified SDK primitives.\n\n### Acceptance criteria\n\n- [ ] Failure at k reports which prior operations completed.\n- [ ] Cancellation never claims to interrupt an already-running synchronous CE primitive.\n- [ ] One dispatch is not described as one native call or an atomic transaction.\n\n### Required validation\n\n- [ ] Failure/cancellation before admission, between steps and after native success.\n- [ ] Span lifetime, pointer overflow and custom-codec regression tests.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E05}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-013}}\n- {{issue:CLI-008}}\n- {{issue:CLI-009}}\n- {{issue:CLI-005}}\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-014-memory-effects-cancellation`\n\nPR title: **Report memory batch effects and cancellation milestones**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nRollback writes are not a transaction and can fail; do not retry partial workflows invisibly.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs)\n- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-015", + "repository_key": "client", + "kind": "feature", + "title": "Adopt typed record and symbol commands with safe workflow policy", + "parent": "CLI-E05", + "epic": "CLI-E05", + "milestone": "CLI-M4", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Client record mutation uses Parent/destroy via generic SDK object/Lua access and can mutate before snapshot refresh fails.", + "objective": "Delegate CE mutation semantics to SDK while retaining high-level IDs, snapshots and trust policy.", + "requirements": [ + "Replace raw property/method operations with typed SDK commands.", + "Represent command success separately from snapshot refresh.", + "Keep table-root and raw-script opt-in defaults without claiming path checks sandbox content." + ], + "acceptance": [ + "No built-in Client adapter repairs CE record ownership through raw stack code.", + "Delete remains explicit; disposing a borrowed snapshot cannot destroy GUI data.", + "Post-mutation refresh failure preserves the completed effect." + ], + "tests": [ + "Missing/cyclic/self-parent records and snapshot failure after mutation.", + "Denied roots, observed reparse points and explicit trust assumptions." + ], + "risks": "A generic helper relocation alone does not fix ownership; safe path defaults do not eliminate TOCTOU.", + "blocked_by": [ + "SDK-021", + "SDK-023", + "CLI-008", + "CLI-009" + ], + "sources": [ + "C12", + "C18", + "C02" + ], + "branch": "feat/cli-015-typed-record-symbol-workflows", + "pr_title": "Adopt typed record and symbol commands with safe workflow policy", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-015.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Delegate CE mutation semantics to SDK while retaining high-level IDs, snapshots and trust policy.", + "body_template": "\n\n## CLI-015 — Adopt typed record and symbol commands with safe workflow policy\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M4\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nClient record mutation uses Parent/destroy via generic SDK object/Lua access and can mutate before snapshot refresh fails.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nDelegate CE mutation semantics to SDK while retaining high-level IDs, snapshots and trust policy.\n\n**Expected benefit:** Delegate CE mutation semantics to SDK while retaining high-level IDs, snapshots and trust policy.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Replace raw property/method operations with typed SDK commands.\n- [ ] Represent command success separately from snapshot refresh.\n- [ ] Keep table-root and raw-script opt-in defaults without claiming path checks sandbox content.\n\n### Acceptance criteria\n\n- [ ] No built-in Client adapter repairs CE record ownership through raw stack code.\n- [ ] Delete remains explicit; disposing a borrowed snapshot cannot destroy GUI data.\n- [ ] Post-mutation refresh failure preserves the completed effect.\n\n### Required validation\n\n- [ ] Missing/cyclic/self-parent records and snapshot failure after mutation.\n- [ ] Denied roots, observed reparse points and explicit trust assumptions.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E05}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-021}}\n- {{issue:SDK-023}}\n- {{issue:CLI-008}}\n- {{issue:CLI-009}}\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-015-typed-record-symbol-workflows`\n\nPR title: **Adopt typed record and symbol commands with safe workflow policy**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nA generic helper relocation alone does not fix ownership; safe path defaults do not eliminate TOCTOU.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C12 — Prior audit: Parent/destroy semantics and mutation/snapshot ambiguity.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkTableRecordMutationPort.cs)\n- [C18 — Prior audit: table-root allowlist and documented path TOCTOU limitation.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/CoreClientPolicy.cs)\n- [C02 — Prior audit: built-in CE Lua declarations remain Client-owned.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/ClientLuaGlobals.cs)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-016", + "repository_key": "client", + "kind": "feature", + "title": "Adopt qualified SDK value-scan sessions", + "parent": "CLI-E06", + "epic": "CLI-E06", + "milestone": "CLI-M5", + "priority": "P2", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The SDK factory exists but the current Client deliberately registers an unavailable value-scanner implementation.", + "objective": "Deliver one high-level scan-session vertical slice after its factory, artifact and live gates pass.", + "requirements": [ + "Wrap the SDK-created owner; never reconstruct it from borrowed handles.", + "Define Client request validation, session transitions, progress and copied result limits.", + "Keep unsupported transitions/host profiles explicitly unavailable." + ], + "acceptance": [ + "The enabled adapter links the qualified factory and first-containing package.", + "Every transition has failure/cleanup and target-change coverage.", + "No source-only or interface-only status is advertised as live support." + ], + "tests": [ + "SDK conformance plus Client success/failure/state-transition fixtures.", + "Live enable/disable/re-enable/target-change scan session." + ], + "risks": "UI-friendly progress cannot substitute for a qualified native cancellation contract.", + "blocked_by": [ + "SDK-015", + "SDK-023", + "CLI-009", + "CLI-002" + ], + "sources": [ + "S03", + "C14", + "C21" + ], + "branch": "feat/cli-016-value-scan-adoption", + "pr_title": "Adopt qualified SDK value-scan sessions", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P2" + ], + "path": "docs/engineering/work-items/CLI-016.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Deliver one high-level scan-session vertical slice after its factory, artifact and live gates pass.", + "body_template": "\n\n## CLI-016 — Adopt qualified SDK value-scan sessions\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P2 · **Milestone:** CLI-M5\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe SDK factory exists but the current Client deliberately registers an unavailable value-scanner implementation.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nDeliver one high-level scan-session vertical slice after its factory, artifact and live gates pass.\n\n**Expected benefit:** Deliver one high-level scan-session vertical slice after its factory, artifact and live gates pass.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Wrap the SDK-created owner; never reconstruct it from borrowed handles.\n- [ ] Define Client request validation, session transitions, progress and copied result limits.\n- [ ] Keep unsupported transitions/host profiles explicitly unavailable.\n\n### Acceptance criteria\n\n- [ ] The enabled adapter links the qualified factory and first-containing package.\n- [ ] Every transition has failure/cleanup and target-change coverage.\n- [ ] No source-only or interface-only status is advertised as live support.\n\n### Required validation\n\n- [ ] SDK conformance plus Client success/failure/state-transition fixtures.\n- [ ] Live enable/disable/re-enable/target-change scan session.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E06}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-015}}\n- {{issue:SDK-023}}\n- {{issue:CLI-009}}\n- {{issue:CLI-002}}\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-016-value-scan-adoption`\n\nPR title: **Adopt qualified SDK value-scan sessions**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nUI-friendly progress cannot substitute for a qualified native cancellation contract.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [S03 — Prior audit: new factory already exists; qualify, do not recreate.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Scanning/Values/MemoryScanSessions.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-017", + "repository_key": "client", + "kind": "feature", + "title": "Adopt target-bound allocation and patch leases", + "parent": "CLI-E06", + "epic": "CLI-E06", + "milestone": "CLI-M5", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The Client has gated allocation/assembly contracts; SDK main contains underlying primitives that need target and handoff qualification.", + "objective": "Expose separate high-level allocation and patch workflows that compose qualified SDK owners.", + "requirements": [ + "Use explicit opt-in and safe defaults; do not rebuild disable-info or raw deallocation.", + "Capture activation/target identity and track owner transfer failure.", + "Split allocation and patch implementation into two focused PRs under this work item if they require independent review." + ], + "acceptance": [ + "A stale lease cannot mutate or release against a different target.", + "A failure after native success retains cleanup authority or reports unknown effect.", + "Availability records the exact SDK/live evidence for each workflow separately." + ], + "tests": [ + "Owner creation/tracking/publication failure and double disposal.", + "Live target switch and partial cleanup for allocation and patch independently." + ], + "risks": "Patch scripts are privileged in-process operations, not sandboxed statements. Separate outcomes prevent unsafe retries.", + "blocked_by": [ + "SDK-011", + "SDK-017", + "SDK-023", + "CLI-009", + "CLI-008" + ], + "sources": [ + "S04", + "S05", + "C14", + "C21" + ], + "branch": "feat/cli-017-allocation-patch-leases", + "pr_title": "Adopt target-bound allocation and patch leases", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-017.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Expose separate high-level allocation and patch workflows that compose qualified SDK owners.", + "body_template": "\n\n## CLI-017 — Adopt target-bound allocation and patch leases\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M5\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe Client has gated allocation/assembly contracts; SDK main contains underlying primitives that need target and handoff qualification.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nExpose separate high-level allocation and patch workflows that compose qualified SDK owners.\n\n**Expected benefit:** Expose separate high-level allocation and patch workflows that compose qualified SDK owners.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Use explicit opt-in and safe defaults; do not rebuild disable-info or raw deallocation.\n- [ ] Capture activation/target identity and track owner transfer failure.\n- [ ] Split allocation and patch implementation into two focused PRs under this work item if they require independent review.\n\n### Acceptance criteria\n\n- [ ] A stale lease cannot mutate or release against a different target.\n- [ ] A failure after native success retains cleanup authority or reports unknown effect.\n- [ ] Availability records the exact SDK/live evidence for each workflow separately.\n\n### Required validation\n\n- [ ] Owner creation/tracking/publication failure and double disposal.\n- [ ] Live target switch and partial cleanup for allocation and patch independently.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E06}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-011}}\n- {{issue:SDK-017}}\n- {{issue:SDK-023}}\n- {{issue:CLI-009}}\n- {{issue:CLI-008}}\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-017-allocation-patch-leases`\n\nPR title: **Adopt target-bound allocation and patch leases**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nPatch scripts are privileged in-process operations, not sandboxed statements. Separate outcomes prevent unsafe retries.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [S04 — Prior audit: current-target allocation bindings.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Allocation/LuaTargetMemoryAllocationOperations.cs)\n- [S05 — Prior audit: patch and disable-info ownership handoff.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Assembly/AutoAssemblerPatcher.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-018", + "repository_key": "client", + "kind": "research", + "title": "Define gated debugger and subscription workflow adapters", + "parent": "CLI-E06", + "epic": "CLI-E06", + "milestone": "CLI-M5", + "priority": "P2", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Debugger, timer and hotkey contracts are currently unavailable; a copied-event stream exists separately.", + "objective": "Specify Client-friendly synchronous decisions and subscription workflows over qualified SDK mechanisms.", + "requirements": [ + "Keep native continuation decisions synchronous and distinguish them from async observations.", + "Delegate callback/thunk/rooting/unregister to SDK leases.", + "Enable each producer only after its own host/cleanup qualification and policy review." + ], + "acceptance": [ + "No async consumer is responsible for unblocking a native debug event.", + "Expired activations cannot receive native callbacks.", + "Unavailable status persists where an SDK producer is not qualified." + ], + "tests": [ + "Decision versus observation contract fixtures.", + "Late callback, slow reader and teardown races with real qualified producers." + ], + "risks": "This specification is not permission to implement a second debugger backend in Client.", + "blocked_by": [ + "SDK-018", + "SDK-019", + "CLI-019", + "CLI-009" + ], + "sources": [ + "C14", + "C15", + "U01" + ], + "branch": "feat/cli-018-advanced-event-workflows", + "pr_title": "Define gated debugger and subscription workflow adapters", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:research", + "ce:priority:P2" + ], + "path": "docs/engineering/work-items/CLI-018.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Specify Client-friendly synchronous decisions and subscription workflows over qualified SDK mechanisms.", + "body_template": "\n\n## CLI-018 — Define gated debugger and subscription workflow adapters\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** research · **Priority:** P2 · **Milestone:** CLI-M5\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nDebugger, timer and hotkey contracts are currently unavailable; a copied-event stream exists separately.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nSpecify Client-friendly synchronous decisions and subscription workflows over qualified SDK mechanisms.\n\n**Expected benefit:** Specify Client-friendly synchronous decisions and subscription workflows over qualified SDK mechanisms.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Keep native continuation decisions synchronous and distinguish them from async observations.\n- [ ] Delegate callback/thunk/rooting/unregister to SDK leases.\n- [ ] Enable each producer only after its own host/cleanup qualification and policy review.\n\n### Acceptance criteria\n\n- [ ] No async consumer is responsible for unblocking a native debug event.\n- [ ] Expired activations cannot receive native callbacks.\n- [ ] Unavailable status persists where an SDK producer is not qualified.\n\n### Required validation\n\n- [ ] Decision versus observation contract fixtures.\n- [ ] Late callback, slow reader and teardown races with real qualified producers.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E06}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-018}}\n- {{issue:SDK-019}}\n- {{issue:CLI-019}}\n- {{issue:CLI-009}}\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-018-advanced-event-workflows`\n\nPR title: **Define gated debugger and subscription workflow adapters**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nThis specification is not permission to implement a second debugger backend in Client.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs)\n- [U01 — Historical loader/tables/callback dispatch comparison.](https://github.com/cheat-engine/cheat-engine/blob/ec45d5f47f92a239ba0bf51ec5d04a7509c3fd37/Cheat%20Engine/plugin.pas)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-019", + "repository_key": "client", + "kind": "feature", + "title": "Bound event consumers and specify stream completion", + "parent": "CLI-E07", + "epic": "CLI-E07", + "milestone": "CLI-M5", + "priority": "P2", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "The prior audit observes a bounded event ring but an independent linked list of pending reads and multiple enumerators. The implementation uses a lock.", + "objective": "Define a bounded observation-delivery contract beyond the ring capacity alone.", + "requirements": [ + "Choose single-reader default or explicitly bounded competing-reader behavior; do not imply broadcast.", + "Specify disposal of an enumerator with a pending read, cancellation, fairness and loss counts.", + "Keep continuations asynchronous and payloads copied; measure lock contention rather than call it lock-free." + ], + "acceptance": [ + "Pending reader memory is bounded or excess readers are rejected.", + "Disposal/cancellation cannot strand pending reads.", + "Dropped observations never discard required native decisions." + ], + "tests": [ + "Many readers, canceled pending read, close/complete/dispose and overflow fixtures.", + "Publication latency under a slow consumer." + ], + "risks": "Changing queue implementation for fashion can break loss/ordering/completion semantics; qualify the contract first.", + "blocked_by": [], + "sources": [ + "C15", + "C01" + ], + "branch": "feat/cli-019-bounded-event-consumers", + "pr_title": "Bound event consumers and specify stream completion", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-018" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P2" + ], + "path": "docs/engineering/work-items/CLI-019.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Define a bounded observation-delivery contract beyond the ring capacity alone.", + "body_template": "\n\n## CLI-019 — Bound event consumers and specify stream completion\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P2 · **Milestone:** CLI-M5\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nThe prior audit observes a bounded event ring but an independent linked list of pending reads and multiple enumerators. The implementation uses a lock.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nDefine a bounded observation-delivery contract beyond the ring capacity alone.\n\n**Expected benefit:** Define a bounded observation-delivery contract beyond the ring capacity alone.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Choose single-reader default or explicitly bounded competing-reader behavior; do not imply broadcast.\n- [ ] Specify disposal of an enumerator with a pending read, cancellation, fairness and loss counts.\n- [ ] Keep continuations asynchronous and payloads copied; measure lock contention rather than call it lock-free.\n\n### Acceptance criteria\n\n- [ ] Pending reader memory is bounded or excess readers are rejected.\n- [ ] Disposal/cancellation cannot strand pending reads.\n- [ ] Dropped observations never discard required native decisions.\n\n### Required validation\n\n- [ ] Many readers, canceled pending read, close/complete/dispose and overflow fixtures.\n- [ ] Publication latency under a slow consumer.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E07}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\n- {{issue:CLI-018}}\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-019-bounded-event-consumers`\n\nPR title: **Bound event consumers and specify stream completion**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nChanging queue implementation for fashion can break loss/ordering/completion semantics; qualify the contract first.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-020", + "repository_key": "client", + "kind": "governance", + "title": "Standardize fluent terminals and supported workflow examples", + "parent": "CLI-E07", + "epic": "CLI-E07", + "milestone": "CLI-M4", + "priority": "P2", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Existing immutable builders and explicit cardinality terminals are useful. Public interfaces also include unavailable domains that require clear status.", + "objective": "Improve discoverability without replacing the existing fluent model or exposing low-level complexity.", + "requirements": [ + "Keep configuration side-effect free and execution terminals explicit.", + "Describe ordering, absence, limits, cancellation milestones and cleanup near each supported operation.", + "Compile examples against shipped packages; label research APIs and unavailable domains before examples." + ], + "acceptance": [ + "Examples cover success, expected failure and cleanup for each supported workflow.", + "Fluent names match actual guarantees; compatibility aliases preserve old callers.", + "No claim of safe/atomic/async/zero-allocation lacks a precise contract." + ], + "tests": [ + "Template/example compilation in clean consumers.", + "Default builder, ambiguous cardinality and old public API tests." + ], + "risks": "A huge facade is not delivered capability. Avoid adding placeholder interfaces only to increase API count.", + "blocked_by": [ + "CLI-002", + "CLI-013" + ], + "sources": [ + "C01", + "C16", + "N03" + ], + "branch": "docs/cli-020-fluent-developer-guidance", + "pr_title": "Standardize fluent terminals and supported workflow examples", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:governance", + "ce:priority:P2" + ], + "path": "docs/engineering/work-items/CLI-020.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Improve discoverability without replacing the existing fluent model or exposing low-level complexity.", + "body_template": "\n\n## CLI-020 — Standardize fluent terminals and supported workflow examples\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** governance · **Priority:** P2 · **Milestone:** CLI-M4\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nExisting immutable builders and explicit cardinality terminals are useful. Public interfaces also include unavailable domains that require clear status.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nImprove discoverability without replacing the existing fluent model or exposing low-level complexity.\n\n**Expected benefit:** Improve discoverability without replacing the existing fluent model or exposing low-level complexity.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Keep configuration side-effect free and execution terminals explicit.\n- [ ] Describe ordering, absence, limits, cancellation milestones and cleanup near each supported operation.\n- [ ] Compile examples against shipped packages; label research APIs and unavailable domains before examples.\n\n### Acceptance criteria\n\n- [ ] Examples cover success, expected failure and cleanup for each supported workflow.\n- [ ] Fluent names match actual guarantees; compatibility aliases preserve old callers.\n- [ ] No claim of safe/atomic/async/zero-allocation lacks a precise contract.\n\n### Required validation\n\n- [ ] Template/example compilation in clean consumers.\n- [ ] Default builder, ambiguous cardinality and old public API tests.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E07}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:CLI-002}}\n- {{issue:CLI-013}}\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `docs/cli-020-fluent-developer-guidance`\n\nPR title: **Standardize fluent terminals and supported workflow examples**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nA huge facade is not delivered capability. Avoid adding placeholder interfaces only to increase API count.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [C16 — Prior audit: immutable terminals, post-filter limits, readability naming.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Fluent/Scanning/AobScanBuilder.cs)\n- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-021", + "repository_key": "client", + "kind": "feature", + "title": "Unify stale-client and local-process operation semantics", + "parent": "CLI-E07", + "epic": "CLI-E07", + "milestone": "CLI-M1", + "priority": "P2", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Some local process enumeration/unavailable paths bypass normal Client dispatch. Local BCL metadata is not proof of CE backend target identity.", + "objective": "Make activation requirements explicit for stateful operations and separate legitimate offline diagnostics.", + "requirements": [ + "Apply stale-client policy consistently before operational work, even for unavailable implementations.", + "Label local process discovery/enrichment as local; no speculative remote backend.", + "Document cancellation ordering and keep pure immutable snapshots usable where intended." + ], + "acceptance": [ + "Disable/re-enable does not produce different lifetime behavior by domain accident.", + "Offline diagnostics have a separate explicit contract.", + "Local process metadata is never mistaken for authoritative SDK target identity." + ], + "tests": [ + "Stale facade across local, implemented and unavailable domains.", + "Canceled enumeration and disappearing local process fixtures." + ], + "risks": "Adding lifetime exceptions indiscriminately can remove useful offline diagnostics; name that boundary deliberately.", + "blocked_by": [], + "sources": [ + "C06", + "C14", + "C01" + ], + "branch": "feat/cli-021-stale-local-operation-policy", + "pr_title": "Unify stale-client and local-process operation semantics", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P2" + ], + "path": "docs/engineering/work-items/CLI-021.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Make activation requirements explicit for stateful operations and separate legitimate offline diagnostics.", + "body_template": "\n\n## CLI-021 — Unify stale-client and local-process operation semantics\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P2 · **Milestone:** CLI-M1\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nSome local process enumeration/unavailable paths bypass normal Client dispatch. Local BCL metadata is not proof of CE backend target identity.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nMake activation requirements explicit for stateful operations and separate legitimate offline diagnostics.\n\n**Expected benefit:** Make activation requirements explicit for stateful operations and separate legitimate offline diagnostics.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Apply stale-client policy consistently before operational work, even for unavailable implementations.\n- [ ] Label local process discovery/enrichment as local; no speculative remote backend.\n- [ ] Document cancellation ordering and keep pure immutable snapshots usable where intended.\n\n### Acceptance criteria\n\n- [ ] Disable/re-enable does not produce different lifetime behavior by domain accident.\n- [ ] Offline diagnostics have a separate explicit contract.\n- [ ] Local process metadata is never mistaken for authoritative SDK target identity.\n\n### Required validation\n\n- [ ] Stale facade across local, implemented and unavailable domains.\n- [ ] Canceled enumeration and disappearing local process fixtures.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E07}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-021-stale-local-operation-policy`\n\nPR title: **Unify stale-client and local-process operation semantics**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nAdding lifetime exceptions indiscriminately can remove useful offline diagnostics; name that boundary deliberately.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs)\n- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-022", + "repository_key": "client", + "kind": "validation", + "title": "Validate minimum SDK artifacts and public compatibility", + "parent": "CLI-E08", + "epic": "CLI-E08", + "milestone": "CLI-M6", + "priority": "P1", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Client publishes a compatible SDK range, but source availability, package content and behavioral support are not equivalent.", + "objective": "Test packed Client consumption against the exact minimum and selected newer SDK artifacts.", + "requirements": [ + "Record source/package/bridge/generator identity for each test combination.", + "Preserve direct SDK bootstrap/native asset reference rules.", + "Test old source, old binaries where supported, application interface implementations and generated consumers." + ], + "acceptance": [ + "No sibling project reference masks missing published members.", + "Required interface changes and failure/cancellation semantics have migration notes.", + "The declared range is not described as a fully tested set of all possible packages." + ], + "tests": [ + "Minimal plugin, custom codec/module, relay library and old application fakes.", + "AOT graph publication separate from managed live plugin loading." + ], + "risks": "Moving public types between assemblies can break binary identity even with unchanged namespaces.", + "blocked_by": [ + "SDK-023", + "CLI-007", + "CLI-010", + "CLI-011" + ], + "sources": [ + "C19", + "C20", + "C01", + "N03" + ], + "branch": "test/cli-022-package-compatibility-matrix", + "pr_title": "Validate minimum SDK artifacts and public compatibility", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-023", + "CLI-024" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:validation", + "ce:priority:P1" + ], + "path": "docs/engineering/work-items/CLI-022.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Test packed Client consumption against the exact minimum and selected newer SDK artifacts.", + "body_template": "\n\n## CLI-022 — Validate minimum SDK artifacts and public compatibility\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** validation · **Priority:** P1 · **Milestone:** CLI-M6\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nClient publishes a compatible SDK range, but source availability, package content and behavioral support are not equivalent.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nTest packed Client consumption against the exact minimum and selected newer SDK artifacts.\n\n**Expected benefit:** Test packed Client consumption against the exact minimum and selected newer SDK artifacts.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Record source/package/bridge/generator identity for each test combination.\n- [ ] Preserve direct SDK bootstrap/native asset reference rules.\n- [ ] Test old source, old binaries where supported, application interface implementations and generated consumers.\n\n### Acceptance criteria\n\n- [ ] No sibling project reference masks missing published members.\n- [ ] Required interface changes and failure/cancellation semantics have migration notes.\n- [ ] The declared range is not described as a fully tested set of all possible packages.\n\n### Required validation\n\n- [ ] Minimal plugin, custom codec/module, relay library and old application fakes.\n- [ ] AOT graph publication separate from managed live plugin loading.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E08}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:SDK-023}}\n- {{issue:CLI-007}}\n- {{issue:CLI-010}}\n- {{issue:CLI-011}}\n\n### Blocks\n\n- {{issue:CLI-023}}\n- {{issue:CLI-024}}\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `test/cli-022-package-compatibility-matrix`\n\nPR title: **Validate minimum SDK artifacts and public compatibility**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nMoving public types between assemblies can break binary identity even with unchanged namespaces.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json)\n- [C20 — Prior audit: approved SDK values versus broad compile/runtime dependency.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/CheatEngine.Client.Abstractions.csproj)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-023", + "repository_key": "client", + "kind": "feature", + "title": "Verify coherent deployment sets and external plugin inheritance", + "parent": "CLI-E08", + "epic": "CLI-E08", + "milestone": "CLI-M6", + "priority": "P2", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "Hosting build tooling performs per-file deployment and metadata inheritance checks. A build-only filesystem P/Invoke is not a runtime CE bypass.", + "objective": "Make deployment/profile validation truthful, failure-aware and compatible with documented plugin inheritance.", + "requirements": [ + "Produce a file/hash manifest and detect stale or mixed SDK/bridge/Client outputs.", + "Prefer versioned staging where supported; otherwise report partial replacement and require an explicit offline deployment policy.", + "Resolve external base metadata without executing user assemblies, or document the supported inheritance restriction." + ], + "acceptance": [ + "A failed second file replacement reports the installed subset.", + "Stale manifest-owned files are detected without deleting arbitrary user files.", + "An external shared base is either supported by a tested resolver or rejected with precise guidance." + ], + "tests": [ + "Partial deployment, locked file, missing bridge and stale-version tests.", + "Direct, same-assembly, external-base, manual/generated bootstrap consumer fixtures." + ], + "risks": "Do not claim directory atomicity or safe hot reload; do not automatically modify CE runtime configuration.", + "blocked_by": [ + "CLI-022" + ], + "sources": [ + "C17", + "C01", + "S11" + ], + "branch": "feat/cli-023-deployment-profile-integrity", + "pr_title": "Verify coherent deployment sets and external plugin inheritance", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [ + "CLI-024" + ], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan.", + "labels": [ + "ce:bootstrap", + "ce:kind:feature", + "ce:priority:P2" + ], + "path": "docs/engineering/work-items/CLI-023.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Make deployment/profile validation truthful, failure-aware and compatible with documented plugin inheritance.", + "body_template": "\n\n## CLI-023 — Verify coherent deployment sets and external plugin inheritance\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P2 · **Milestone:** CLI-M6\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nHosting build tooling performs per-file deployment and metadata inheritance checks. A build-only filesystem P/Invoke is not a runtime CE bypass.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nMake deployment/profile validation truthful, failure-aware and compatible with documented plugin inheritance.\n\n**Expected benefit:** Make deployment/profile validation truthful, failure-aware and compatible with documented plugin inheritance.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Produce a file/hash manifest and detect stale or mixed SDK/bridge/Client outputs.\n- [ ] Prefer versioned staging where supported; otherwise report partial replacement and require an explicit offline deployment policy.\n- [ ] Resolve external base metadata without executing user assemblies, or document the supported inheritance restriction.\n\n### Acceptance criteria\n\n- [ ] A failed second file replacement reports the installed subset.\n- [ ] Stale manifest-owned files are detected without deleting arbitrary user files.\n- [ ] An external shared base is either supported by a tested resolver or rejected with precise guidance.\n\n### Required validation\n\n- [ ] Partial deployment, locked file, missing bridge and stale-version tests.\n- [ ] Direct, same-assembly, external-base, manual/generated bootstrap consumer fixtures.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E08}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:CLI-022}}\n\n### Blocks\n\n- {{issue:CLI-024}}\n\n### Package and readiness gate\n\nIdentify the first containing artifact before describing new source as consumable support. No version is invented by this plan.\n\n### Proposed branch and PR\n\nBranch: `feat/cli-023-deployment-profile-integrity`\n\nPR title: **Verify coherent deployment sets and external plugin inheritance**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nDo not claim directory atomicity or safe hot reload; do not automatically modify CE runtime configuration.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C17 — Prior audit: build-only native calls, external-base checks and per-file deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/buildTransitive/CheatEngine.Client.Hosting.targets)\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [S11 — Protected native boundary and bridge contract reference.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/native/cheatengine-sdk-lua-bridge/README.md)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + }, + { + "id": "CLI-024", + "repository_key": "client", + "kind": "validation", + "title": "Publish end-to-end qualification and performance budgets", + "parent": "CLI-E08", + "epic": "CLI-E08", + "milestone": "CLI-M6", + "priority": "P2", + "evidence": "InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.", + "observation": "No .NET/live-host/benchmark execution was performed by the audit summaries or this bootstrap. Planned acceptance tests require actual recorded results.", + "objective": "Qualify the release scope from developer workflow through SDK/host behavior and cleanup.", + "requirements": [ + "Measure primitive, dispatch, batch, snapshot, codec, AOB and event paths separately.", + "Record CLR allocations, available Lua/native metrics, boundary calls and latency distributions.", + "Run declared success/failure/disable/re-enable/target-change scenarios on a purpose-built target." + ], + "acceptance": [ + "No performance improvement weakens error, lifetime, target or cancellation semantics.", + "Source/package/live/AOT publication results remain independently labeled.", + "Only qualified workflows are advertised; deferred advanced domains remain visible." + ], + "tests": [ + "Direct SDK versus immediate/queued Client and equal-semantics batch comparisons.", + "Controlled live plugin and two-plugin regression profiles." + ], + "risks": "Pooling retained contexts or exposing borrowed spans to claim zero allocations would invalidate the safety model.", + "blocked_by": [ + "CLI-022", + "CLI-023", + "SDK-024" + ], + "sources": [ + "C01", + "C21", + "C03", + "C15", + "S13" + ], + "branch": "test/cli-024-release-performance-evidence", + "pr_title": "Publish end-to-end qualification and performance budgets", + "scope_exclusions": [ + "No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.", + "Keep integration mechanisms in SDK and application policy/workflows in Client." + ], + "completion_artifacts": [ + "Focused PR linked to the implementation issue.", + "Commands, environment and actual regression results; unexecuted cases remain pending.", + "Updated contract/capability documentation and compatibility notes." + ], + "mandatory": "Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.", + "children": [], + "blocks": [], + "status": "Needs refinement", + "repository": "CheatEngineNet/CheatEngine.Client", + "artifact_gate": "Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.", + "labels": [ + "ce:bootstrap", + "ce:kind:validation", + "ce:priority:P2" + ], + "path": "docs/engineering/work-items/CLI-024.md", + "long_term_impact": "One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.", + "benefits": "Qualify the release scope from developer workflow through SDK/host behavior and cleanup.", + "body_template": "\n\n## CLI-024 — Publish end-to-end qualification and performance budgets\n\n**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** validation · **Priority:** P2 · **Milestone:** CLI-M6\n\n**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap.\n\n### Context and evidence\n\nNo .NET/live-host/benchmark execution was performed by the audit summaries or this bootstrap. Planned acceptance tests require actual recorded results.\n\n**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation.\n\n### Outcome and rationale\n\nQualify the release scope from developer workflow through SDK/host behavior and cleanup.\n\n**Expected benefit:** Qualify the release scope from developer workflow through SDK/host behavior and cleanup.\n\n### Architectural responsibility\n\nSDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience.\n\n### Technical requirements and task checklist\n\n- [ ] Measure primitive, dispatch, batch, snapshot, codec, AOB and event paths separately.\n- [ ] Record CLR allocations, available Lua/native metrics, boundary calls and latency distributions.\n- [ ] Run declared success/failure/disable/re-enable/target-change scenarios on a purpose-built target.\n\n### Acceptance criteria\n\n- [ ] No performance improvement weakens error, lifetime, target or cancellation semantics.\n- [ ] Source/package/live/AOT publication results remain independently labeled.\n- [ ] Only qualified workflows are advertised; deferred advanced domains remain visible.\n\n### Required validation\n\n- [ ] Direct SDK versus immediate/queued Client and equal-semantics batch comparisons.\n- [ ] Controlled live plugin and two-plugin regression profiles.\n\n### Scope exclusions\n\n- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes.\n- Keep integration mechanisms in SDK and application policy/workflows in Client.\n\n### Parent and children\n\nParent: {{issue:CLI-E08}}\n\nImplementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome.\n\n### Blocked by\n\n- {{issue:CLI-022}}\n- {{issue:CLI-023}}\n- {{issue:SDK-024}}\n\n### Blocks\n\nNone declared. This does not waive evidence, policy, or package requirements.\n\n### Package and readiness gate\n\nBefore Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions.\n\n### Proposed branch and PR\n\nBranch: `test/cli-024-release-performance-evidence`\n\nPR title: **Publish end-to-end qualification and performance budgets**\n\nOpen against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch.\n\n### Risks and compatibility\n\nPooling retained contexts or exposing borrowed spans to claim zero allocations would invalidate the safety model.\n\n**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable.\n\n### Definition of done\n\n- [ ] Focused PR linked to the implementation issue.\n- [ ] Commands, environment and actual regression results; unexecuted cases remain pending.\n- [ ] Updated contract/capability documentation and compatibility notes.\n\nRequired for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented.\n\n### Sources\n\n- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md)\n- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md)\n- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs)\n- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs)\n- [S13 — Live fixture entry point, identified in contribution guidance.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/tests/CheatEngine.SDK.LivePlugin/README.md)\n\n### Maintainer notes\n\nKeep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun.\n" + } + ], + "milestones": [ + { + "id": "CLI-M0", + "repository_key": "client", + "title": "M0 — Governance and capability truth", + "objective": "Governance and capability truth", + "entry_criteria": "Issue-level prerequisites satisfied; this milestone is an outcome grouping, not an artificial global serial lock.", + "exit_criteria": "Public status separates implementation, artifact, host qualification and policy.", + "due_on": null, + "release_version": null + }, + { + "id": "CLI-M1", + "repository_key": "client", + "title": "M1 — Reliability and activation integrity", + "objective": "Reliability and activation integrity", + "entry_criteria": "Issue-level prerequisites satisfied; this milestone is an outcome grouping, not an artificial global serial lock.", + "exit_criteria": "No-target, retained-codec and construction-rollback tests match production semantics.", + "due_on": null, + "release_version": null + }, + { + "id": "CLI-M2", + "repository_key": "client", + "title": "M2 — SDK boundary adoption", + "objective": "SDK boundary adoption", + "entry_criteria": "Issue-level prerequisites satisfied; this milestone is an outcome grouping, not an artificial global serial lock.", + "exit_criteria": "Built-in integration delegates to shipped SDK contracts with preserved outcomes.", + "due_on": null, + "release_version": null + }, + { + "id": "CLI-M3", + "repository_key": "client", + "title": "M3 — Modules and public API boundaries", + "objective": "Modules and public API boundaries", + "entry_criteria": "Issue-level prerequisites satisfied; this milestone is an outcome grouping, not an artificial global serial lock.", + "exit_criteria": "Generated public contracts contain no raw state/owner escape; activation/module lifetime tested.", + "due_on": null, + "release_version": null + }, + { + "id": "CLI-M4", + "repository_key": "client", + "title": "M4 — Workflow and fluent correctness", + "objective": "Workflow and fluent correctness", + "entry_criteria": "Issue-level prerequisites satisfied; this milestone is an outcome grouping, not an artificial global serial lock.", + "exit_criteria": "Cardinality, partial effects, budgets and fluent names are truthful and documented.", + "due_on": null, + "release_version": null + }, + { + "id": "CLI-M5", + "repository_key": "client", + "title": "M5 — Evidence-gated advanced workflows", + "objective": "Evidence-gated advanced workflows", + "entry_criteria": "Issue-level prerequisites satisfied; this milestone is an outcome grouping, not an artificial global serial lock.", + "exit_criteria": "Only workflows with target/ownership/cleanup evidence are enabled.", + "due_on": null, + "release_version": null + }, + { + "id": "CLI-M6", + "repository_key": "client", + "title": "M6 — Packaging and developer readiness", + "objective": "Packaging and developer readiness", + "entry_criteria": "Issue-level prerequisites satisfied; this milestone is an outcome grouping, not an artificial global serial lock.", + "exit_criteria": "Clean consumer/template/deployment/live results independently recorded.", + "due_on": null, + "release_version": null + } + ], + "external_dependencies": [ + { + "blocker": "SDK-008", + "blocked": "CLI-007", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-023", + "blocked": "CLI-007", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-007", + "blocked": "CLI-008", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-023", + "blocked": "CLI-008", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-010", + "blocked": "CLI-009", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-011", + "blocked": "CLI-009", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-023", + "blocked": "CLI-009", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-009", + "blocked": "CLI-010", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-022", + "blocked": "CLI-010", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-023", + "blocked": "CLI-010", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-005", + "blocked": "CLI-012", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-014", + "blocked": "CLI-013", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-023", + "blocked": "CLI-013", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-013", + "blocked": "CLI-014", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-021", + "blocked": "CLI-015", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-023", + "blocked": "CLI-015", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-015", + "blocked": "CLI-016", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-023", + "blocked": "CLI-016", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-011", + "blocked": "CLI-017", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-017", + "blocked": "CLI-017", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-023", + "blocked": "CLI-017", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-018", + "blocked": "CLI-018", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-019", + "blocked": "CLI-018", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-023", + "blocked": "CLI-022", + "cross_repository": true, + "relationship": "blocked_by" + }, + { + "blocker": "SDK-024", + "blocked": "CLI-024", + "cross_repository": true, + "relationship": "blocked_by" + } + ], + "evidence_limits": [ + "The review archive is validated context, not a source clone; no exact finding-ID reconciliation is claimed.", + "Pinned source references marked PriorAuditReference were not all re-read in this bootstrap.", + "No repository compilation, .NET tests, live CE tests or benchmarks executed.", + "Four connector mutations were attempted and all returned 403; no successful remote writes." + ] +} diff --git a/docs/engineering/work-items/CLI-001.md b/docs/engineering/work-items/CLI-001.md new file mode 100644 index 0000000..9fb1bdd --- /dev/null +++ b/docs/engineering/work-items/CLI-001.md @@ -0,0 +1,96 @@ + + +## CLI-001 — Reconcile Client audit evidence with source and consumed packages + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** governance · **Priority:** P1 · **Milestone:** CLI-M0 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The Client main revision matches the prior review. The prior complete ZIP is not locally available, and existing high-level APIs from PR #7 must not be recreated as missing. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Establish Client-specific provenance and a truthful theme-to-work-item crosswalk. + +**Expected benefit:** Establish Client-specific provenance and a truthful theme-to-work-item crosswalk. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Record Client/SDK commits, the actually consumed nupkg and source-only additions separately. +- [ ] Import original finding/ADR/test identifiers only from recovered original registers. +- [ ] Retain unavailable advanced implementations until their individual gates pass. + +### Acceptance criteria + +- [ ] No invented original finding ID or assertion of exhaustive archive coverage. +- [ ] Each Client adoption item identifies its corresponding SDK work item. +- [ ] Historical source statements are revalidated before changes. + +### Required validation + +- [ ] Ledger rejects source present as proof of packaged/live support. +- [ ] Cross-repository reference validator catches unresolved planning IDs. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/9 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/18 + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `docs/cli-001-evidence-reconciliation` + +PR title: **Reconcile Client audit evidence with source and consumed packages** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +The summaries are a usable planning basis, not a substitute for all detailed audit registers. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json) +- [H02 — Merged high-level API/modules; preserve this work.](https://github.com/CheatEngineNet/CheatEngine.Client/pull/7) +- [H01 — Merged foundations; author-reported tests are not independently executed.](https://github.com/CheatEngineNet/CheatEngine.SDK/pull/19) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-002.md b/docs/engineering/work-items/CLI-002.md new file mode 100644 index 0000000..ac0f063 --- /dev/null +++ b/docs/engineering/work-items/CLI-002.md @@ -0,0 +1,96 @@ + + +## CLI-002 — Separate capability implementation, host evidence, and policy + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M0 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Runtime capability probes and unavailable service registrations describe different support dimensions. Opting into unsafe Lua is policy, not proof of working host support. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Expose a small immutable capability model with explicit reasons and independently sourced dimensions. + +**Expected benefit:** Expose a small immutable capability model with explicit reasons and independently sourced dimensions. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Distinguish implemented, available in package, observed in host, live-qualified, policy-allowed and active-lifetime prerequisites. +- [ ] Do not treat every probe exception as unavailability; preserve unavailable versus present-but-failing. +- [ ] Generate documentation from the same ledger without auto-promoting discovered symbols. + +### Acceptance criteria + +- [ ] Every unavailable public domain explains its actual missing gate. +- [ ] Enabling an option cannot manufacture host evidence. +- [ ] Existing supported workflows remain discoverable without raw SDK details. + +### Required validation + +- [ ] Missing, throwing and malformed runtime global cases. +- [ ] Policy combinations and unavailable-adapter status tests. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/9 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/17 + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/32 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/36 + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `feat/cli-002-capability-evidence-model` + +PR title: **Separate capability implementation, host evidence, and policy** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Avoid a large generic capability framework; deterministic records and reasoned derivation are sufficient. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C09 — Prior audit: capability and exception-family mismatch.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/RuntimeClient.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-003.md b/docs/engineering/work-items/CLI-003.md new file mode 100644 index 0000000..b746e5a --- /dev/null +++ b/docs/engineering/work-items/CLI-003.md @@ -0,0 +1,97 @@ + + +## CLI-003 — Adopt Client governance, roadmap, and issue-to-PR workflow + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** governance · **Priority:** P1 · **Milestone:** CLI-M0 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Client has a mature README and existing ADR/build/live gates. This bootstrap must add management structure, not replace architecture or release policy. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Adopt additive planning documents, native issue hierarchy, blockers and review templates. + +**Expected benefit:** Adopt additive planning documents, native issue hierarchy, blockers and review templates. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Keep Issues as current execution state and Markdown as scope/architecture authority. +- [ ] Use focused branches from main only after readiness; no empty implementation branches for the entire backlog. +- [ ] Keep cross-repository blockers explicit and verify actual GitHub metadata separately from local plans. + +### Acceptance criteria + +- [ ] The documentation/tooling PR contains no product runtime changes. +- [ ] Roadmap, milestone, epic and task links are navigable after deployment. +- [ ] No automated merge, publication, reviewer assignment or branch protection change. + +### Required validation + +- [ ] Manifest, DAG, source and local link checks. +- [ ] Two-run deployment idempotency in a test repository. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/9 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `docs/cli-003-engineering-governance` + +PR title: **Adopt Client governance, roadmap, and issue-to-PR workflow** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +A PR is not a deployment of native project metadata, and a Markdown checklist is not a native sub-issue relation. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [G01 — Issue API; filter pull_request entries from issue lists.](https://docs.github.com/en/rest/issues/issues) +- [G02 — Repository-specific milestones.](https://docs.github.com/en/rest/issues/milestones) +- [G03 — Native hierarchy uses issue IDs, not issue numbers.](https://docs.github.com/en/rest/issues/sub-issues) +- [G04 — Native blocked-by relationship with the blocker issue_id.](https://docs.github.com/en/rest/issues/issue-dependencies) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-004.md b/docs/engineering/work-items/CLI-004.md new file mode 100644 index 0000000..012b036 --- /dev/null +++ b/docs/engineering/work-items/CLI-004.md @@ -0,0 +1,94 @@ + + +## CLI-004 — Align expected process failures with production dispatcher semantics + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** bug · **Priority:** P1 · **Milestone:** CLI-M1 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The prior audit traces expected no-target exceptions through a dispatcher that rethrows callback exceptions; a test fake can instead return false and mask the mismatch. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Return expected domain failures as typed outcomes without swallowing application callback bugs. + +**Expected benefit:** Return expected domain failures as typed outcomes without swallowing application callback bugs. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Classify no target, disappeared process and missing local metadata inside ProcessClient. +- [ ] Keep the general dispatcher policy for programmer/user callback exceptions explicit. +- [ ] Make contract fakes reproduce production exception transport rather than an easier imagined adapter. + +### Acceptance criteria + +- [ ] TryGetCurrent with PID zero returns the documented TargetNotAttached outcome. +- [ ] An arbitrary user Action exception still follows the dispatcher contract. +- [ ] Race-to-exit lookup failures have stable, documented semantics. + +### Required validation + +- [ ] Production-semantics dispatcher plus controlled process host. +- [ ] Composed regression for no-target, disappeared target and throwing user callback. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/10 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `fix/cli-004-process-try-semantics` + +PR title: **Align expected process failures with production dispatcher semantics** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Changing every dispatcher exception into false would hide defects and break a different contract. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs) +- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-005.md b/docs/engineering/work-items/CLI-005.md new file mode 100644 index 0000000..b31988f --- /dev/null +++ b/docs/engineering/work-items/CLI-005.md @@ -0,0 +1,95 @@ + + +## CLI-005 — Expire memory-codec contexts after each invocation + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** bug · **Priority:** P1 · **Milestone:** CLI-M1 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The prior audit describes a retainable reference context whose methods call SDK memory directly without an invocation expiration guard; pointer width is cached in that context. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Make custom-codec access valid only inside its original invocation. + +**Expected benefit:** Make custom-codec access valid only inside its original invocation. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Expire in finally on successful and failing codec calls. +- [ ] Validate active invocation, activation identity and allowed thread before any SDK operation, including scoped metadata access. +- [ ] Use current SDK facts now and strengthen target binding when the authoritative target contract is adopted; do not delay the local expiration fix. + +### Acceptance criteria + +- [ ] Retained references fail before invoking SDK after return or exception. +- [ ] Cross-thread and re-enable reuse cannot use a recycled invocation. +- [ ] Do not pool contexts while an old reference could reach a later invocation. + +### Required validation + +- [ ] Capture public context and invoke afterward with SDK call counters. +- [ ] PointerSize after expiration, codec exception, worker use and re-enable. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/10 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/30 + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `fix/cli-005-codec-context-lifetime` + +PR title: **Expire memory-codec contexts after each invocation** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +A ref-struct-only public redesign would be a separate compatibility decision; a small expiration guard can close the immediate lifetime gap. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs) +- [C04 — Public extension context with an implementation-enforced lifetime.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/Memory/IMemoryReadContext.cs) +- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-006.md b/docs/engineering/work-items/CLI-006.md new file mode 100644 index 0000000..31bb94d --- /dev/null +++ b/docs/engineering/work-items/CLI-006.md @@ -0,0 +1,95 @@ + + +## CLI-006 — Complete all activation rollback stages and preserve original errors + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** bug · **Priority:** P1 · **Milestone:** CLI-M1 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Prior review observes sequential unprotected scope/provider/configuration cleanup in partial CreateActivation, while normal cleanup already aggregates failures. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Use a consistent all-stages cleanup policy for partially and fully constructed activations. + +**Expected benefit:** Use a consistent all-stages cleanup policy for partially and fully constructed activations. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Attempt each owned cleanup stage independently and exactly as ownership permits. +- [ ] Preserve original construction failure before secondary cleanup diagnostics. +- [ ] Keep CE resource/module teardown before SDK detach; avoid double DI ownership. + +### Acceptance criteria + +- [ ] A throwing scope Dispose does not skip provider/configuration cleanup. +- [ ] The original enable failure remains identifiable. +- [ ] Normal disable order is preserved and repeated teardown is controlled. + +### Required validation + +- [ ] Failure during service resolution plus failing scope/provider/configuration disposables. +- [ ] Module-enable rollback and re-enable after failed activation. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/10 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/26 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/28 + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `fix/cli-006-activation-rollback` + +PR title: **Complete all activation rollback stages and preserve original errors** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Disposal aggregation is not permission to destroy a shared service twice or detach before admitted work drains. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-007.md b/docs/engineering/work-items/CLI-007.md new file mode 100644 index 0000000..1e968c1 --- /dev/null +++ b/docs/engineering/work-items/CLI-007.md @@ -0,0 +1,96 @@ + + +## CLI-007 — Replace built-in CE Lua declarations with SDK semantic operations + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M2 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The Client currently owns built-in CE names/signatures through ClientLuaGlobals despite using the SDK generator. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Make Client Core a semantic adapter, not a second CE mapping catalog. + +**Expected benefit:** Make Client Core a semantic adapter, not a second CE mapping catalog. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Replace every built-in declaration with its corresponding published SDK operation. +- [ ] Retain exact-name process ambiguity policy, table-root authorization and user-facing workflows. +- [ ] Update runtime architecture interpretation consistently instead of independently decoding targetIs64Bit. + +### Acceptance criteria + +- [ ] The reviewed eleven-name correspondence has no untracked duplicates. +- [ ] Unavailable/throwing/malformed outcomes retain SDK origin. +- [ ] Required minimum SDK artifact is part of the package contract. + +### Required validation + +- [ ] Semantic adapter parity fixtures for process/runtime/symbol/table operations. +- [ ] Clean consumer restore against minimum SDK artifact. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/11 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/36 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/51 + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/38 + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-007-adopt-sdk-semantic-operations` + +PR title: **Replace built-in CE Lua declarations with SDK semantic operations** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Do not remove working mappings before the replacement package is consumable; record temporary exceptions explicitly. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C02 — Prior audit: built-in CE Lua declarations remain Client-owned.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/ClientLuaGlobals.cs) +- [C09 — Prior audit: capability and exception-family mismatch.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/RuntimeClient.cs) +- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-008.md b/docs/engineering/work-items/CLI-008.md new file mode 100644 index 0000000..077029e --- /dev/null +++ b/docs/engineering/work-items/CLI-008.md @@ -0,0 +1,100 @@ + + +## CLI-008 — Preserve SDK failure provenance and partial effect information + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M2 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Prior audit: memory failures become strings/generic errors and generated false results may be labeled LuaError regardless of original cause. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Project SDK outcomes losslessly while keeping normal Client contracts handle-free. + +**Expected benefit:** Project SDK outcomes losslessly while keeping normal Client contracts handle-free. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Separate misuse, expected failure and integration failure. +- [ ] Keep optional diagnostics cold-path; do not parse message text. +- [ ] Add completed-step/effect fields for state-changing workflows and document compatibility changes. + +### Acceptance criteria + +- [ ] Missing global, host rejection, malformed result and Lua error remain distinct. +- [ ] An empty successful result does not mask unavailable capability. +- [ ] A post-mutation refresh failure does not imply no effect. + +### Required validation + +- [ ] Cross-layer outcome table using actual SDK fixture behavior. +- [ ] Old consumer compilation and exception/behavior compatibility tests. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/11 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/35 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/51 + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/29 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/30 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/31 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/33 + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-008-lossless-sdk-outcomes` + +PR title: **Preserve SDK failure provenance and partial effect information** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +A blanket result redesign can break application fakes; prefer additive overloads/adapters. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs) +- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs) +- [C11 — Prior audit: SDK delegation but ambiguous false becomes rejection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkAobScanPort.cs) +- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-009.md b/docs/engineering/work-items/CLI-009.md new file mode 100644 index 0000000..e9c5a26 --- /dev/null +++ b/docs/engineering/work-items/CLI-009.md @@ -0,0 +1,102 @@ + + +## CLI-009 — Bind Client workflows to authoritative SDK target identity + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M2 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Client observes selection changes through local snapshots. SDK-owned target identity is needed for future allocations, patches and stale queued operations. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Capture SDK target/activation authority for effectful workflow steps and high-level leases. + +**Expected benefit:** Capture SDK target/activation authority for effectful workflow steps and high-level leases. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Validate captured identity at actual execution, not only before waiting for dispatch. +- [ ] Keep pure copied snapshots distinct from live operations. +- [ ] Never release an old lease through the new current target or invisibly switch targets during cleanup. + +### Acceptance criteria + +- [ ] External target change invalidates affected workflow leases. +- [ ] PID reuse/A-to-B-to-A cannot silently reactivate an old lease. +- [ ] The local epoch is only a Client policy marker, not duplicated native authority. + +### Required validation + +- [ ] Queued work plus external target switch. +- [ ] Stale lease method/release, terminated process and same PID/new incarnation. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/11 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/38 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/39 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/51 + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/29 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/30 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/31 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/32 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/33 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/34 + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-009-target-bound-workflows` + +PR title: **Bind Client workflows to authoritative SDK target identity** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Only explicit original-target cleanup or safe refusal is acceptable under uncertain identity. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C08 — Prior audit: local observed epoch is not authoritative target identity.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/TargetSelectionLifetime.cs) +- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs) +- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-010.md b/docs/engineering/work-items/CLI-010.md new file mode 100644 index 0000000..a70bc82 --- /dev/null +++ b/docs/engineering/work-items/CLI-010.md @@ -0,0 +1,98 @@ + + +## CLI-010 — Use SDK registration leases for generated Lua modules + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M3 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The Client generator emits stack preflight/rollback while SDK generation already owns marshalling and closure generation. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Retain Client descriptors/order/policy and delegate registration safety to SDK leases. + +**Expected benefit:** Retain Client descriptors/order/policy and delegate registration safety to SDK leases. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Generate module descriptors and calls to the SDK registration contract instead of raw stack mechanisms. +- [ ] Keep application collision policy explicit and release modules in reverse activation order. +- [ ] Preserve a later replacement global when disposing the original module registration. + +### Acceptance criteria + +- [ ] Client-generated built-in module code does not implement a second low-level registration algorithm. +- [ ] Partial enable failure releases only owned registrations. +- [ ] Retained function values cannot call disposed plugin code. + +### Required validation + +- [ ] Compiled consumer with two modules, name replacement and partial registration failure. +- [ ] Disable/re-enable and Lua reset fixtures. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/12 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/37 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/50 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/51 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/22 + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/38 + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-010-sdk-module-registration` + +PR title: **Use SDK registration leases for generated Lua modules** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Client-local reservations alone cannot serialize arbitrary scripts or other plugins. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs) +- [S06 — Prior audit: generation stamps but name-based unregister.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/source-generators/CheatEngine.SDK.SourceGenerators.Shared/LuaEmit/LuaRegistrationEmitter.cs) +- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-011.md b/docs/engineering/work-items/CLI-011.md new file mode 100644 index 0000000..24dfe28 --- /dev/null +++ b/docs/engineering/work-items/CLI-011.md @@ -0,0 +1,95 @@ + + +## CLI-011 — Enforce recursive public and generated API type boundaries + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** bug · **Priority:** P1 · **Milestone:** CLI-M3 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The prior review identifies shallow result-type checks and a generic branch that can bypass subsequent forbidden-definition checks. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Inspect the complete public type graph while allowing deliberately approved SDK value contracts. + +**Expected benefit:** Inspect the complete public type graph while allowing deliberately approved SDK value contracts. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Traverse generic definitions/arguments, arrays, constraints, nested returns and emitted code. +- [ ] Reject LuaState, raw CE handles, ABI records, callbacks and ownership wrappers from normal Client contracts. +- [ ] Keep approved immutable addresses/IDs/enums; do not clone every SDK value or split packages prematurely. + +### Acceptance criteria + +- [ ] Nested forbidden types are rejected consistently by tests/generator diagnostics. +- [ ] Allowed immutable SDK values remain usable. +- [ ] Generated consumer compilation tests the boundary, not only source strings. + +### Required validation + +- [ ] Nested generic/array/constraint positives and negatives. +- [ ] Old application fake implementations and default builder tests. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/12 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/38 + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `fix/cli-011-recursive-type-boundaries` + +PR title: **Enforce recursive public and generated API type boundaries** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Compile-time architecture checks are not a security sandbox. Type moves can also break assembly identity. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs) +- [C20 — Prior audit: approved SDK values versus broad compile/runtime dependency.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/CheatEngine.Client.Abstractions.csproj) +- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-012.md b/docs/engineering/work-items/CLI-012.md new file mode 100644 index 0000000..1e243e6 --- /dev/null +++ b/docs/engineering/work-items/CLI-012.md @@ -0,0 +1,96 @@ + + +## CLI-012 — Specify activation-local DI and multi-plugin composition + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** validation · **Priority:** P2 · **Milestone:** CLI-M3 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The plugin creates a fresh provider per enable, with services registered as singletons within that provider. Extra scopes in a persistent provider do not recreate those singletons. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Make the supported composition lifetime explicit and test it independently of SDK load-context isolation. + +**Expected benefit:** Make the supported composition lifetime explicit and test it independently of SDK load-context isolation. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Document one provider per activation and ownership of DI-created disposables. +- [ ] Test aliases, modules and options without duplicate disposal. +- [ ] Qualify simultaneous plugins against the SDK coexistence result; do not infer it from separate providers. + +### Acceptance criteria + +- [ ] Every enable receives fresh Client lifetime and module state. +- [ ] Two scopes in one provider have documented behavior. +- [ ] No promise of persistent-root hosting without an explicit activation factory design. + +### Required validation + +- [ ] Provider/scope/alias disposal matrix. +- [ ] Two plugins in one host after SDK coexistence qualification. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/12 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/22 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/33 + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `test/cli-012-activation-di-contract` + +PR title: **Specify activation-local DI and multi-plugin composition** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Changing all registrations to scoped mechanically can change semantics and does not solve shared SDK static state. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) +- [S08 — Prior audit: static host state and runtime admission.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Hosting/Bootstrap/PluginHost.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-013.md b/docs/engineering/work-items/CLI-013.md new file mode 100644 index 0000000..7b51f24 --- /dev/null +++ b/docs/engineering/work-items/CLI-013.md @@ -0,0 +1,98 @@ + + +## CLI-013 — Make AOB cardinality and result budgets truthful + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M4 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Current scanning runs before module resolution and post-filters native results. FirstOrNone cannot safely infer no-match from an ambiguous SDK false. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Compose qualified SDK scan outcomes into predictable fluent cardinality semantics. + +**Expected benefit:** Compose qualified SDK scan outcomes into predictable fluent cardinality semantics. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Resolve absent/invalid module requests before expensive native work when target consistency permits. +- [ ] Map qualified no-match to success/null, not every false. +- [ ] Differentiate copied-result caps from native workload bounds and rename ReadableExecutable with a compatibility alias matching actual flags. + +### Acceptance criteria + +- [ ] FirstOrNone, RequireSingle and Take behave distinctly on zero/one/many matches. +- [ ] A missing module proven before admission does not launch a full scan. +- [ ] Documentation never claims Take(1) bounds CE scan work. + +### Required validation + +- [ ] No-hit/error/malformed outcomes and uniqueness/truncation tests. +- [ ] Module/range boundaries and protection-name compatibility examples. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/13 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/42 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/51 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/24 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/25 + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/36 + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-013-aob-cardinality-budgets` + +PR title: **Make AOB cardinality and result budgets truthful** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Early-stop cannot prove uniqueness; post-filtering and ordering must remain explicit. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C10 — Prior audit: whole scan precedes module lookup and post-filtering.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/PatternScanner.cs) +- [C11 — Prior audit: SDK delegation but ambiguous false becomes rejection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkAobScanPort.cs) +- [C16 — Prior audit: immutable terminals, post-filter limits, readability naming.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Fluent/Scanning/AobScanBuilder.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-014.md b/docs/engineering/work-items/CLI-014.md new file mode 100644 index 0000000..77e1172 --- /dev/null +++ b/docs/engineering/work-items/CLI-014.md @@ -0,0 +1,98 @@ + + +## CLI-014 — Report memory batch effects and cancellation milestones + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M4 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Homogeneous batches reduce dispatch count but still perform sequential primitive calls. Failure indices in text do not provide a stable partial-effect contract. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Expose completed prefix, failed/canceled step and effect certainty for composed memory workflows. + +**Expected benefit:** Expose completed prefix, failed/canceled step and effect certainty for composed memory workflows. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Preserve current admission-only cancellation where promised; make between-step cancellation an explicit policy. +- [ ] Copy span input before it outlives its synchronous caller; do not introduce dangling zero-copy buffers. +- [ ] Keep pointer-width/address arithmetic in qualified SDK primitives. + +### Acceptance criteria + +- [ ] Failure at k reports which prior operations completed. +- [ ] Cancellation never claims to interrupt an already-running synchronous CE primitive. +- [ ] One dispatch is not described as one native call or an atomic transaction. + +### Required validation + +- [ ] Failure/cancellation before admission, between steps and after native success. +- [ ] Span lifetime, pointer overflow and custom-codec regression tests. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/13 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/41 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/24 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/25 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/21 + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-014-memory-effects-cancellation` + +PR title: **Report memory batch effects and cancellation milestones** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Rollback writes are not a transaction and can fail; do not retry partial workflows invisibly. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs) +- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-015.md b/docs/engineering/work-items/CLI-015.md new file mode 100644 index 0000000..aa3516e --- /dev/null +++ b/docs/engineering/work-items/CLI-015.md @@ -0,0 +1,98 @@ + + +## CLI-015 — Adopt typed record and symbol commands with safe workflow policy + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M4 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Client record mutation uses Parent/destroy via generic SDK object/Lua access and can mutate before snapshot refresh fails. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Delegate CE mutation semantics to SDK while retaining high-level IDs, snapshots and trust policy. + +**Expected benefit:** Delegate CE mutation semantics to SDK while retaining high-level IDs, snapshots and trust policy. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Replace raw property/method operations with typed SDK commands. +- [ ] Represent command success separately from snapshot refresh. +- [ ] Keep table-root and raw-script opt-in defaults without claiming path checks sandbox content. + +### Acceptance criteria + +- [ ] No built-in Client adapter repairs CE record ownership through raw stack code. +- [ ] Delete remains explicit; disposing a borrowed snapshot cannot destroy GUI data. +- [ ] Post-mutation refresh failure preserves the completed effect. + +### Required validation + +- [ ] Missing/cyclic/self-parent records and snapshot failure after mutation. +- [ ] Denied roots, observed reparse points and explicit trust assumptions. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/13 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/49 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/51 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/24 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/25 + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-015-typed-record-symbol-workflows` + +PR title: **Adopt typed record and symbol commands with safe workflow policy** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +A generic helper relocation alone does not fix ownership; safe path defaults do not eliminate TOCTOU. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C12 — Prior audit: Parent/destroy semantics and mutation/snapshot ambiguity.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkTableRecordMutationPort.cs) +- [C18 — Prior audit: table-root allowlist and documented path TOCTOU limitation.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/CoreClientPolicy.cs) +- [C02 — Prior audit: built-in CE Lua declarations remain Client-owned.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/ClientLuaGlobals.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-016.md b/docs/engineering/work-items/CLI-016.md new file mode 100644 index 0000000..7347b6d --- /dev/null +++ b/docs/engineering/work-items/CLI-016.md @@ -0,0 +1,98 @@ + + +## CLI-016 — Adopt qualified SDK value-scan sessions + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P2 · **Milestone:** CLI-M5 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The SDK factory exists but the current Client deliberately registers an unavailable value-scanner implementation. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Deliver one high-level scan-session vertical slice after its factory, artifact and live gates pass. + +**Expected benefit:** Deliver one high-level scan-session vertical slice after its factory, artifact and live gates pass. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Wrap the SDK-created owner; never reconstruct it from borrowed handles. +- [ ] Define Client request validation, session transitions, progress and copied result limits. +- [ ] Keep unsupported transitions/host profiles explicitly unavailable. + +### Acceptance criteria + +- [ ] The enabled adapter links the qualified factory and first-containing package. +- [ ] Every transition has failure/cleanup and target-change coverage. +- [ ] No source-only or interface-only status is advertised as live support. + +### Required validation + +- [ ] SDK conformance plus Client success/failure/state-transition fixtures. +- [ ] Live enable/disable/re-enable/target-change scan session. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/14 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/43 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/51 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/25 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/18 + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-016-value-scan-adoption` + +PR title: **Adopt qualified SDK value-scan sessions** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +UI-friendly progress cannot substitute for a qualified native cancellation contract. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [S03 — Prior audit: new factory already exists; qualify, do not recreate.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Scanning/Values/MemoryScanSessions.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) +- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-017.md b/docs/engineering/work-items/CLI-017.md new file mode 100644 index 0000000..444cf14 --- /dev/null +++ b/docs/engineering/work-items/CLI-017.md @@ -0,0 +1,100 @@ + + +## CLI-017 — Adopt target-bound allocation and patch leases + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P1 · **Milestone:** CLI-M5 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The Client has gated allocation/assembly contracts; SDK main contains underlying primitives that need target and handoff qualification. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Expose separate high-level allocation and patch workflows that compose qualified SDK owners. + +**Expected benefit:** Expose separate high-level allocation and patch workflows that compose qualified SDK owners. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Use explicit opt-in and safe defaults; do not rebuild disable-info or raw deallocation. +- [ ] Capture activation/target identity and track owner transfer failure. +- [ ] Split allocation and patch implementation into two focused PRs under this work item if they require independent review. + +### Acceptance criteria + +- [ ] A stale lease cannot mutate or release against a different target. +- [ ] A failure after native success retains cleanup authority or reports unknown effect. +- [ ] Availability records the exact SDK/live evidence for each workflow separately. + +### Required validation + +- [ ] Owner creation/tracking/publication failure and double disposal. +- [ ] Live target switch and partial cleanup for allocation and patch independently. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/14 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/39 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/45 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/51 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/25 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/24 + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-017-allocation-patch-leases` + +PR title: **Adopt target-bound allocation and patch leases** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Patch scripts are privileged in-process operations, not sandboxed statements. Separate outcomes prevent unsafe retries. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [S04 — Prior audit: current-target allocation bindings.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Allocation/LuaTargetMemoryAllocationOperations.cs) +- [S05 — Prior audit: patch and disable-info ownership handoff.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Assembly/AutoAssemblerPatcher.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) +- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-018.md b/docs/engineering/work-items/CLI-018.md new file mode 100644 index 0000000..2e52ec5 --- /dev/null +++ b/docs/engineering/work-items/CLI-018.md @@ -0,0 +1,98 @@ + + +## CLI-018 — Define gated debugger and subscription workflow adapters + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** research · **Priority:** P2 · **Milestone:** CLI-M5 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Debugger, timer and hotkey contracts are currently unavailable; a copied-event stream exists separately. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Specify Client-friendly synchronous decisions and subscription workflows over qualified SDK mechanisms. + +**Expected benefit:** Specify Client-friendly synchronous decisions and subscription workflows over qualified SDK mechanisms. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Keep native continuation decisions synchronous and distinguish them from async observations. +- [ ] Delegate callback/thunk/rooting/unregister to SDK leases. +- [ ] Enable each producer only after its own host/cleanup qualification and policy review. + +### Acceptance criteria + +- [ ] No async consumer is responsible for unblocking a native debug event. +- [ ] Expired activations cannot receive native callbacks. +- [ ] Unavailable status persists where an SDK producer is not qualified. + +### Required validation + +- [ ] Decision versus observation contract fixtures. +- [ ] Late callback, slow reader and teardown races with real qualified producers. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/14 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/46 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/47 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/35 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/25 + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `feat/cli-018-advanced-event-workflows` + +PR title: **Define gated debugger and subscription workflow adapters** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +This specification is not permission to implement a second debugger backend in Client. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) +- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs) +- [U01 — Historical loader/tables/callback dispatch comparison.](https://github.com/cheat-engine/cheat-engine/blob/ec45d5f47f92a239ba0bf51ec5d04a7509c3fd37/Cheat%20Engine/plugin.pas) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-019.md b/docs/engineering/work-items/CLI-019.md new file mode 100644 index 0000000..386cefe --- /dev/null +++ b/docs/engineering/work-items/CLI-019.md @@ -0,0 +1,94 @@ + + +## CLI-019 — Bound event consumers and specify stream completion + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P2 · **Milestone:** CLI-M5 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +The prior audit observes a bounded event ring but an independent linked list of pending reads and multiple enumerators. The implementation uses a lock. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Define a bounded observation-delivery contract beyond the ring capacity alone. + +**Expected benefit:** Define a bounded observation-delivery contract beyond the ring capacity alone. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Choose single-reader default or explicitly bounded competing-reader behavior; do not imply broadcast. +- [ ] Specify disposal of an enumerator with a pending read, cancellation, fairness and loss counts. +- [ ] Keep continuations asynchronous and payloads copied; measure lock contention rather than call it lock-free. + +### Acceptance criteria + +- [ ] Pending reader memory is bounded or excess readers are rejected. +- [ ] Disposal/cancellation cannot strand pending reads. +- [ ] Dropped observations never discard required native decisions. + +### Required validation + +- [ ] Many readers, canceled pending read, close/complete/dispose and overflow fixtures. +- [ ] Publication latency under a slow consumer. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/15 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/34 + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `feat/cli-019-bounded-event-consumers` + +PR title: **Bound event consumers and specify stream completion** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Changing queue implementation for fashion can break loss/ordering/completion semantics; qualify the contract first. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-020.md b/docs/engineering/work-items/CLI-020.md new file mode 100644 index 0000000..b46d4bf --- /dev/null +++ b/docs/engineering/work-items/CLI-020.md @@ -0,0 +1,96 @@ + + +## CLI-020 — Standardize fluent terminals and supported workflow examples + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** governance · **Priority:** P2 · **Milestone:** CLI-M4 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Existing immutable builders and explicit cardinality terminals are useful. Public interfaces also include unavailable domains that require clear status. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Improve discoverability without replacing the existing fluent model or exposing low-level complexity. + +**Expected benefit:** Improve discoverability without replacing the existing fluent model or exposing low-level complexity. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Keep configuration side-effect free and execution terminals explicit. +- [ ] Describe ordering, absence, limits, cancellation milestones and cleanup near each supported operation. +- [ ] Compile examples against shipped packages; label research APIs and unavailable domains before examples. + +### Acceptance criteria + +- [ ] Examples cover success, expected failure and cleanup for each supported workflow. +- [ ] Fluent names match actual guarantees; compatibility aliases preserve old callers. +- [ ] No claim of safe/atomic/async/zero-allocation lacks a precise contract. + +### Required validation + +- [ ] Template/example compilation in clean consumers. +- [ ] Default builder, ambiguous cardinality and old public API tests. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/15 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/18 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/29 + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `docs/cli-020-fluent-developer-guidance` + +PR title: **Standardize fluent terminals and supported workflow examples** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +A huge facade is not delivered capability. Avoid adding placeholder interfaces only to increase API count. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [C16 — Prior audit: immutable terminals, post-filter limits, readability naming.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Fluent/Scanning/AobScanBuilder.cs) +- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-021.md b/docs/engineering/work-items/CLI-021.md new file mode 100644 index 0000000..e8edd68 --- /dev/null +++ b/docs/engineering/work-items/CLI-021.md @@ -0,0 +1,95 @@ + + +## CLI-021 — Unify stale-client and local-process operation semantics + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P2 · **Milestone:** CLI-M1 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Some local process enumeration/unavailable paths bypass normal Client dispatch. Local BCL metadata is not proof of CE backend target identity. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Make activation requirements explicit for stateful operations and separate legitimate offline diagnostics. + +**Expected benefit:** Make activation requirements explicit for stateful operations and separate legitimate offline diagnostics. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Apply stale-client policy consistently before operational work, even for unavailable implementations. +- [ ] Label local process discovery/enrichment as local; no speculative remote backend. +- [ ] Document cancellation ordering and keep pure immutable snapshots usable where intended. + +### Acceptance criteria + +- [ ] Disable/re-enable does not produce different lifetime behavior by domain accident. +- [ ] Offline diagnostics have a separate explicit contract. +- [ ] Local process metadata is never mistaken for authoritative SDK target identity. + +### Required validation + +- [ ] Stale facade across local, implemented and unavailable domains. +- [ ] Canceled enumeration and disappearing local process fixtures. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/15 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `feat/cli-021-stale-local-operation-policy` + +PR title: **Unify stale-client and local-process operation semantics** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Adding lifetime exceptions indiscriminately can remove useful offline diagnostics; name that boundary deliberately. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-022.md b/docs/engineering/work-items/CLI-022.md new file mode 100644 index 0000000..19023cd --- /dev/null +++ b/docs/engineering/work-items/CLI-022.md @@ -0,0 +1,100 @@ + + +## CLI-022 — Validate minimum SDK artifacts and public compatibility + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** validation · **Priority:** P1 · **Milestone:** CLI-M6 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Client publishes a compatible SDK range, but source availability, package content and behavioral support are not equivalent. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Test packed Client consumption against the exact minimum and selected newer SDK artifacts. + +**Expected benefit:** Test packed Client consumption against the exact minimum and selected newer SDK artifacts. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Record source/package/bridge/generator identity for each test combination. +- [ ] Preserve direct SDK bootstrap/native asset reference rules. +- [ ] Test old source, old binaries where supported, application interface implementations and generated consumers. + +### Acceptance criteria + +- [ ] No sibling project reference masks missing published members. +- [ ] Required interface changes and failure/cancellation semantics have migration notes. +- [ ] The declared range is not described as a fully tested set of all possible packages. + +### Required validation + +- [ ] Minimal plugin, custom codec/module, relay library and old application fakes. +- [ ] AOT graph publication separate from managed live plugin loading. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/16 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/51 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/23 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/26 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/27 + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/39 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/40 + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `test/cli-022-package-compatibility-matrix` + +PR title: **Validate minimum SDK artifacts and public compatibility** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Moving public types between assemblies can break binary identity even with unchanged namespaces. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json) +- [C20 — Prior audit: approved SDK values versus broad compile/runtime dependency.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/CheatEngine.Client.Abstractions.csproj) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-023.md b/docs/engineering/work-items/CLI-023.md new file mode 100644 index 0000000..bb91f61 --- /dev/null +++ b/docs/engineering/work-items/CLI-023.md @@ -0,0 +1,95 @@ + + +## CLI-023 — Verify coherent deployment sets and external plugin inheritance + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** feature · **Priority:** P2 · **Milestone:** CLI-M6 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +Hosting build tooling performs per-file deployment and metadata inheritance checks. A build-only filesystem P/Invoke is not a runtime CE bypass. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Make deployment/profile validation truthful, failure-aware and compatible with documented plugin inheritance. + +**Expected benefit:** Make deployment/profile validation truthful, failure-aware and compatible with documented plugin inheritance. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Produce a file/hash manifest and detect stale or mixed SDK/bridge/Client outputs. +- [ ] Prefer versioned staging where supported; otherwise report partial replacement and require an explicit offline deployment policy. +- [ ] Resolve external base metadata without executing user assemblies, or document the supported inheritance restriction. + +### Acceptance criteria + +- [ ] A failed second file replacement reports the installed subset. +- [ ] Stale manifest-owned files are detected without deleting arbitrary user files. +- [ ] An external shared base is either supported by a tested resolver or rejected with precise guidance. + +### Required validation + +- [ ] Partial deployment, locked file, missing bridge and stale-version tests. +- [ ] Direct, same-assembly, external-base, manual/generated bootstrap consumer fixtures. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/16 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/38 + +### Blocks + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/40 + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +Branch: `feat/cli-023-deployment-profile-integrity` + +PR title: **Verify coherent deployment sets and external plugin inheritance** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Do not claim directory atomicity or safe hot reload; do not automatically modify CE runtime configuration. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C17 — Prior audit: build-only native calls, external-base checks and per-file deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/buildTransitive/CheatEngine.Client.Hosting.targets) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [S11 — Protected native boundary and bridge contract reference.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/native/cheatengine-sdk-lua-bridge/README.md) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-024.md b/docs/engineering/work-items/CLI-024.md new file mode 100644 index 0000000..59aa203 --- /dev/null +++ b/docs/engineering/work-items/CLI-024.md @@ -0,0 +1,99 @@ + + +## CLI-024 — Publish end-to-end qualification and performance budgets + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** validation · **Priority:** P2 · **Milestone:** CLI-M6 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +No .NET/live-host/benchmark execution was performed by the audit summaries or this bootstrap. Planned acceptance tests require actual recorded results. + +**Evidence classification:** InheritedAuditBasis + Proposal; revalidate the pinned call path before implementation. + +### Outcome and rationale + +Qualify the release scope from developer workflow through SDK/host behavior and cleanup. + +**Expected benefit:** Qualify the release scope from developer workflow through SDK/host behavior and cleanup. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Measure primitive, dispatch, batch, snapshot, codec, AOB and event paths separately. +- [ ] Record CLR allocations, available Lua/native metrics, boundary calls and latency distributions. +- [ ] Run declared success/failure/disable/re-enable/target-change scenarios on a purpose-built target. + +### Acceptance criteria + +- [ ] No performance improvement weakens error, lifetime, target or cancellation semantics. +- [ ] Source/package/live/AOT publication results remain independently labeled. +- [ ] Only qualified workflows are advertised; deferred advanced domains remain visible. + +### Required validation + +- [ ] Direct SDK versus immediate/queued Client and equal-semantics batch comparisons. +- [ ] Controlled live plugin and two-plugin regression profiles. + +### Scope exclusions + +- No unrelated rewrite, automatic capability activation, package publication, or repository-protection changes. +- Keep integration mechanisms in SDK and application policy/workflows in Client. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/16 + +Implementation leaf. Keep small tasks in this checklist; split a new issue only for an independently reviewable outcome. + +### Blocked by + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/38 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/39 +- https://github.com/CheatEngineNet/CheatEngine.SDK/issues/52 + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Before Client implementation is considered ready, identify and restore the exact published SDK package containing EVERY required primitive. SDK-023 is the minimum-contract publication task, not a promise that an earlier artifact includes later scan, patch, or debugger additions. + +### Proposed branch and PR + +Branch: `test/cli-024-release-performance-evidence` + +PR title: **Publish end-to-end qualification and performance budgets** + +Open against `main` only after refinement and prerequisite review. Add `Closes ` for this leaf when the PR actually completes it. Reference upstream SDK work as a dependency, not as an issue to close. The bootstrap does not create this implementation branch. + +### Risks and compatibility + +Pooling retained contexts or exposing borrowed spans to claim zero allocations would invalidate the safety model. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Focused PR linked to the implementation issue. +- [ ] Commands, environment and actual regression results; unexecuted cases remain pending. +- [ ] Updated contract/capability documentation and compatibility notes. + +Required for the affected capability. Optional profiles may be deferred through an explicit ADR, not marked as implemented. + +### Sources + +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md) +- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs) +- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs) +- [S13 — Live fixture entry point, identified in contribution guidance.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/tests/CheatEngine.SDK.LivePlugin/README.md) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-E01.md b/docs/engineering/work-items/CLI-E01.md new file mode 100644 index 0000000..d480139 --- /dev/null +++ b/docs/engineering/work-items/CLI-E01.md @@ -0,0 +1,96 @@ + + +## CLI-E01 — Governance and capability truth + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M0 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing. + +**Evidence classification:** Proposal derived from the attached summaries and pinned source references. + +### Outcome and rationale + +Maintain the developer-facing support model and evidence-linked execution plan. + +**Expected benefit:** Maintain the developer-facing support model and evidence-linked execution plan. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary. +- [ ] Sequence only real dependencies; do not block a child on closing its own parent. +- [ ] Require an explicit decision and evidence for any deferred capability. + +### Acceptance criteria + +- [ ] Each child is completed with evidence or explicitly deferred by an approved decision. +- [ ] Cross-repository artifact gates have named versions and hashes when adopted. +- [ ] Compatibility and support documentation match actual delivery, not interface count. + +### Required validation + +- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test. + +### Scope exclusions + +- No monolithic epic implementation PR. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/8 + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/17 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/18 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/19 + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +No epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository. + +### Risks and compatibility + +A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Linked child PRs, tests, and a final scope/deferral review. + +Outcome group; optional scope remains explicitly gated or deferred. + +### Sources + +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json) +- [H02 — Merged high-level API/modules; preserve this work.](https://github.com/CheatEngineNet/CheatEngine.Client/pull/7) +- [H01 — Merged foundations; author-reported tests are not independently executed.](https://github.com/CheatEngineNet/CheatEngine.SDK/pull/19) +- [C09 — Prior audit: capability and exception-family mismatch.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/RuntimeClient.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) +- [G01 — Issue API; filter pull_request entries from issue lists.](https://docs.github.com/en/rest/issues/issues) +- [G02 — Repository-specific milestones.](https://docs.github.com/en/rest/issues/milestones) +- [G03 — Native hierarchy uses issue IDs, not issue numbers.](https://docs.github.com/en/rest/issues/sub-issues) +- [G04 — Native blocked-by relationship with the blocker issue_id.](https://docs.github.com/en/rest/issues/issue-dependencies) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-E02.md b/docs/engineering/work-items/CLI-E02.md new file mode 100644 index 0000000..21ecea3 --- /dev/null +++ b/docs/engineering/work-items/CLI-E02.md @@ -0,0 +1,92 @@ + + +## CLI-E02 — Immediate reliability corrections + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M1 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing. + +**Evidence classification:** Proposal derived from the attached summaries and pinned source references. + +### Outcome and rationale + +Repair classified failures, retained contexts, and partial activation cleanup independently of broad SDK expansion. + +**Expected benefit:** Repair classified failures, retained contexts, and partial activation cleanup independently of broad SDK expansion. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary. +- [ ] Sequence only real dependencies; do not block a child on closing its own parent. +- [ ] Require an explicit decision and evidence for any deferred capability. + +### Acceptance criteria + +- [ ] Each child is completed with evidence or explicitly deferred by an approved decision. +- [ ] Cross-repository artifact gates have named versions and hashes when adopted. +- [ ] Compatibility and support documentation match actual delivery, not interface count. + +### Required validation + +- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test. + +### Scope exclusions + +- No monolithic epic implementation PR. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/8 + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/20 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/21 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/22 + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +No epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository. + +### Risks and compatibility + +A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Linked child PRs, tests, and a final scope/deferral review. + +Outcome group; optional scope remains explicitly gated or deferred. + +### Sources + +- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs) +- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs) +- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs) +- [C04 — Public extension context with an implementation-enforced lifetime.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/Memory/IMemoryReadContext.cs) +- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-E03.md b/docs/engineering/work-items/CLI-E03.md new file mode 100644 index 0000000..ef3fc6f --- /dev/null +++ b/docs/engineering/work-items/CLI-E03.md @@ -0,0 +1,96 @@ + + +## CLI-E03 — SDK contract adoption + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M2 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing. + +**Evidence classification:** Proposal derived from the attached summaries and pinned source references. + +### Outcome and rationale + +Replace duplicated built-in CE interpretation with the actual containing SDK artifacts. + +**Expected benefit:** Replace duplicated built-in CE interpretation with the actual containing SDK artifacts. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary. +- [ ] Sequence only real dependencies; do not block a child on closing its own parent. +- [ ] Require an explicit decision and evidence for any deferred capability. + +### Acceptance criteria + +- [ ] Each child is completed with evidence or explicitly deferred by an approved decision. +- [ ] Cross-repository artifact gates have named versions and hashes when adopted. +- [ ] Compatibility and support documentation match actual delivery, not interface count. + +### Required validation + +- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test. + +### Scope exclusions + +- No monolithic epic implementation PR. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/8 + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/23 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/24 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/25 + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +No epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository. + +### Risks and compatibility + +A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Linked child PRs, tests, and a final scope/deferral review. + +Outcome group; optional scope remains explicitly gated or deferred. + +### Sources + +- [C02 — Prior audit: built-in CE Lua declarations remain Client-owned.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/ClientLuaGlobals.cs) +- [C09 — Prior audit: capability and exception-family mismatch.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/RuntimeClient.cs) +- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json) +- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs) +- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs) +- [C11 — Prior audit: SDK delegation but ambiguous false becomes rejection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkAobScanPort.cs) +- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes) +- [C08 — Prior audit: local observed epoch is not authoritative target identity.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/TargetSelectionLifetime.cs) +- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs) +- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-E04.md b/docs/engineering/work-items/CLI-E04.md new file mode 100644 index 0000000..3805ba0 --- /dev/null +++ b/docs/engineering/work-items/CLI-E04.md @@ -0,0 +1,93 @@ + + +## CLI-E04 — Modules, public boundaries, and activation composition + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M3 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing. + +**Evidence classification:** Proposal derived from the attached summaries and pinned source references. + +### Outcome and rationale + +Keep application extensibility safe without leaking raw SDK state or duplicating registration mechanisms. + +**Expected benefit:** Keep application extensibility safe without leaking raw SDK state or duplicating registration mechanisms. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary. +- [ ] Sequence only real dependencies; do not block a child on closing its own parent. +- [ ] Require an explicit decision and evidence for any deferred capability. + +### Acceptance criteria + +- [ ] Each child is completed with evidence or explicitly deferred by an approved decision. +- [ ] Cross-repository artifact gates have named versions and hashes when adopted. +- [ ] Compatibility and support documentation match actual delivery, not interface count. + +### Required validation + +- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test. + +### Scope exclusions + +- No monolithic epic implementation PR. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/8 + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/26 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/27 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/28 + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +No epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository. + +### Risks and compatibility + +A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Linked child PRs, tests, and a final scope/deferral review. + +Outcome group; optional scope remains explicitly gated or deferred. + +### Sources + +- [C13 — Prior audit: operation/registration generation and recursive type checks.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/source-generators/CheatEngine.Client.SourceGenerators.Lua/CheatEngineLuaGenerator.cs) +- [S06 — Prior audit: generation stamps but name-based unregister.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/source-generators/CheatEngine.SDK.SourceGenerators.Shared/LuaEmit/LuaRegistrationEmitter.cs) +- [C07 — Prior audit: early construction cleanup differs from normal cleanup.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/CheatEngineClientPlugin.cs) +- [C20 — Prior audit: approved SDK values versus broad compile/runtime dependency.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/CheatEngine.Client.Abstractions.csproj) +- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) +- [S08 — Prior audit: static host state and runtime admission.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Hosting/Bootstrap/PluginHost.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-E05.md b/docs/engineering/work-items/CLI-E05.md new file mode 100644 index 0000000..fda73fc --- /dev/null +++ b/docs/engineering/work-items/CLI-E05.md @@ -0,0 +1,95 @@ + + +## CLI-E05 — Memory, scan, and table workflows + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M4 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing. + +**Evidence classification:** Proposal derived from the attached summaries and pinned source references. + +### Outcome and rationale + +Preserve cardinality, partial effects, limits and target consistency across friendly APIs. + +**Expected benefit:** Preserve cardinality, partial effects, limits and target consistency across friendly APIs. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary. +- [ ] Sequence only real dependencies; do not block a child on closing its own parent. +- [ ] Require an explicit decision and evidence for any deferred capability. + +### Acceptance criteria + +- [ ] Each child is completed with evidence or explicitly deferred by an approved decision. +- [ ] Cross-repository artifact gates have named versions and hashes when adopted. +- [ ] Compatibility and support documentation match actual delivery, not interface count. + +### Required validation + +- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test. + +### Scope exclusions + +- No monolithic epic implementation PR. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/8 + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/29 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/30 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/31 + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +No epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository. + +### Risks and compatibility + +A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Linked child PRs, tests, and a final scope/deferral review. + +Outcome group; optional scope remains explicitly gated or deferred. + +### Sources + +- [C10 — Prior audit: whole scan precedes module lookup and post-filtering.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/PatternScanner.cs) +- [C11 — Prior audit: SDK delegation but ambiguous false becomes rejection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkAobScanPort.cs) +- [C16 — Prior audit: immutable terminals, post-filter limits, readability naming.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Fluent/Scanning/AobScanBuilder.cs) +- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs) +- [C05 — Prior audit: production adapter rethrows callback exceptions.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Dispatching/SdkMainThreadDispatcher.cs) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [C12 — Prior audit: Parent/destroy semantics and mutation/snapshot ambiguity.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/SdkTableRecordMutationPort.cs) +- [C18 — Prior audit: table-root allowlist and documented path TOCTOU limitation.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/CoreClientPolicy.cs) +- [C02 — Prior audit: built-in CE Lua declarations remain Client-owned.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Infrastructure/ClientLuaGlobals.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-E06.md b/docs/engineering/work-items/CLI-E06.md new file mode 100644 index 0000000..0fb4707 --- /dev/null +++ b/docs/engineering/work-items/CLI-E06.md @@ -0,0 +1,93 @@ + + +## CLI-E06 — Qualified advanced workflow adoption + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M5 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing. + +**Evidence classification:** Proposal derived from the attached summaries and pinned source references. + +### Outcome and rationale + +Enable scan, allocation, patch and event workflows only after their specific lower-layer gates. + +**Expected benefit:** Enable scan, allocation, patch and event workflows only after their specific lower-layer gates. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary. +- [ ] Sequence only real dependencies; do not block a child on closing its own parent. +- [ ] Require an explicit decision and evidence for any deferred capability. + +### Acceptance criteria + +- [ ] Each child is completed with evidence or explicitly deferred by an approved decision. +- [ ] Cross-repository artifact gates have named versions and hashes when adopted. +- [ ] Compatibility and support documentation match actual delivery, not interface count. + +### Required validation + +- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test. + +### Scope exclusions + +- No monolithic epic implementation PR. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/8 + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/32 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/33 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/34 + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +No epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository. + +### Risks and compatibility + +A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Linked child PRs, tests, and a final scope/deferral review. + +Outcome group; optional scope remains explicitly gated or deferred. + +### Sources + +- [S03 — Prior audit: new factory already exists; qualify, do not recreate.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Scanning/Values/MemoryScanSessions.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) +- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md) +- [S04 — Prior audit: current-target allocation bindings.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Allocation/LuaTargetMemoryAllocationOperations.cs) +- [S05 — Prior audit: patch and disable-info ownership handoff.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/libs/CheatEngine.SDK.Engine/Assembly/AutoAssemblerPatcher.cs) +- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs) +- [U01 — Historical loader/tables/callback dispatch comparison.](https://github.com/cheat-engine/cheat-engine/blob/ec45d5f47f92a239ba0bf51ec5d04a7509c3fd37/Cheat%20Engine/plugin.pas) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-E07.md b/docs/engineering/work-items/CLI-E07.md new file mode 100644 index 0000000..ce26dcb --- /dev/null +++ b/docs/engineering/work-items/CLI-E07.md @@ -0,0 +1,92 @@ + + +## CLI-E07 — Developer experience and bounded observation + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P2 · **Milestone:** CLI-M5 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing. + +**Evidence classification:** Proposal derived from the attached summaries and pinned source references. + +### Outcome and rationale + +Define coherent lifetime, reader, completion and discoverability policies. + +**Expected benefit:** Define coherent lifetime, reader, completion and discoverability policies. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary. +- [ ] Sequence only real dependencies; do not block a child on closing its own parent. +- [ ] Require an explicit decision and evidence for any deferred capability. + +### Acceptance criteria + +- [ ] Each child is completed with evidence or explicitly deferred by an approved decision. +- [ ] Cross-repository artifact gates have named versions and hashes when adopted. +- [ ] Compatibility and support documentation match actual delivery, not interface count. + +### Required validation + +- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test. + +### Scope exclusions + +- No monolithic epic implementation PR. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/8 + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/35 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/36 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/37 + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +No epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository. + +### Risks and compatibility + +A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Linked child PRs, tests, and a final scope/deferral review. + +Outcome group; optional scope remains explicitly gated or deferred. + +### Sources + +- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [C16 — Prior audit: immutable terminals, post-filter limits, readability naming.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Fluent/Scanning/AobScanBuilder.cs) +- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes) +- [C06 — Prior audit: expected no-target failure and local target observations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/ProcessClient.cs) +- [C14 — Prior audit: provider-local singleton services and unavailable adapters.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Extensions.DependencyInjection/CheatEngineClientServiceCollectionExtensions.cs) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-E08.md b/docs/engineering/work-items/CLI-E08.md new file mode 100644 index 0000000..d6bf715 --- /dev/null +++ b/docs/engineering/work-items/CLI-E08.md @@ -0,0 +1,96 @@ + + +## CLI-E08 — Package, deployment, and release readiness + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** epic · **Priority:** P1 · **Milestone:** CLI-M6 + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +This grouping coordinates the linked implementation issues. Existing capabilities are credited by each child rather than redeclared as missing. + +**Evidence classification:** Proposal derived from the attached summaries and pinned source references. + +### Outcome and rationale + +Validate actual packages, external consumers, deployment sets and measured end-to-end behavior. + +**Expected benefit:** Validate actual packages, external consumers, deployment sets and measured end-to-end behavior. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Review child source evidence and preserve the SDK/Client responsibility boundary. +- [ ] Sequence only real dependencies; do not block a child on closing its own parent. +- [ ] Require an explicit decision and evidence for any deferred capability. + +### Acceptance criteria + +- [ ] Each child is completed with evidence or explicitly deferred by an approved decision. +- [ ] Cross-repository artifact gates have named versions and hashes when adopted. +- [ ] Compatibility and support documentation match actual delivery, not interface count. + +### Required validation + +- [ ] Review the acceptance evidence of each child; do not count parent closure as an additional runtime test. + +### Scope exclusions + +- No monolithic epic implementation PR. + +### Parent and children + +Parent: https://github.com/CheatEngineNet/CheatEngine.Client/issues/8 + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/38 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/39 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/40 + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +No epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository. + +### Risks and compatibility + +A grouping can span several phases. Its completion milestone is not a reason to delay an earlier independent child. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Linked child PRs, tests, and a final scope/deferral review. + +Outcome group; optional scope remains explicitly gated or deferred. + +### Sources + +- [C19 — Prior audit: SDK 1.0.0 resolution; artifact bytes not independently inspected.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/packages.lock.json) +- [C20 — Prior audit: approved SDK values versus broad compile/runtime dependency.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Abstractions/CheatEngine.Client.Abstractions.csproj) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [N03 — Source/binary/behavioral compatibility distinctions.](https://learn.microsoft.com/en-us/dotnet/standard/library-guidance/breaking-changes) +- [C17 — Prior audit: build-only native calls, external-base checks and per-file deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Hosting/buildTransitive/CheatEngine.Client.Hosting.targets) +- [S11 — Protected native boundary and bridge contract reference.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/native/cheatengine-sdk-lua-bridge/README.md) +- [C21 — Live gate protocol identified by current README; not independently re-read here.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/docs/live-capability-gates.md) +- [C03 — Prior audit: scoped codecs, partial batches and failure projection.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/MemoryClient.cs) +- [C15 — Prior audit: bounded event ring, pending reader list and async continuations.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/libs/CheatEngine.Client.Core/Domains/Events/BoundedEventStream.cs) +- [S13 — Live fixture entry point, identified in contribution guidance.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/tests/CheatEngine.SDK.LivePlugin/README.md) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/docs/engineering/work-items/CLI-PLAN.md b/docs/engineering/work-items/CLI-PLAN.md new file mode 100644 index 0000000..f32806d --- /dev/null +++ b/docs/engineering/work-items/CLI-PLAN.md @@ -0,0 +1,97 @@ + + +## CLI-PLAN — Establish the Client developer-workflow roadmap and execution baseline + +**Owner:** `CheatEngineNet/CheatEngine.Client` · **Kind:** roadmap · **Priority:** P1 · **Milestone:** Cross-phase navigation + +**Initial status:** Needs refinement. **Runtime validation:** Not executed by this bootstrap. + +### Context and evidence + +This is the navigation root for the engineering bootstrap, not an implemented feature or a GitHub Project object. + +**Evidence classification:** Proposal; initial GitHub writes were denied by the integration. + +### Outcome and rationale + +Connect outcome milestones, owned epics, implementable issues, source evidence, package gates and focused PRs. + +**Expected benefit:** Connect outcome milestones, owned epics, implementable issues, source evidence, package gates and focused PRs. + +### Architectural responsibility + +SDK owns CE mappings, native safety, factual outcomes and low-level owners. Client owns application policy, typed workflows, composition, and developer experience. + +### Technical requirements and task checklist + +- [ ] Keep one owning repository per implementation task. +- [ ] Keep hierarchy, blocking dependencies, package gates and release qualification distinct. +- [ ] Never close this root automatically from one child implementation PR. + +### Acceptance criteria + +- [ ] Every work item links to its owning epic and verified sources. +- [ ] Native GitHub relationships and deployment status are recorded accurately. +- [ ] No speculative due dates, assignees, release versions or live-verification results are assigned. + +### Required validation + +- [ ] Manifest integrity, hierarchy and cross-repository dependency validation. + +### Scope exclusions + +- No automatic implementation branch farm, auto-merge, release or protection change. + +### Parent and children + +Repository roadmap root; not a GitHub Projects object. + +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/9 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/10 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/11 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/12 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/13 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/14 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/15 +- https://github.com/CheatEngineNet/CheatEngine.Client/issues/16 + +### Blocked by + +None declared. This does not waive evidence, policy, or package requirements. + +### Blocks + +None declared. This does not waive evidence, policy, or package requirements. + +### Package and readiness gate + +Identify the first containing artifact before describing new source as consumable support. No version is invented by this plan. + +### Proposed branch and PR + +No epic-sized implementation branch. Children have focused branch/PR proposals. The bootstrap creates only one documentation/tooling branch and draft PR per repository. + +### Risks and compatibility + +An attractive board cannot substitute for precise contracts, acceptance evidence, and maintainable issue scopes. + +**Long-term impact:** One traceable owner, stable acceptance criteria, and explicit compatibility evidence reduce repeated integration fixes and make future API changes reviewable. + +### Definition of done + +- [ ] Navigable roadmap, detailed backlog and verified deployment receipt. + +Governance root; close only when the defined roadmap scope is accepted or deliberately superseded. + +### Sources + +- [S01 — Existing build/test, focused branches and release rules; preserve rather than overwrite.](https://github.com/CheatEngineNet/CheatEngine.SDK/blob/aa3fcc3cdf629468e69d0c68817183d44a719894/CONTRIBUTING.md) +- [C01 — Current in-process architecture, capability gates and managed deployment.](https://github.com/CheatEngineNet/CheatEngine.Client/blob/923a4ded85898f53ef4cd2ff5872d2fd9001071a/README.md) +- [G01 — Issue API; filter pull_request entries from issue lists.](https://docs.github.com/en/rest/issues/issues) +- [G02 — Repository-specific milestones.](https://docs.github.com/en/rest/issues/milestones) +- [G03 — Native hierarchy uses issue IDs, not issue numbers.](https://docs.github.com/en/rest/issues/sub-issues) +- [G04 — Native blocked-by relationship with the blocker issue_id.](https://docs.github.com/en/rest/issues/issue-dependencies) + +### Maintainer notes + +Keep execution updates, actual commands/results, decisions, and refinements here. The bootstrap does not overwrite an existing issue body on rerun. diff --git a/eng/Validate-EngineeringManifest.py b/eng/Validate-EngineeringManifest.py new file mode 100644 index 0000000..16c1ebc --- /dev/null +++ b/eng/Validate-EngineeringManifest.py @@ -0,0 +1,415 @@ +"""Validate the versioned Client engineering backlog without contacting GitHub.""" + +from __future__ import annotations + +import argparse +import json +import re +import sys +from collections.abc import Iterable, Mapping +from pathlib import Path +from typing import Any + + +MANIFEST_RELATIVE_PATH = Path("docs/engineering/backlog.json") +WORK_ITEMS_RELATIVE_PATH = Path("docs/engineering/work-items") +ARCHIVE_RECONCILIATION_RELATIVE_PATH = Path("docs/engineering/archive-reconciliation.json") +PLANNING_ID = re.compile(r"^CLI-(?:PLAN|E0[1-8]|0(?:0[1-9]|1[0-9]|2[0-4]))$") +ALLOWED_KINDS = frozenset({"roadmap", "epic", "governance", "bug", "feature", "validation", "research"}) +ALLOWED_PRIORITIES = frozenset({"P1", "P2", "P3"}) +ALLOWED_STATUSES = frozenset( + { + "Needs refinement", + "Contract blocked", + "Artifact blocked", + "Ready", + "In progress", + "In review", + "Qualified", + "Deferred", + } +) +REQUIRED_ITEM_FIELDS = frozenset( + { + "id", + "repository_key", + "kind", + "title", + "parent", + "epic", + "milestone", + "priority", + "observation", + "objective", + "requirements", + "acceptance", + "tests", + "risks", + "blocked_by", + "sources", + "branch", + "pr_title", + "scope_exclusions", + "completion_artifacts", + "mandatory", + "evidence", + "children", + "blocks", + "status", + "repository", + "artifact_gate", + "labels", + "path", + "long_term_impact", + "benefits", + "body_template", + } +) + + +def require(condition: bool, message: str) -> None: + """Raise an always-enabled validation error instead of relying on assert.""" + if not condition: + raise ValueError(message) + + +def require_non_empty_strings(value: Any, field: str, item_id: str) -> list[str]: + require(isinstance(value, list) and value, f"{item_id}: {field} must be a non-empty array.") + require( + all(isinstance(entry, str) and entry.strip() for entry in value), + f"{item_id}: {field} must contain non-empty strings.", + ) + return value + + +def ensure_acyclic(dependencies: Mapping[str, Iterable[str]]) -> None: + """Fail with the cycle path when local blocked-by dependencies are cyclic.""" + state: dict[str, int] = {} + stack: list[str] = [] + + def visit(node: str) -> None: + node_state = state.get(node, 0) + if node_state == 1: + start = stack.index(node) + raise ValueError("Cyclic local blocked_by dependency: " + " -> ".join([*stack[start:], node])) + if node_state == 2: + return + + state[node] = 1 + stack.append(node) + for dependency in dependencies[node]: + visit(dependency) + stack.pop() + state[node] = 2 + + for item_id in dependencies: + visit(item_id) + + +def validate_manifest_data(data: Mapping[str, Any]) -> tuple[dict[str, dict[str, Any]], dict[str, int]]: + """Validate backlog schema and local/cross-repository dependency invariants.""" + require(data.get("schema_version") == 1, "backlog.json: schema_version must be 1.") + require(data.get("bootstrap_id") == "ce-engineering-2026-09-21", "backlog.json: unexpected bootstrap_id.") + + repository = data.get("repository") + require(isinstance(repository, dict), "backlog.json: repository must be an object.") + require(repository.get("key") == "client", "backlog.json: repository.key must be client.") + require( + repository.get("repository") == "CheatEngineNet/CheatEngine.Client", + "backlog.json: repository.repository must be CheatEngineNet/CheatEngine.Client.", + ) + + raw_items = data.get("items") + require(isinstance(raw_items, list) and raw_items, "backlog.json: items must be a non-empty array.") + items: dict[str, dict[str, Any]] = {} + for item in raw_items: + require(isinstance(item, dict), "backlog.json: every item must be an object.") + item_id = item.get("id") + require(isinstance(item_id, str) and PLANNING_ID.fullmatch(item_id), f"Invalid planning ID: {item_id!r}.") + require(item_id not in items, f"Duplicate planning ID: {item_id}.") + missing = REQUIRED_ITEM_FIELDS - item.keys() + require(not missing, f"{item_id}: missing required fields: {', '.join(sorted(missing))}.") + require(item["repository_key"] == "client", f"{item_id}: repository_key must be client.") + require( + item["repository"] == repository["repository"], + f"{item_id}: repository does not match manifest repository.", + ) + require(item["kind"] in ALLOWED_KINDS, f"{item_id}: unknown kind {item['kind']!r}.") + require(item["priority"] in ALLOWED_PRIORITIES, f"{item_id}: unknown priority {item['priority']!r}.") + require(item["status"] in ALLOWED_STATUSES, f"{item_id}: unknown status {item['status']!r}.") + require_non_empty_strings(item["requirements"], "requirements", item_id) + require_non_empty_strings(item["acceptance"], "acceptance", item_id) + require_non_empty_strings(item["tests"], "tests", item_id) + require_non_empty_strings(item["sources"], "sources", item_id) + require_non_empty_strings(item["scope_exclusions"], "scope_exclusions", item_id) + require_non_empty_strings(item["completion_artifacts"], "completion_artifacts", item_id) + require(isinstance(item["blocked_by"], list), f"{item_id}: blocked_by must be an array.") + require(isinstance(item["blocks"], list), f"{item_id}: blocks must be an array.") + require(isinstance(item["children"], list), f"{item_id}: children must be an array.") + required_text = [ + item["title"], + item["observation"], + item["objective"], + item["risks"], + item["mandatory"], + item["evidence"], + item["artifact_gate"], + item["long_term_impact"], + item["benefits"], + item["body_template"], + ] + require( + all(isinstance(value, str) and value.strip() for value in required_text), + f"{item_id}: required text fields must be non-empty strings.", + ) + if item["kind"] in {"roadmap", "epic"}: + require( + item["branch"] is None and item["pr_title"] is None, + f"{item_id}: roadmap and epic items must not propose an implementation branch or PR title.", + ) + else: + require( + isinstance(item["branch"], str) + and item["branch"].strip() + and isinstance(item["pr_title"], str) + and item["pr_title"].strip(), + f"{item_id}: implementation leaves must include a branch and PR title.", + ) + marker = f"" + require(marker in item["body_template"], f"{item_id}: body_template has no stable marker.") + expected_path = (WORK_ITEMS_RELATIVE_PATH / f"{item_id}.md").as_posix() + require(item["path"] == expected_path, f"{item_id}: path must be {expected_path}.") + require( + {"ce:bootstrap", f"ce:kind:{item['kind']}", f"ce:priority:{item['priority']}"}.issubset(item["labels"]), + f"{item_id}: labels must include bootstrap, kind, and priority values.", + ) + items[item_id] = item + + milestones = data.get("milestones") + require(isinstance(milestones, list) and milestones, "backlog.json: milestones must be a non-empty array.") + milestone_ids: set[str] = set() + for milestone in milestones: + require(isinstance(milestone, dict), "backlog.json: every milestone must be an object.") + milestone_id = milestone.get("id") + require( + isinstance(milestone_id, str) and re.fullmatch(r"CLI-M[0-6]", milestone_id), + f"Invalid milestone ID: {milestone_id!r}.", + ) + require(milestone_id not in milestone_ids, f"Duplicate milestone ID: {milestone_id}.") + require(milestone.get("repository_key") == "client", f"{milestone_id}: repository_key must be client.") + require( + milestone.get("due_on") is None and milestone.get("release_version") is None, + f"{milestone_id}: bootstrap must not invent a due date or release version.", + ) + milestone_ids.add(milestone_id) + + external_dependencies = data.get("external_dependencies") + require(isinstance(external_dependencies, list), "backlog.json: external_dependencies must be an array.") + external_edges: set[tuple[str, str]] = set() + for edge in external_dependencies: + require(isinstance(edge, dict), "backlog.json: every external dependency must be an object.") + blocker, blocked, relationship = edge.get("blocker"), edge.get("blocked"), edge.get("relationship") + require(isinstance(blocker, str) and blocker.startswith("SDK-"), f"Invalid external blocker: {blocker!r}.") + require(blocked in items, f"External dependency has unknown Client item: {blocked!r}.") + require(relationship == "blocked_by", f"{blocker} -> {blocked}: relationship must be blocked_by.") + require((blocker, blocked) not in external_edges, f"Duplicate external dependency: {blocker} -> {blocked}.") + external_edges.add((blocker, blocked)) + + local_dependencies: dict[str, list[str]] = {} + for item_id, item in items.items(): + parent = item["parent"] + require(parent is None or parent in items, f"{item_id}: parent references an unknown item.") + if parent is not None: + require(item_id in items[parent]["children"], f"{item_id}: parent does not list this child.") + for child in item["children"]: + require(child in items, f"{item_id}: child references an unknown item: {child!r}.") + require(items[child]["parent"] == item_id, f"{item_id}: child {child} has a different parent.") + milestone = item["milestone"] + require(milestone is None or milestone in milestone_ids, f"{item_id}: unknown milestone {milestone!r}.") + if item["kind"] == "roadmap": + require( + parent is None and milestone is None and item["epic"] is None, + f"{item_id}: roadmap must be the hierarchy root.", + ) + elif item["kind"] == "epic": + require(item["epic"] is None, f"{item_id}: an epic cannot belong to another epic.") + else: + require( + item["epic"] in items and items[item["epic"]]["kind"] == "epic", + f"{item_id}: leaf must name an existing epic.", + ) + require(parent == item["epic"], f"{item_id}: leaf parent and epic must agree.") + + local_dependencies[item_id] = [] + for blocker in item["blocked_by"]: + require(isinstance(blocker, str) and blocker, f"{item_id}: blocked_by contains an invalid value.") + if blocker in items: + require( + item_id in items[blocker]["blocks"], + f"{item_id}: local blocker {blocker} lacks the reverse blocks edge.", + ) + local_dependencies[item_id].append(blocker) + else: + require((blocker, item_id) in external_edges, f"{item_id}: undeclared external blocker {blocker}.") + for blocked in item["blocks"]: + require(blocked in items, f"{item_id}: blocks references an unknown item: {blocked!r}.") + require( + item_id in items[blocked]["blocked_by"], + f"{item_id}: blocked item {blocked} lacks the reverse blocked_by edge.", + ) + + ensure_acyclic(local_dependencies) + + for blocker, blocked in external_edges: + require(blocker in items[blocked]["blocked_by"], f"{blocker} -> {blocked}: missing external blocked_by edge.") + + return items, {"items": len(items), "milestones": len(milestone_ids), "external_dependencies": len(external_edges)} + + +def validate_work_item_documents(repository_root: Path, items: Mapping[str, Mapping[str, Any]]) -> None: + """Verify the actual versioned documents behind the manifest item paths.""" + for item_id, item in items.items(): + document = repository_root / item["path"] + require(document.is_file(), f"{item_id}: missing work-item document {item['path']}.") + content = document.read_text(encoding="utf-8") + marker = f"" + require(content.count(marker) == 1, f"{item_id}: document must contain exactly one stable marker.") + require(f"## {item_id} " in content, f"{item_id}: document has no matching level-two heading.") + + +def validate_archive_reconciliation(repository_root: Path, item_ids: set[str]) -> dict[str, int]: + """Validate the checked-in, bounded reconciliation of the supplied review archive.""" + reconciliation_path = repository_root / ARCHIVE_RECONCILIATION_RELATIVE_PATH + require( + reconciliation_path.is_file(), + f"Missing archive reconciliation: {ARCHIVE_RECONCILIATION_RELATIVE_PATH.as_posix()}.", + ) + try: + reconciliation = json.loads(reconciliation_path.read_text(encoding="utf-8")) + except json.JSONDecodeError as exception: + raise ValueError( + f"Invalid JSON in {ARCHIVE_RECONCILIATION_RELATIVE_PATH.as_posix()}: {exception}" + ) from exception + + require(isinstance(reconciliation, dict), "archive-reconciliation.json: root must be an object.") + require(reconciliation.get("schema_version") == 1, "archive-reconciliation.json: schema_version must be 1.") + + archive = reconciliation.get("archive") + require(isinstance(archive, dict), "archive-reconciliation.json: archive must be an object.") + require( + archive.get("file_name") == "CheatEngineNet_Architecture_Review_2026-09-21.zip", + "archive-reconciliation.json: unexpected archive file name.", + ) + require( + isinstance(archive.get("sha256"), str) and re.fullmatch(r"[0-9a-f]{64}", archive["sha256"]), + "archive-reconciliation.json: archive.sha256 must be a lowercase SHA-256 value.", + ) + require( + archive.get("content_manifest") == "SHA256SUMS.json" + and isinstance(archive.get("content_manifest_sha256"), str) + and re.fullmatch(r"[0-9a-f]{64}", archive["content_manifest_sha256"]), + "archive-reconciliation.json: content manifest identity is invalid.", + ) + + counts = reconciliation.get("counts") + require(isinstance(counts, dict), "archive-reconciliation.json: counts must be an object.") + expected_counts = { + "findings": 36, + "specified_product_scenarios": 80, + "ownership_rows": 32, + "capability_rows": 17, + } + require(counts == expected_counts, "archive-reconciliation.json: unexpected archive inventory counts.") + + evidence_levels = reconciliation.get("evidence_levels") + require( + evidence_levels == ["source", "package", "fixture", "live"], + "archive-reconciliation.json: evidence_levels must preserve the source/package/fixture/live boundary.", + ) + ownership = reconciliation.get("ownership_summary") + require( + isinstance(ownership, list) and ownership, + "archive-reconciliation.json: ownership_summary must be non-empty.", + ) + for entry in ownership: + require(isinstance(entry, dict), "archive-reconciliation.json: every ownership entry must be an object.") + require( + all( + isinstance(entry.get(key), str) and entry[key].strip() + for key in ("area", "owner", "client_boundary") + ), + "archive-reconciliation.json: ownership entries require area, owner, and client_boundary.", + ) + require(entry["owner"] in {"SDK", "Client", "Shared"}, "archive-reconciliation.json: unknown ownership owner.") + + groups = reconciliation.get("finding_groups") + require(isinstance(groups, list) and groups, "archive-reconciliation.json: finding_groups must be non-empty.") + reconciled_findings: list[str] = [] + for group in groups: + require(isinstance(group, dict), "archive-reconciliation.json: every finding group must be an object.") + require( + all(isinstance(group.get(key), str) and group[key].strip() for key in ("id", "description")), + "archive-reconciliation.json: finding groups require id and description.", + ) + findings = require_non_empty_strings(group.get("findings"), "findings", group["id"]) + client_items = require_non_empty_strings(group.get("client_items"), "client_items", group["id"]) + require(set(client_items) <= item_ids, f"{group['id']}: references an unknown Client planning item.") + reconciled_findings.extend(findings) + + expected_findings = {f"R{number:02d}" for number in range(1, 37)} + require( + set(reconciled_findings) == expected_findings and len(reconciled_findings) == len(expected_findings), + "archive-reconciliation.json: finding groups must cover R01 through R36 exactly once.", + ) + return { + "archive_findings": counts["findings"], + "specified_product_scenarios": counts["specified_product_scenarios"], + } + + +def validate_repository(repository_root: Path) -> dict[str, int]: + """Validate the checked-in manifest and matching work-item documents.""" + root = repository_root.resolve() + manifest_path = root / MANIFEST_RELATIVE_PATH + require(manifest_path.is_file(), f"Missing engineering manifest: {MANIFEST_RELATIVE_PATH.as_posix()}.") + try: + data = json.loads(manifest_path.read_text(encoding="utf-8")) + except json.JSONDecodeError as exception: + raise ValueError(f"Invalid JSON in {MANIFEST_RELATIVE_PATH.as_posix()}: {exception}") from exception + require(isinstance(data, dict), "backlog.json: root must be an object.") + items, summary = validate_manifest_data(data) + validate_work_item_documents(root, items) + summary.update(validate_archive_reconciliation(root, set(items))) + return summary + + +def parse_arguments() -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--repository-root", + type=Path, + default=Path(__file__).resolve().parents[1], + help="Repository root containing docs/engineering/backlog.json (default: script parent).", + ) + return parser.parse_args() + + +def main() -> int: + arguments = parse_arguments() + try: + summary = validate_repository(arguments.repository_root) + except (OSError, ValueError) as exception: + print(f"Engineering manifest validation failed: {exception}", file=sys.stderr) + return 1 + print( + "Validated {items} engineering work items, {milestones} milestones, " + "{external_dependencies} external dependencies, and the {archive_findings}-finding/" + "{specified_product_scenarios}-scenario archive reconciliation; product tests were not executed.".format( + **summary + ) + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/eng/tests/test_validate_engineering_manifest.py b/eng/tests/test_validate_engineering_manifest.py new file mode 100644 index 0000000..0b1da2d --- /dev/null +++ b/eng/tests/test_validate_engineering_manifest.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +import copy +import importlib.util +import json +import tempfile +import unittest +from pathlib import Path + + +REPOSITORY_ROOT = Path(__file__).resolve().parents[2] +VALIDATOR_PATH = REPOSITORY_ROOT / "eng" / "Validate-EngineeringManifest.py" +SPECIFICATION = importlib.util.spec_from_file_location("engineering_manifest_validator", VALIDATOR_PATH) +if SPECIFICATION is None or SPECIFICATION.loader is None: + raise RuntimeError(f"Unable to load validator from {VALIDATOR_PATH}.") +VALIDATOR = importlib.util.module_from_spec(SPECIFICATION) +SPECIFICATION.loader.exec_module(VALIDATOR) + + +def load_manifest() -> dict: + return json.loads((REPOSITORY_ROOT / "docs" / "engineering" / "backlog.json").read_text(encoding="utf-8")) + + +class EngineeringManifestValidatorTests(unittest.TestCase): + def test_checked_in_manifest_and_documents_are_valid(self) -> None: + summary = VALIDATOR.validate_repository(REPOSITORY_ROOT) + + self.assertEqual( + summary, + { + "items": 33, + "milestones": 7, + "external_dependencies": 25, + "archive_findings": 36, + "specified_product_scenarios": 80, + }, + ) + + def test_external_dependency_must_belong_to_its_declared_client_item(self) -> None: + manifest = load_manifest() + cli_007 = next(item for item in manifest["items"] if item["id"] == "CLI-007") + cli_007["blocked_by"].remove("SDK-008") + cli_007["blocked_by"].append("SDK-007") + + with self.assertRaisesRegex(ValueError, "undeclared external blocker SDK-007"): + VALIDATOR.validate_manifest_data(manifest) + + def test_item_path_must_name_the_versioned_work_item_document(self) -> None: + manifest = load_manifest() + cli_001 = next(item for item in manifest["items"] if item["id"] == "CLI-001") + cli_001["path"] = "issues/client/CLI-001.md" + + with self.assertRaisesRegex(ValueError, "path must be docs/engineering/work-items/CLI-001.md"): + VALIDATOR.validate_manifest_data(manifest) + + def test_cycle_is_rejected(self) -> None: + dependencies = {"CLI-001": ["CLI-002"], "CLI-002": ["CLI-001"]} + + with self.assertRaisesRegex(ValueError, "Cyclic local blocked_by dependency"): + VALIDATOR.ensure_acyclic(dependencies) + + def test_reverse_dependency_is_required(self) -> None: + manifest = copy.deepcopy(load_manifest()) + cli_001 = next(item for item in manifest["items"] if item["id"] == "CLI-001") + cli_001["blocks"] = [] + + with self.assertRaisesRegex(ValueError, "lacks the reverse blocks edge"): + VALIDATOR.validate_manifest_data(manifest) + + def test_archive_reconciliation_requires_every_finding_exactly_once(self) -> None: + reconciliation_path = REPOSITORY_ROOT / "docs" / "engineering" / "archive-reconciliation.json" + reconciliation = json.loads(reconciliation_path.read_text(encoding="utf-8")) + reconciliation["finding_groups"][0]["findings"].remove("R17") + temporary_root = self._write_reconciliation(reconciliation) + item_ids = {item["id"] for item in load_manifest()["items"]} + + with self.assertRaisesRegex(ValueError, "cover R01 through R36 exactly once"): + VALIDATOR.validate_archive_reconciliation(temporary_root, item_ids) + + def _write_reconciliation(self, reconciliation: dict) -> Path: + temporary_root = self._temporary_directory() + reconciliation_directory = temporary_root / "docs" / "engineering" + reconciliation_directory.mkdir(parents=True) + reconciliation_path = reconciliation_directory / "archive-reconciliation.json" + reconciliation_path.write_text(json.dumps(reconciliation), encoding="utf-8") + return temporary_root + + def _temporary_directory(self) -> Path: + temporary_directory = self.enterContext(tempfile.TemporaryDirectory()) + return Path(temporary_directory) + + +if __name__ == "__main__": + unittest.main()