Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions .github/ISSUE_TEMPLATE/engineering-work.yml
Original file line number Diff line number Diff line change
@@ -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.
49 changes: 49 additions & 0 deletions .github/ISSUE_TEMPLATE/epic.yml
Original file line number Diff line number Diff line change
@@ -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.
49 changes: 49 additions & 0 deletions .github/ISSUE_TEMPLATE/research.yml
Original file line number Diff line number Diff line change
@@ -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.
33 changes: 33 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## Outcome and linked issue

Closes <!-- link only the issue actually completed by this PR -->

## 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.
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/main-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ on:
- 'Directory.Build.targets'
- 'Directory.Packages.props'
- 'README.md'
- 'ROADMAP.md'
- 'docs/**'
- 'eng/**'
- 'global.json'
- 'libs/**'
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/pull-request-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ on:
- 'Directory.Build.targets'
- 'Directory.Packages.props'
- 'README.md'
- 'ROADMAP.md'
- 'docs/**'
- 'eng/**'
- 'global.json'
- 'libs/**'
Expand Down
99 changes: 99 additions & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -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.
14 changes: 12 additions & 2 deletions docs/adr/0004-capability-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Loading