Skip to content

Commit d3392f7

Browse files
authored
Merge pull request #16 from anombyte93/fix/v5.2.2-ux-flow
release: 5.2.2 — front-door UX flow fixes (first command, gate docs, economy config)
2 parents 3e0514a + 8608972 commit d3392f7

14 files changed

Lines changed: 561 additions & 52 deletions

File tree

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "prd",
3-
"version": "5.2.1",
3+
"version": "5.2.2",
44
"description": "Zero-config goal-to-tasks engine for Claude Code (the Atlas engine). Graded PRD validation, dependency-ordered task graph, and CDD-verified execution.",
55
"author": {
66
"name": "Atlas AI",

CHANGELOG.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,35 @@ All notable changes to this project are documented here. Format based on
44
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this project adheres to
55
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [5.2.2] — 2026-06-14
8+
9+
Front-door UX flow fixes (a UX-flow audit found the *journey* still broke before a
10+
new user reached the 5.2.1 backend fixes). See `docs/audit/UX-FLOW-AUDIT.md`. Also
11+
syncs the version source-of-truth (`prd_taskmaster/__init__.py`), which 5.2.1 missed.
12+
13+
### Fixed
14+
- **UX-P0-1 — the README's first command now resolves.** `README` led with `/atlas`,
15+
which a fresh `/plugin install prd` does not provide (plugin commands are namespaced
16+
`/prd:*`). Added a brand-name `atlas` entrypoint skill (→ `/prd:atlas`, a thin alias
17+
that dispatches to the `go` orchestrator) and updated the README first-run to
18+
`/prd:atlas` (or `/prd:go`, or natural language).
19+
- **UX-P0-2 — phase gates no longer document a self-contradicting STOP.** `setup`/
20+
`discover`/`generate`/`handoff` opened with "if the gate fails, stop" immediately
21+
followed by "it WILL fail on first entry, proceed past it (see morning brief)" — a
22+
compliant autonomous agent would halt. Rewritten to explain `check_gate` is an EXIT
23+
gate (evidence to advance, not to enter), so a first-entry `false` is expected; the
24+
gate is enforced on advance. Removed leaked internal references ("morning brief",
25+
"Mum dogfood feedback").
26+
- **UX-P0-3 — `token_economy` set via `/customise-workflow` is now honored.** It writes
27+
`.atlas-ai/config/atlas.json`, but the engine read economy only from
28+
`.atlas-ai/fleet.json`. `load_fleet_config` now reads `token_economy` from `atlas.json`
29+
when `fleet.json` doesn't set one (fleet.json wins if it does); the config schema doc
30+
adds the key.
31+
32+
### Fixed (version hygiene)
33+
- `prd_taskmaster/__init__.py` version bumped (5.2.1 set `package.json`/`plugin.json` but
34+
missed the `__init__.py` source-of-truth the manifest tests check).
35+
736
## [5.2.1] — 2026-06-14
837

938
Pre-relaunch hardening — fixes the first-run failures a multi-agent audit found

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ npm install -g task-master-ai
8383
Open any project in Claude Code and type:
8484

8585
```
86-
/atlas (or /prd:go, or just say: "I want to build …")
86+
/prd:atlas (or /prd:go, or just say: "I want to build …")
8787
```
8888

8989
Requires Python 3.11+ and Linux / macOS / WSL. The free engine needs **no paid API key** — it

docs/audit/UX-FLOW-AUDIT.md

Lines changed: 401 additions & 0 deletions
Large diffs are not rendered by default.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "prd-taskmaster",
3-
"version": "5.2.1",
3+
"version": "5.2.2",
44
"description": "Zero-config goal-to-tasks engine for Claude Code (the Atlas engine)",
55
"author": {
66
"name": "Atlas AI",

prd_taskmaster/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""prd-taskmaster: zero-config goal-to-tasks engine (deterministic CLI core)."""
22

3-
__version__ = "5.2.0"
3+
__version__ = "5.2.2"

prd_taskmaster/fleet.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,40 @@
5151
BACKEND_CHOICES = {"auto", "taskmaster", "native"}
5252

5353

54+
ATLAS_CONFIG_PATH = Path(".atlas-ai") / "config" / "atlas.json"
55+
56+
57+
def _atlas_config_economy() -> str | None:
58+
"""token_economy set via /customise-workflow (.atlas-ai/config/atlas.json).
59+
60+
/customise-workflow is the discoverable customization tool; the economy a user
61+
sets there must take effect even though the lower-level routing file is fleet.json.
62+
"""
63+
if not ATLAS_CONFIG_PATH.is_file():
64+
return None
65+
try:
66+
raw = json.loads(ATLAS_CONFIG_PATH.read_text())
67+
except (json.JSONDecodeError, OSError):
68+
return None
69+
if not isinstance(raw, dict):
70+
return None
71+
val = raw.get("token_economy")
72+
return val if isinstance(val, str) else None
73+
74+
5475
def load_fleet_config(path=None):
5576
"""Load .atlas-ai/fleet.json merged over defaults.
5677
5778
Malformed files and invalid values fall back to defaults silently —
5879
a broken optional config must never block a fleet run.
80+
81+
Economy precedence: fleet.json (explicit) > atlas.json (/customise-workflow) > default.
5982
"""
6083
cfg = {
6184
"max_concurrency": DEFAULT_FLEET_CONFIG["max_concurrency"],
6285
"routing": dict(DEFAULT_ROUTING),
6386
"experimental_backends": DEFAULT_FLEET_CONFIG["experimental_backends"],
64-
"token_economy": DEFAULT_FLEET_CONFIG["token_economy"],
87+
"token_economy": _atlas_config_economy() or DEFAULT_FLEET_CONFIG["token_economy"],
6588
"backend": DEFAULT_FLEET_CONFIG["backend"],
6689
}
6790
p = Path(path) if path else FLEET_CONFIG_PATH

skills/atlas/SKILL.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
name: atlas
3+
description: >-
4+
The Atlas engine — turn any goal into a validated PRD and an executable, verified
5+
task graph. Brand-name entrypoint; a thin alias for the `go` orchestrator. Use when
6+
the user types /prd:atlas, says "I want to build", or asks for a PRD / task-driven build.
7+
user-invocable: true
8+
allowed-tools:
9+
- Skill
10+
---
11+
12+
# atlas (entrypoint alias)
13+
14+
This is the brand-name entrypoint for the Atlas engine. It holds no procedure of its
15+
own — **immediately invoke the `go` orchestrator** via the Skill tool (`/prd:go`).
16+
17+
`go` reads pipeline state and dispatches to the correct phase
18+
(SETUP → DISCOVER → GENERATE → HANDOFF → EXECUTE). Do not duplicate that routing here.

skills/customise-workflow/SKILL.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,11 @@ just that key, re-validate, and re-write.
142142

143143
## Config Schema
144144

145-
`.atlas-ai/config/atlas.json` has 6 top-level keys:
145+
`.atlas-ai/config/atlas.json` has 7 top-level keys:
146146

147147
```json
148148
{
149+
"token_economy": "conservative|balanced|performance",
149150
"provider": {
150151
"main": "gemini-cli|claude-code|anthropic|openai|openrouter|ollama|...",
151152
"model_main": "gemini-3-pro-preview|sonnet|gpt-4o|...",
@@ -184,6 +185,10 @@ Phase files (`skills/setup`, `skills/discover`, `skills/generate`,
184185
`skills/handoff`, `skills/execute-task`) read this config at runtime and apply
185186
user preferences before falling back to documented defaults.
186187

188+
`token_economy` here is honored by the engine itself: `load_fleet_config` reads it
189+
from this file when `.atlas-ai/fleet.json` does not set one (fleet.json wins if it
190+
does), so the economy you pick via this skill actually drives model-tier routing.
191+
187192
## Customizations directory
188193

189194
For tweaks that go beyond the curated questions — custom template overrides,

skills/discover/SKILL.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,17 @@ skill.**
3131

3232
## Entry gate
3333

34-
1. Call `mcp__plugin_prd_go__check_gate(phase="DISCOVER", evidence={})`.
35-
If the call returns `{gate_passed: false, violations: [...]}`, report the
36-
violations and stop. The gate protects against re-entering a completed
37-
phase or skipping ahead from SETUP.
38-
39-
**Known issue (Mum dogfood feedback [4]):** check_gate is structurally
40-
an EXIT gate. On first DISCOVER entry, evidence=`{}` will fail the
41-
`user_approved=true OR auto_classification=CLEAR with assumptions_documented`
42-
requirement (which the User Approval Gate / Self-Approval Gate below
43-
produces). State machine LEGAL_TRANSITIONS already prevents illegal
44-
entry — proceed past this gate on first entry. Semantic fix in flight
45-
(see morning brief).
34+
1. Call `mcp__plugin_prd_go__check_gate(phase="DISCOVER", evidence={})` for diagnostics.
35+
36+
`check_gate` is an EXIT gate: it verifies the evidence to *advance*, not to *enter*.
37+
On first DISCOVER entry you have no evidence yet (the User Approval / Self-Approval
38+
Gate below produces `user_approved=true` OR `auto_classification=CLEAR with
39+
assumptions_documented`), so a `gate_passed: false` here is EXPECTED — the state
40+
machine's legal transitions already guarantee only legal entry.
41+
42+
- **First entry** (no evidence yet): note the result and continue with the Procedure.
43+
- **Re-entry**: if the gate reports violations, report them and stop — it protects
44+
against re-running a completed phase or skipping ahead from SETUP.
4645
2. Detect execution context. If any of the following signals are present,
4746
switch to Autonomous Mode:
4847
- `.claude/ralph-loop.local.md` exists in the project root

0 commit comments

Comments
 (0)