Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
52d0615
Plan Icod.DCurses 1.4 interaction routing
uniblab Sep 12, 2026
d70b6a9
Freeze T1401 interaction routing contract
uniblab Sep 12, 2026
7ee0a8e
Add failing T1402 interaction registry tests
uniblab Sep 12, 2026
aa76c4c
Clean T1402 RED test lambdas
uniblab Sep 12, 2026
f580bc4
Implement T1402 interaction region options
uniblab Sep 12, 2026
4f5f214
Implement T1402 interaction region lifetime
uniblab Sep 12, 2026
b0d2271
Implement T1402 interaction region registry
uniblab Sep 12, 2026
6a6648d
Begin Icod.DCurses 1.4.0 alpha line
uniblab Sep 12, 2026
84d93c6
Record T1402 alpha public API fingerprint
uniblab Sep 12, 2026
d705f4d
Advance current API fingerprint gate to 1.4
uniblab Sep 12, 2026
3da8789
Record T1402 interaction region registry
uniblab Sep 12, 2026
e479574
Add failing T1403 hit testing tests
uniblab Sep 12, 2026
783869b
Implement T1403 interaction hit result
uniblab Sep 12, 2026
aa4da17
Implement T1403 deterministic hit testing
uniblab Sep 12, 2026
f97c116
Advance 1.4 API fingerprint for T1403
uniblab Sep 12, 2026
137261e
Record T1403 deterministic hit testing
uniblab Sep 12, 2026
3785c26
Add failing T1404 logical focus tests
uniblab Sep 12, 2026
5ef1902
Implement T1404 logical focus and traversal
uniblab Sep 12, 2026
d380fa0
Advance 1.4 API fingerprint for T1404
uniblab Sep 12, 2026
7ab6ab0
Record T1404 logical focus and traversal
uniblab Sep 12, 2026
2b66882
Add failing T1405 semantic gesture tests
uniblab Sep 12, 2026
ef234ff
Implement T1405 semantic key gestures
uniblab Sep 12, 2026
e755b29
Advance 1.4 API fingerprint for T1405
uniblab Sep 12, 2026
bf57ed9
Record T1405 semantic keyboard gestures
uniblab Sep 12, 2026
0567ff1
Add failing T1406 command routing tests
uniblab Sep 12, 2026
3475d09
Prepare interaction region for T1406 bindings
uniblab Sep 12, 2026
b77c3ef
Prepare interaction router for T1406 routing
uniblab Sep 12, 2026
1f5c413
Add T1406 command identity
uniblab Sep 12, 2026
9f3cfff
Add T1406 interaction result kind
uniblab Sep 12, 2026
40dbf42
Add T1406 structured interaction result
uniblab Sep 12, 2026
bf499fd
Implement T1406 region gesture bindings
uniblab Sep 12, 2026
6ae45c5
Implement T1406 structured interaction routing
uniblab Sep 12, 2026
e016058
Advance 1.4 API fingerprint through T1406
uniblab Sep 13, 2026
6652e21
Document T1406 command bindings and structured routing
uniblab Sep 13, 2026
97fd5eb
Add T1407 pointer-shape integration red tests
uniblab Sep 13, 2026
ddf6544
Add T1407 pointer-shape vocabulary
uniblab Sep 13, 2026
435bce7
Add T1407 region pointer preference
uniblab Sep 13, 2026
2d2d705
Implement T1407 region pointer preference
uniblab Sep 13, 2026
523577b
Add T1407 pointer preference to interaction hits
uniblab Sep 13, 2026
178ee57
Add T1407 DCurses pointer-shape lease
uniblab Sep 13, 2026
75dc454
Bridge T1407 pointer shapes to Terminal leases
uniblab Sep 13, 2026
32ff707
Advance 1.4 API fingerprint for T1407
uniblab Sep 13, 2026
83a636c
Document T1407 pointer-shape integration
uniblab Sep 13, 2026
44ea46a
Add T1408 resize and lifecycle coherence acceptance
uniblab Sep 13, 2026
1fca652
Document T1408 interaction coherence acceptance
uniblab Sep 13, 2026
beb7316
Specify T1409 interaction acceptance sample
uniblab Sep 13, 2026
85d69b6
Tighten T1409 interaction sample design
uniblab Sep 13, 2026
9d16735
Correct T1409 layout API name
uniblab Sep 13, 2026
c99862a
Plan T1409 interaction acceptance sample
uniblab Sep 13, 2026
e4450cc
Refine T1409 interaction sample plan
uniblab Sep 13, 2026
fae011d
Add failing T1409 sample project contract test
uniblab Sep 13, 2026
aa77c87
Add T1409 interaction sample project
uniblab Sep 13, 2026
07f49b5
Add T1409 interaction sample placeholder
uniblab Sep 13, 2026
b8b0466
Wire T1409 interaction sample into solution
uniblab Sep 13, 2026
e2b5ff4
Add failing T1409 interaction source contract test
uniblab Sep 13, 2026
20420fa
Add T1409 interaction sample state
uniblab Sep 13, 2026
581b708
Implement T1409 interaction acceptance sample
uniblab Sep 13, 2026
1e03946
Add failing T1409 interaction sample documentation test
uniblab Sep 13, 2026
4c0ab56
Document T1409 interaction sample
uniblab Sep 13, 2026
021a040
Record T1409 interaction acceptance sample
uniblab Sep 13, 2026
5b7e8fe
Plan T1410 interaction hardening
uniblab Sep 13, 2026
829eaeb
Harden interaction routing performance
uniblab Sep 13, 2026
f01f173
Stress interaction routing bounds and churn
uniblab Sep 13, 2026
0d5509f
Audit interaction routing ownership boundaries
uniblab Sep 13, 2026
6907250
Record T1410 interaction hardening
uniblab Sep 13, 2026
40cce1c
optimize keywords/tags
uniblab Sep 13, 2026
4815849
T1411 expand package-only interaction coverage
uniblab Sep 13, 2026
322b7a8
T1411 keep package compile probes live
uniblab Sep 13, 2026
99df9d2
Update Terminal and TermInfo dependencies
uniblab Sep 13, 2026
87460b3
Update sample dependency documentation
uniblab Sep 13, 2026
2c519c7
docs: refresh README for 1.4 interaction routing
uniblab Sep 13, 2026
58e1082
docs: polish sample guide for 1.4
uniblab Sep 13, 2026
f1af986
docs: refresh active 1.4 roadmap status
uniblab Sep 13, 2026
cdf8dc9
docs: refresh 1.1-1.4 release train status
uniblab Sep 13, 2026
3b41d35
docs: clarify pointer lease lifetime in 1.4 example
uniblab Sep 13, 2026
60cc4cb
docs: advance 1.4 roadmap to T1411 qualification
uniblab Sep 13, 2026
570715e
Record T1411 release regret audit
uniblab Sep 13, 2026
c284cbb
Promote Icod.DCurses 1.4.0 RC
uniblab Sep 13, 2026
5dc2713
Begin T1412 RC and stable closure
uniblab Sep 13, 2026
f21110e
Document Icod.DCurses 1.4 RC qualification
uniblab Sep 13, 2026
9e6a17f
Harden rich-input acceptance timeout
uniblab Sep 13, 2026
7f6bced
Record RC timeout hardening evidence
uniblab Sep 13, 2026
96761c8
Promote Icod.DCurses 1.4.0 stable source
uniblab Sep 13, 2026
252f82c
Document Icod.DCurses 1.4 stable source
uniblab Sep 13, 2026
9e951cc
Promote T1412 stable-source qualification
uniblab Sep 13, 2026
e33dea3
Update development roadmap for 1.4 stable source
uniblab Sep 13, 2026
52f35df
Update release train for 1.4 stable source
uniblab Sep 13, 2026
571af7e
Update 1.4 roadmap for stable-source qualification
uniblab Sep 13, 2026
76a4811
Close 1.4 stable-source documentation
uniblab Sep 13, 2026
267f633
Close T1412 stable-source qualification
uniblab Sep 13, 2026
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
134 changes: 81 additions & 53 deletions Icod.DCurses-1.1.0-to-1.4.0-Development-Roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,101 +2,129 @@

**Project:** `Icod.DCurses`
**Scope:** post-1.0 additive core development
**Published compatibility floor:** `1.2.0`
**Current main source package:** `1.3.0`
**Published compatibility floor:** `1.3.0`
**Current published package:** `1.3.0`
**Assembly version policy:** retain `1.0.0.0` through compatible additive 1.x releases
**Current declared runtime dependencies:** `Icod.Terminal 1.11.1`; `Icod.TermInfo 1.11.0`
**Planning status:** 1.3 complete, merged, and Release-qualified; 1.4 remains the approved next development release
**Current declared runtime dependencies:** `Icod.Terminal 1.13.0`; `Icod.TermInfo 1.12.0`
**Planning status:** 1.3 is complete/published; 1.4 has completed T1401-T1411 and is in T1412 stable-source qualification

---

## Release sequence

```text
1.1.0 semantic cell metadata + hyperlinks complete/published history
1.2.0 panels/layers + z-order composition complete/published
1.3.0 layout + resize primitives complete/merged; publication pending
1.4.0 focus/interaction/key gestures/hit testing/pointer approved future release
1.2.0 panels/layers + z-order composition complete/published history
1.3.0 layout + resize primitives complete/published
1.4.0 interaction routing/focus/gestures/hit testing stable-source qualification active
```

The sequence is cumulative: 1.1 adds meaning to retained content; 1.2 composes overlapping retained surfaces; 1.3 makes geometry manageable; 1.4 routes semantic input to logical regions.
The sequence is cumulative: 1.1 adds meaning to retained content; 1.2 composes overlapping retained surfaces; 1.3 makes geometry manageable; 1.4 routes semantic input to logical application regions.

## Ownership boundary

DCurses consumes Terminal's live-session/input/lifecycle/semantic-output contracts rather than terminal-family protocol details and does not install private protocol writers or a second input owner.

The 1.3 layout work preserves the same ownership principle internally: geometry values are immutable, `CursesLayout` is pure/stateless, and applications explicitly recompute/apply layout rather than delegating control to a background layout owner.
The 1.3 layout work preserved that ownership principle internally: geometry values are immutable, `CursesLayout` is pure/stateless, and applications explicitly recompute/apply layout rather than delegating control to a background layout owner.

## Published 1.2 floor
The 1.4 interaction work extends the same principle. DCurses classifies and routes already-normalized input, while `Icod.Terminal` remains authoritative for terminal input decoding, rich-input protocol ownership, pointer-shape transport/lifetime, session lifecycle, and output serialization.

```text
47 exported types
356 canonical declared contract lines
sha256 4810ebb088764acedbb94aca84b231677886b9c1a1f920d9a30f960cbe1dfce7
```

`CursesPanel` and `CursesPanelTransparency` are the two 1.2 exported additions. The published contract includes retained panel content, deterministic z-order, show/hide, movement/ordering, opaque or blank-transparent composition, clipping, incremental recomposition, semantic-metadata/wide-cell coherence, live refresh/lifecycle integration, and deterministic one-way disposal.

Panel dimensions are fixed in the published 1.2 package; resize/layout belongs to 1.3.

## Release 1.3 — layout and resize primitives

Frozen stable-source contract:
## Published 1.3 floor

```text
51 exported types
406 canonical declared contract lines
sha256 a655bd85e3c88f5bf38ad0d43a148e3bd06a9e943bbf3e3aa2e21575ffb07424
```

Four exported types are added over 1.2:
Tagged baseline:

```text
CursesRectangle
CursesInsets
CursesDockEdge
CursesLayout
v1.3.0 -> c10ca043a666b85225f2d3b8955a1ac2075b0d31
```

Additive members on existing types provide screen/window/panel bounds, atomic rectangle application, and retained panel resizing.
Current 1.4 interaction fingerprint:

```text
62 exported types
491 canonical declared contract lines
sha256 8afe72deaa5354ee072de8ae17b04d8a1a0a8f730d5e3a737b4a47a539379147
```

Version 1.3 contributes the reusable `CursesRectangle` coordinate substrate, screen/window/panel bounds, explicit rectangle application, retained panel resizing, and lifecycle-driven application relayout model which 1.4 consumes rather than replaces.

## Release 1.4 — deterministic interaction routing

The accepted 1.3 design provides:
Version 1.4 turns the existing semantic input and geometry foundations into an application-facing interaction substrate without introducing widgets or a hidden event loop.

- immutable terminal-cell rectangles and insets;
- deterministic containment/intersection/inset semantics;
- fixed top/bottom/left/right allocation;
- proportional row/column allocation;
- Top/Right/Bottom/Left docking;
- clipping and explicit empty geometry;
- `CursesScreen.Bounds`;
- parent-relative nested `CursesWindow.Bounds` plus atomic `SetBounds`;
- screen-relative `CursesPanel.Bounds`, retained `Resize`, and atomic `SetBounds`;
- surviving upper-left content/metadata preservation on panel resize;
- width-two footprint repair at shrink boundaries;
- explicit lifecycle-driven recomputation from `session.Screen.Bounds`;
- a dedicated interactive layout sample;
- Unicode/metadata/repeated-resize hardening;
- application/performance/allocation acceptance with no retained layout state;
- fresh NuGet-only package consumption of the full 1.3 surface.
The implemented surface provides:

T1310 qualified exact head `c8d6a6313b9f6ca124a255c12b912f8ed89ffda7` in workflow #681 / `34694609178`, all seven jobs green. The API regret audit found no naming, mutability, ambiguity, ownership, or 1.4-reuse correction requiring an API break.
- bounded screen-bound interaction-region registration;
- screen-relative and panel-associated hit targets;
- deterministic overlap resolution using panel z-order plus region precedence;
- region-local coordinate translation;
- logical focus independent of terminal/window-manager focus;
- explicit focus/clear plus forward/backward traversal;
- deterministic focus repair when regions become ineligible;
- immutable semantic keyboard gestures over the existing `CursesKey`, modifiers, characters, and event phases;
- region-local and router-global command bindings;
- structured routing results rather than callback invocation;
- pointer-shape preferences and a DCurses-shaped wrapper over Terminal-owned pointer leases;
- resize/panel visibility/reorder/disposal coherence;
- an application sample proving keyboard, mouse, panel, pointer, and live-resize composition;
- allocation/performance/adversarial qualification before stable promotion.

The unchanged implementation/API was promoted to `1.3.0-rc.1`; exact RC head `2ab949a64f63759ad9cf4e93e45a368c50ab6e49` passed workflow #689 / `34694881296` across all seven jobs. The declared dependencies were then advanced to `Icod.Terminal 1.11.1` and `Icod.TermInfo 1.11.0` without changing the frozen public API. Final stable-source head `b90b444556291434bddb9f56d031f09ac1aabfbf` passed workflow #719 / `34708925529` across all seven jobs. PR #27 was merged as `18255d59136922b9e246f4113dc6fdb6a9ea24a3`, and main Release workflow #17 / `34709142076` passed.
The detailed authorities are:

## Planned 1.4 focus and interaction mechanics
- `Icod.DCurses-1.4.0-Development-Roadmap.md`
- `docs/superpowers/specs/2026-09-12-icod-dcurses-1.4-interaction-routing-design.md`
- `docs/Public-API-Fingerprint-1.4.json`
- `docs/T1409-Interaction-Acceptance-Sample.md`
- `docs/T1410-Interaction-Performance-Allocation-and-Adversarial-Hardening.md`
- `docs/T1411-Public-API-Package-Documentation-and-Regret-Gate.md`
- `docs/T1412-RC-and-Stable-1.4.0-Closure.md`

Version 1.4 is planned to add focusable regions, focus traversal, keyboard gestures/commands, mouse hit testing, interaction regions, pointer-shape requests, focus repair, resize-aware hit testing, and deterministic overlap precedence. Terminal remains the authoritative input/protocol owner.
## 1.4 key policy decisions

The key 1.3-to-1.4 bridge is `CursesRectangle`: 1.4 can reuse the same immutable terminal-cell coordinate substrate for focus and hit-test regions without inventing a second geometry model or changing 1.3 layout ownership.
The approved direction deliberately keeps rendering and interaction separate.

Version 1.4 is not being pulled backward into 1.3. No focus router, gesture registry, hit-test tree, pointer policy, widget framework, raster placement, animation system, or general constraint solver belongs in the 1.3 release.
Interaction regions are not windows, panels, widgets, event handlers, or callbacks. They identify logical application targets and routing metadata. Ordinary regions are screen-relative. Panel-associated regions derive effective screen position and eligibility from their owning panel while preserving panel z-order as the first overlap discriminator.

Logical focus is application focus and is therefore distinct from `CursesFocusEvent`, which represents actual terminal focus reports. Terminal focus loss does not erase which application region is logically focused.

Mouse routing is hit testing, not automatic application policy. A click may identify a focusable target, but the router does not automatically focus it. Visual panel transparency does not automatically create mouse click-through semantics.

Keyboard command routing is semantic rather than escape-sequence based. Focused-region bindings take precedence over router-global bindings, and duplicate gestures within one binding scope are rejected instead of silently depending on registration order.

Pointer-shape preferences are routing data. Synchronous hit testing never performs asynchronous terminal output. The application/session layer explicitly applies the desired shape through DCurses-owned semantics which delegate transport and lifetime to `Icod.Terminal`.

## 1.4 tranche sequence

```text
T1401 contract/design/public-surface candidate freeze complete
T1402 interaction-region registry complete
T1403 hit testing / clipping / panel precedence complete
T1404 logical focus / traversal / repair complete
T1405 keyboard gestures complete
T1406 command bindings / routing result complete
T1407 pointer shape integration complete
T1408 resize / panel / lifecycle coherence complete
T1409 application acceptance sample complete
T1410 performance / allocation / hardening complete
T1411 API / package / docs / licensing / dependency gate complete
T1412 RC / stable-source closure active
```

## Cross-release rules

Compatible 1.x releases retain additive API by default, exact compiler-derived fingerprints, Terminal/TermInfo ownership boundaries, Unicode/wide-cell/metadata semantics, conservative lifecycle recovery, package-only consumer validation, Windows/Linux/macOS x64/ARM64 validation, and documentation/sample/package audits before stable promotion.

Historical release documents remain historical authorities and are not rewritten simply to reflect newer package/dependency state.

## Deliberate 1.4 exclusions

Version 1.4 does not add a widget/control library, retained widget hierarchy, event capture/bubbling tree, automatic focus-on-click policy, generalized drag/drop framework, flex/grid/constraint layout, automatic layout ownership, accessibility tree, raster scene graph, animation framework, PTY/process hosting, or raw terminal protocol escape hatches.

## Immediate next step

Repository-side 1.3 development is complete. Public `v1.3.0` tagging/GitHub Release/NuGet publication remain explicit release actions. The next approved development track is 1.4.0.
T1412 is the active release gate. The final `1.4.0-rc.1` head has passed the full seven-job package/runtime matrix and the unchanged accepted implementation/API has been promoted to stable-source `1.4.0`. Qualify the stable-source exact head through the same matrix, then present PR #29 for explicit merge approval. After merge, qualify the resulting `main` Release workflow before tagging, GitHub Release creation, or NuGet publication.
Loading
Loading