esedre 0.1.11 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +116 -74
- package/README.md +53 -10
- package/dist/esedre.mjs +2290 -325
- package/dist/web/assets/index-DDWeUKW-.css +2 -0
- package/dist/web/assets/index-DjaZk7Yp.js +117 -0
- package/dist/web/index.html +2 -2
- package/docs/assets/esedre-milestones.png +0 -0
- package/package.json +2 -2
- package/dist/web/assets/index-CfQ8qeBs.css +0 -2
- package/dist/web/assets/index-xIsWBrsf.js +0 -114
package/CHANGELOG.md
CHANGED
|
@@ -1,74 +1,116 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to Esedre are documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## [0.
|
|
9
|
-
|
|
10
|
-
###
|
|
11
|
-
- **
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
- **
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
- **
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- **
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
- **
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- **
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Esedre are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.0] - 2026-09-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Cross-Project Milestones & Deliverables Tracking**:
|
|
12
|
+
- Support cross-project milestone grouping allowing tickets across multiple projects to be associated with a unified milestone deliverable.
|
|
13
|
+
- Compound milestone selector syntax (`ProjectCode:MilestoneTitle` or `ProjectCode:MilestoneId`) for precise cross-project targeting and filtering.
|
|
14
|
+
- Embedded view and allow-list isolation: Out-of-scope tickets in a milestone render as masked placeholders when viewed in embedded host applications or restricted agent scopes.
|
|
15
|
+
- Dedicated CLI commands: `ese milestone list`, `ese milestone get`, `ese milestone create`, `ese milestone update`, `ese milestone delete`.
|
|
16
|
+
- Dedicated MCP tools: `esedre_list_milestones`, `esedre_get_milestone`, `esedre_create_milestone`, `esedre_update_milestone`.
|
|
17
|
+
- Web UI: Milestones view with real-time completion progress bars, umbrella feature flag status, and assigned ticket chips.
|
|
18
|
+
- **Cross-Project Ticket Linking & Dependencies**:
|
|
19
|
+
- Support bi-directional linked issues across tickets in the same project or across different projects (e.g. `Profe-136` relates to `Lab151-1`).
|
|
20
|
+
- Standard relations with inverse pairs: `relates-to` <-> `relates-to` (symmetric), `blocks` <-> `blocked-by` (inverse), `parent-of` <-> `child-of` (inverse), and `duplicates` <-> `duplicated-by` (inverse).
|
|
21
|
+
- Cycle detection preventing circular dependencies on `blocks` and `parent-of` trees.
|
|
22
|
+
- Automatic blocker detection (`isBlocked: true`) on tickets with uncompleted blockers.
|
|
23
|
+
- Agent Project Allow-List isolation: Redacts target metadata to `[Restricted Project]` when target project is outside `allowedProjects`.
|
|
24
|
+
- CLI commands: `ese link <sourceId> <relation> <targetId>` and `ese unlink <sourceId> <targetId>`, plus `--blocked` and `--linked-to <ticketKey>` query filters for `ese list`.
|
|
25
|
+
- MCP tools: `esedre_link_ticket` and `esedre_unlink_ticket`, with `isBlocked` and `linkedTo` filter arguments on `esedre_list_tickets`.
|
|
26
|
+
- Web UI: Standalone `LinkTicketModal`, Sub-tab 5: "Links" with relation badges and unlink actions, and `Blocked` warning pill in ticket headers.
|
|
27
|
+
- **Project Settings & Code Rename Engine**:
|
|
28
|
+
- CLI commands: `ese rename-project <oldCode> <newCode> [--name "<name>"]` and `ese project set <code> [--name "<name>"]`.
|
|
29
|
+
- Web UI: Project settings modal supporting live display name and code updates with automatic link and ticket migration.
|
|
30
|
+
- **Table of Contents Alignment & Layout Stability**:
|
|
31
|
+
- Web UI: Fixed-width ticket numbering eliminating zig-zag alignment in All Projects view, expanded title area, and static Type and Status pills at the far right.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
- **Windows CMD Batch Label Search Bug (`ese.cmd` / `esedre.cmd`)**:
|
|
35
|
+
- Refactored `WRAPPER_CMD` to dispatch through a `:run` subroutine and return via `goto :eof`, eliminating user-defined `:done` labels entirely.
|
|
36
|
+
- Resolved `cmd.exe` error `'The system cannot find the batch label specified - done'` caused when nested `call` invocations corrupted parent label search contexts.
|
|
37
|
+
- Added direct in-repo (`..\dist\esedre.mjs`) and local `node_modules` detection to invoke Node directly without batch hopping.
|
|
38
|
+
|
|
39
|
+
### Security
|
|
40
|
+
- **API Server Hardening**:
|
|
41
|
+
- Added 10MB payload ceiling to `readJsonBody` to prevent runaway memory allocation.
|
|
42
|
+
- Added `x-esedre-allowed-projects` to CORS preflight `Access-Control-Allow-Headers` response for cross-origin browser requests.
|
|
43
|
+
- Cleaned developer machine paths from staging tunnel configurations.
|
|
44
|
+
|
|
45
|
+
## [0.1.12] - 2026-09-26
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
- **UTF-8 En-Dash Mojibake Normalization**: Added `normalizeDashesAndMojibake` and `normalizeTicketFields` to transparently sanitize Windows-1252 mojibake (`–`), double-encoded UTF-8, and non-ASCII Unicode dashes (`\u2013`, `\u2014`, `\u2015`, `\u2012`, `\u2212`) into clean standard ASCII hyphens (`-`) across CLI tables, JSON projections, storage reads, and ticket mutations.
|
|
49
|
+
|
|
50
|
+
## [0.1.11] - 2026-09-26
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
- **Prevent Project Query Leak in Embedded Mode**: Guarded `window.history.replaceState` behind `!isEmbedded` in `PlannedWorkView` when switching project filters, added an explicit `isEmbedded` prop to `PlannedWorkViewProps`, and introduced `detectIsEmbedded` and `updateProjectUrlSearchParam` helpers to ensure embedded planners never mutate the host window's URL search parameters.
|
|
54
|
+
- **Published Version Collision Guard**: Added upfront registry version pre-check to `scripts/publish.js` to immediately detect and reject attempts to republish already-published versions before running the full build/test lifecycle.
|
|
55
|
+
|
|
56
|
+
## [0.1.10] - 2026-09-26
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
- **Single-Step Ticket Creation (`--detail` & `--file`)**: `ese create` accepts `--detail "<md>"` and `--file <path>` to populate `detail.md` specifications during ticket creation without requiring a secondary `ese plan` call.
|
|
60
|
+
- **MCP `esedre_create_ticket` Specification Markdown**: Added optional `detail` parameter to the MCP create tool for agents to mint tickets with full specifications in a single turn.
|
|
61
|
+
- **`ese refresh` CLI Alias**: Added `refresh` as a direct alias for `ese snapshot` to regenerate the `.esedre/snapshot.json` projection.
|
|
62
|
+
|
|
63
|
+
### Fixed
|
|
64
|
+
- **Windows CMD Batch Label Syntax Error**: Refactored `WRAPPER_CMD` (`ese.cmd` / `esedre.cmd`) to eliminate parenthesized `if (...)` blocks around `goto` statements, converted jump points to top-level labels, and prefixed all batch script invocations with `call` to prevent `'The system cannot find the batch label specified - done'` crashes on Windows.
|
|
65
|
+
- **PowerShell Console Stream UTF-8 Encoding**: Enforced `[Console]::OutputEncoding`, `[Console]::InputEncoding`, and `$OutputEncoding = UTF-8` in `ese.ps1` to prevent Unicode characters (en-dashes, quotes) from rendering as mojibake.
|
|
66
|
+
- **Structured JSON Output for `ese plan --json`**: Corrected `ese plan <id> --json` to emit a machine-readable JSON payload (`{ success, ticketId, project, planMarkdown, sha1 }`) instead of ANSI terminal text.
|
|
67
|
+
|
|
68
|
+
## [0.1.9] - 2026-09-25
|
|
69
|
+
|
|
70
|
+
### Added
|
|
71
|
+
- **Smart npm Publish Lifecycle Wrapper (`npm run pub`)**: Upfront authentication pre-check (`npm whoami`) with automatic interactive login before compilation, executing full prepublish test/lint/build lifecycle.
|
|
72
|
+
- **Multi-Layer Zero-Crawl Protection**: Edge and Vite middleware security preventing search spiders and AI crawler cataloging on development tunnels (`esedre.aroomwithamoose.com`).
|
|
73
|
+
- **Canonical Apex Ecosystem Links**: Standardized all portfolio ecosystem references to canonical apex `https://arwam.com`.
|
|
74
|
+
|
|
75
|
+
## [0.1.8] - 2026-09-11
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
- **Dynamic Configuration & Manifest Reloading**: 3-second TTL polling (`ensureFreshConfig`) reloading external hubs and manifests in real time without daemon restarts.
|
|
79
|
+
|
|
80
|
+
### Changed
|
|
81
|
+
- **Gateway Server Portfolio Decoupling**: Background daemon and gateway cluster (`ese start`) serve unconstrained portfolio views across all registered data hubs regardless of which workspace directory the server was launched from.
|
|
82
|
+
- **Slug Normalization**: Removed redundant `slug` field from `ProjectDescriptor`, manifests, and storage adapters in favor of canonical case-remembering `code`.
|
|
83
|
+
|
|
84
|
+
## [0.1.7] - 2026-09-11
|
|
85
|
+
|
|
86
|
+
### Added
|
|
87
|
+
- **Case-Remembering Project Resolution**: Preserves canonical casing for project codes up to 8 characters on disk and manifests while supporting case-insensitive lookups across CLI, MCP, and REST endpoints.
|
|
88
|
+
- **Workspaceless & Multi-Hub Project Init**: `ese init --project <Code> [--hub <name|path>]` creates projects directly in configured hubs without overwriting existing workspace configurations.
|
|
89
|
+
|
|
90
|
+
## [0.1.6] - 2026-09-10
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
- **Multi-Manifest Detection in `ese init`**: Auto-detects project codes and names from `Cargo.toml`, `pyproject.toml`, `settings.gradle.kts`, `app/build.gradle.kts`, and `go.mod`.
|
|
94
|
+
- **Global Port Settings**: Centralized port configuration in `~/.esedre/config.json` with CLI overrides and workspace inheritance.
|
|
95
|
+
- **Agent Project Allow-List Isolation**: Multi-tenant workspace scoping strictly limiting CLI and MCP access to declared `allowedProjects`.
|
|
96
|
+
|
|
97
|
+
## [0.1.5] - 2026-09-09
|
|
98
|
+
|
|
99
|
+
### Added
|
|
100
|
+
- **Interactive Web UI Assets & Previews**: Standalone React 19 web dashboard assets, dark and light preview cards, and documentation guides.
|
|
101
|
+
|
|
102
|
+
## [0.1.4] - 2026-09-08
|
|
103
|
+
|
|
104
|
+
### Added
|
|
105
|
+
- **MPL-2.0 License Transition**: Open source licensing under Mozilla Public License 2.0.
|
|
106
|
+
- **LLM Agent Long-Term Grounding Mission**: Formalized ground-truth architecture providing persistent context across compaction events.
|
|
107
|
+
|
|
108
|
+
## [0.1.1] - 2026-09-08
|
|
109
|
+
|
|
110
|
+
### Added
|
|
111
|
+
- **Project Onboarding & Configuration Tools**: Initial interactive setup via `ese configure` and `ese init`.
|
|
112
|
+
|
|
113
|
+
## [0.1.0] - 2026-09-08
|
|
114
|
+
|
|
115
|
+
### Added
|
|
116
|
+
- Initial release of the Esedre ticketing engine, CLI (`ese` / `esedre`), background daemon, and Model Context Protocol (MCP) server.
|
package/README.md
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
[](LICENSE)
|
|
10
10
|
[](tests/)
|
|
11
|
-
[](https://esedre.com)
|
|
12
|
+
[](https://arwam.com)
|
|
12
13
|
|
|
13
14
|
---
|
|
14
15
|
|
|
@@ -39,6 +40,7 @@ LLM coding agents possess extraordinary implementation speed, but face a fundame
|
|
|
39
40
|
4. **Agent Project Allow-List (Multi-Project Isolation)**: Informs each LLM agent only of the projects it is authorized to access, keeping unrelated project tickets, specifications, and plans completely isolated.
|
|
40
41
|
5. **Optimistic Concurrency Control**: SHA-1 content hashing on all tickets and plans, preventing concurrent agents or humans from clobbering each other's edits.
|
|
41
42
|
6. **Local Web Dashboard & Embeddable Component**: Run a visual dashboard with `ese start` to manage tickets in your browser, or embed `<esedre-planner>` into any web app without adding UI framework dependencies to your project.
|
|
43
|
+
7. **Project Milestones & Umbrella Flags**: Group tickets into release deliverables with real-time completion progress and umbrella feature flag propagation.
|
|
42
44
|
|
|
43
45
|
---
|
|
44
46
|
|
|
@@ -93,7 +95,7 @@ The server launches with unconstrained portfolio visibility across all registere
|
|
|
93
95
|
### 4. Create Your First Ticket
|
|
94
96
|
|
|
95
97
|
```bash
|
|
96
|
-
ese create --title "Build authentication flow" --type Feature
|
|
98
|
+
ese create --title "Build authentication flow" --type Feature --priority High
|
|
97
99
|
ese list
|
|
98
100
|
ese get 1
|
|
99
101
|
```
|
|
@@ -112,11 +114,14 @@ Core day-to-day workflow commands for scoping, viewing, planning, and verifying
|
|
|
112
114
|
|
|
113
115
|
| Command | Usage | Description |
|
|
114
116
|
|---|---|---|
|
|
115
|
-
| `list` | `ese list [-p\|--project <code\|all>] [-s\|--status <status>] [-t\|--type <type>] [--json]` | List roadmap tickets with optional filters. Defaults to the active project. |
|
|
116
|
-
| `get` | `ese get <id> [--json]` | View ticket specifications, feature breakdown, comments, and SHA-1 hash. |
|
|
117
|
+
| `list` | `ese list [-p\|--project <code\|all>] [-s\|--status <status>] [-t\|--type <type>] [-P\|--priority <priority>] [-m\|--milestone <name>] [--blocked] [--linked-to <key>] [--json]` | List roadmap tickets with optional filters. Defaults to the active project. |
|
|
118
|
+
| `get` | `ese get <id> [--json]` | View ticket specifications, feature breakdown, comments, links, and SHA-1 hash. |
|
|
117
119
|
| `plan` | `ese plan <id> [--set "<markdown>"] [--file <path>] [--last-hash <h>]` | Read or update the active implementation plan markdown. |
|
|
118
|
-
| `create` | `ese create --title "..." [-p\|--project <code>] [-t\|--type <type>] [--detail "<md>"] [--file <path>]` | Create a new ticket with auto-sequential ID
|
|
119
|
-
| `update` | `ese update <id> [-s\|--status <status>] [-t\|--type <type>] [--title "..."] [--last-hash <h>]` | Update ticket status, type, or title with optimistic concurrency protection. |
|
|
120
|
+
| `create` | `ese create --title "..." [-p\|--project <code>] [-t\|--type <type>] [-P\|--priority <priority>] [-m\|--milestone <name>] [--detail "<md>"] [--file <path>]` | Create a new ticket with auto-sequential ID, optional priority, optional milestone, and specification markdown. Title strictly capped at 48 chars. |
|
|
121
|
+
| `update` | `ese update <id> [-s\|--status <status>] [-t\|--type <type>] [-P\|--priority <priority\|none>] [-m\|--milestone <name\|none>] [--title "..."] [--last-hash <h>]` | Update ticket status, type, priority, milestone, or title with optimistic concurrency protection. |
|
|
122
|
+
| `link` | `ese link <sourceId> <relation> <targetId> [--author "..."]` | Establish a bi-directional link between two tickets. Relations: `relates-to`, `blocks`, `parent-of`, `duplicates`. |
|
|
123
|
+
| `unlink` | `ese unlink <sourceId> <targetId> [--relation <relation>]` | Remove a bi-directional link between two tickets. |
|
|
124
|
+
| `milestone` | `ese milestone [list\|get\|create\|update\|delete] [args...]` | Manage project milestones and umbrella feature flags with deliverables tracking. |
|
|
120
125
|
| `comment` | `ese comment <id> ["<text>"] [--text "..."] [--author "..."]` | Append a developer or LLM agent note to ticket history. |
|
|
121
126
|
| `snapshot`, `refresh` | `ese snapshot [--project <code>] [--json]` | Generate or refresh projection `.esedre/snapshot.json` for zero-latency agent context. |
|
|
122
127
|
| `projects` | `ese projects [--json]` | List registered projects within authorized scope. |
|
|
@@ -141,6 +146,8 @@ Commands for repository onboarding, central machine linking, and maintenance:
|
|
|
141
146
|
|---|---|---|
|
|
142
147
|
| `init` | `ese init [<path>] [--project <code>] [--name <name>] [--hub <name\|path>] [-y]` | Bring a project repository online, bootstrap a dedicated data hub (`--hub`), or create a project directly in a data hub (`--project <code>`). |
|
|
143
148
|
| `configure` | `ese configure [add <path> \| remove <code\|path> \| set <k> <v>]` | Inspect or mutate central configuration (`~/.esedre/config.json`). Link external project repositories or data hubs. |
|
|
149
|
+
| `rename-project` | `ese rename-project <oldCode> <newCode> [--name "<name>"]` | Rename a project code across directory storage paths, manifests, and tickets. |
|
|
150
|
+
| `project set` | `ese project set <code> [--name "<name>"]` | Update metadata for an existing project (e.g. display name). |
|
|
144
151
|
| `upgrade` | `ese upgrade [<path>] [--force \| -f]` | Upgrade workspace configuration schema, in-repo wrappers, and agent skills. |
|
|
145
152
|
|
|
146
153
|
> **Human vs LLM Agent Workflows**: Developer Administration commands (`init`, `configure`, `upgrade`) manage system-level repository linking and central machine configuration. They are intended for human developers during initial setup. Autonomous LLM coding partners operate within the authorized workspace scope using Roadmap and Service Daemon commands (`list`, `get`, `plan`, `create`, `update`, `comment`, `snapshot`, `start`, `status`).
|
|
@@ -183,13 +190,49 @@ To connect Esedre to **Google Antigravity**, **Claude Code**, **Cursor**, or any
|
|
|
183
190
|
```
|
|
184
191
|
|
|
185
192
|
### Registered Tools
|
|
186
|
-
- `esedre_list_tickets`: List tickets with optional project, status,
|
|
187
|
-
- `esedre_get_ticket`: Retrieve full specification, summary, comments, revision, and content hash (`sha1`).
|
|
193
|
+
- `esedre_list_tickets`: List tickets with optional project, status, type, priority, milestone, isBlocked, linkedTo, or search filter.
|
|
194
|
+
- `esedre_get_ticket`: Retrieve full specification, summary, comments, revision, links, blocker status, and content hash (`sha1`).
|
|
188
195
|
- `esedre_get_plan` & `esedre_save_plan`: Inspect and update implementation plans with optimistic concurrency (`lastHash`).
|
|
189
|
-
- `esedre_create_ticket`: Mint new roadmap tickets with project code validation (up to 8 chars)
|
|
190
|
-
- `esedre_update_ticket`: Modify status, title, complexity, or effort with optimistic concurrency (`lastHash`).
|
|
196
|
+
- `esedre_create_ticket`: Mint new roadmap tickets with project code validation (up to 8 chars), optional priority, optional milestone, and specification detail markdown.
|
|
197
|
+
- `esedre_update_ticket`: Modify status, title, type, priority, milestone, complexity, or effort with optimistic concurrency (`lastHash`).
|
|
198
|
+
- `esedre_link_ticket`: Establish a bi-directional link between two tickets (`relates-to`, `blocks`, `parent-of`, `duplicates`).
|
|
199
|
+
- `esedre_unlink_ticket`: Remove a bi-directional relationship between two tickets.
|
|
200
|
+
- `esedre_list_milestones`: List milestones and progress metrics for a project.
|
|
201
|
+
- `esedre_get_milestone`: Retrieve milestone specifications, umbrella feature flag, and member tickets.
|
|
202
|
+
- `esedre_create_milestone`: Create a project milestone with optional umbrella feature flag and target date.
|
|
203
|
+
- `esedre_update_milestone`: Update milestone status, title, description, or umbrella feature flag.
|
|
191
204
|
- `esedre_add_comment`: Append developer or LLM agent verification notes.
|
|
192
205
|
|
|
206
|
+
### Cross-Project Linked Issues & Dependencies
|
|
207
|
+
|
|
208
|
+
Esedre supports bi-directional ticket relationships across tickets within the same project or across different projects:
|
|
209
|
+
|
|
210
|
+
- **Semantic Relations**:
|
|
211
|
+
- `relates-to` <-> `relates-to` (symmetric)
|
|
212
|
+
- `blocks` <-> `blocked-by` (inverse)
|
|
213
|
+
- `parent-of` <-> `child-of` (inverse)
|
|
214
|
+
- `duplicates` <-> `duplicated-by` (inverse)
|
|
215
|
+
- **Automatic Reciprocal Linking**: Creating a link on Ticket A automatically establishes the reciprocal inverse relationship on Ticket B when both are in writable storage scope. Unlinking either removes both sides.
|
|
216
|
+
- **Blocker Tracking & Dependency Awareness**: Tickets with uncompleted `blocked-by` links are computed as `isBlocked: true`. The CLI highlights blocked items with `[BLOCKED]` warning badges, and LLM agents can query ready work via `ese list --blocked` or `isBlocked: false` in MCP.
|
|
217
|
+
- **Cycle Prevention**: Cycle detection on `blocks` and `parent-of` chains rejects circular dependencies that would deadlock workflows.
|
|
218
|
+
- **Agent Allow-List Redaction**: Links to external projects outside the active workspace's `allowedProjects` have target metadata redacted to `[Restricted Project]` to prevent cross-workspace information leakage.
|
|
219
|
+
|
|
220
|
+
### Project Milestones & Umbrella Feature Flags
|
|
221
|
+
|
|
222
|
+
Esedre introduces first-class milestone management to group related tickets toward target deliverables and release cycles:
|
|
223
|
+
|
|
224
|
+
- **Target Deliverables**: Organize tickets under sequential project milestones (e.g. `#1 Lab 151 Platform Foundation`, `#2 Public Release`).
|
|
225
|
+
- **Cross-Project Milestone Deliverables**: Milestones can group member tickets across multiple projects (e.g. platform, web, and tooling repositories) toward a unified delivery target.
|
|
226
|
+
- **Compound Milestone Notation**: In multi-project or portfolio context, milestones are addressed and filtered using compound notation (`ProjectCode:MilestoneTitle` or `ProjectCode:MilestoneId`).
|
|
227
|
+
- **Umbrella Feature Flag Inheritance**: Milestones can optionally link to an umbrella feature flag, which automatically propagates to all tickets in the milestone unless individually overridden.
|
|
228
|
+
- **Embed & Allow-List Isolation**: When viewed from embedded host applications or scoped agent environments, tickets belonging to external projects outside `allowedProjects` render as masked placeholders, preserving project security boundaries.
|
|
229
|
+
- **Visual Progress Tracking**: Real-time progress bars, completion metrics, and assigned ticket chips in the Web UI dashboard.
|
|
230
|
+
- **Full CLI & MCP Parity**: Manage milestones from the terminal via `ese milestone list`, `ese milestone create`, and `ese milestone update`, or let autonomous LLM coding agents inspect deliverables via MCP tools (`esedre_list_milestones`, `esedre_get_milestone`).
|
|
231
|
+
|
|
232
|
+
<p align="center">
|
|
233
|
+
<img src="https://cdn.jsdelivr.net/npm/esedre/docs/assets/esedre-milestones.png" alt="Esedre Milestones & Deliverables Tracking" width="100%" />
|
|
234
|
+
</p>
|
|
235
|
+
|
|
193
236
|
### Resources
|
|
194
237
|
- URI Scheme: `esedre://tickets/{id}` (MIME type: `text/markdown`)
|
|
195
238
|
|