waypoint-codex 0.6.1 → 0.8.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.
Files changed (28) hide show
  1. package/README.md +9 -8
  2. package/dist/src/core.js +71 -7
  3. package/dist/src/track-index.js +107 -0
  4. package/package.json +1 -1
  5. package/templates/.agents/skills/break-it-qa/SKILL.md +1 -4
  6. package/templates/.agents/skills/code-guide-audit/SKILL.md +5 -1
  7. package/templates/.agents/skills/planning/SKILL.md +2 -0
  8. package/templates/.agents/skills/pre-pr-hygiene/SKILL.md +3 -1
  9. package/templates/.agents/skills/work-tracker/SKILL.md +110 -0
  10. package/templates/.agents/skills/workspace-compress/SKILL.md +3 -0
  11. package/templates/.waypoint/agent-operating-manual.md +12 -11
  12. package/templates/.waypoint/agents/code-health-reviewer.md +7 -1
  13. package/templates/.waypoint/agents/code-reviewer.md +5 -1
  14. package/templates/.waypoint/docs/README.md +2 -0
  15. package/templates/.waypoint/scripts/build-track-index.mjs +169 -0
  16. package/templates/.waypoint/scripts/prepare-context.mjs +24 -0
  17. package/templates/.waypoint/track/README.md +38 -0
  18. package/templates/.waypoint/track/_template.md +44 -0
  19. package/templates/WORKSPACE.md +5 -1
  20. package/templates/managed-agents-block.md +3 -2
  21. package/templates/.agents/skills/e2e-verify/SKILL.md +0 -63
  22. package/templates/.agents/skills/e2e-verify/agents/openai.yaml +0 -4
  23. package/templates/.agents/skills/error-audit/SKILL.md +0 -69
  24. package/templates/.agents/skills/error-audit/references/error-patterns.md +0 -37
  25. package/templates/.agents/skills/observability-audit/SKILL.md +0 -67
  26. package/templates/.agents/skills/observability-audit/references/observability-patterns.md +0 -35
  27. package/templates/.agents/skills/ux-states-audit/SKILL.md +0 -63
  28. package/templates/.agents/skills/ux-states-audit/references/ux-patterns.md +0 -34
package/README.md CHANGED
@@ -22,10 +22,12 @@ Waypoint scaffolds a Codex-friendly repo structure built around a few core piece
22
22
 
23
23
  - `AGENTS.md` for the startup contract
24
24
  - `.waypoint/WORKSPACE.md` for live operational state
25
+ - `.waypoint/track/` for active long-running execution trackers
25
26
  - `.waypoint/docs/` for durable project memory
26
27
  - `.waypoint/DOCS_INDEX.md` for docs routing
28
+ - `.waypoint/TRACKS_INDEX.md` for tracker routing
27
29
  - `.waypoint/context/` for generated startup context
28
- - `.agents/skills/` for repo-local workflows like planning, audits, and QA
30
+ - `.agents/skills/` for repo-local workflows like planning, tracking, audits, and QA
29
31
 
30
32
  The philosophy is simple:
31
33
 
@@ -40,7 +42,7 @@ Waypoint is most useful when you want:
40
42
 
41
43
  - multi-session continuity in a real repo
42
44
  - a durable docs and workspace structure for agents
43
- - stronger planning, review, QA, and closeout defaults
45
+ - stronger planning, tracking, review, QA, and closeout defaults
44
46
  - repo-local scaffolding instead of a bunch of global mystery behavior
45
47
 
46
48
  If you only use Codex for tiny one-off edits, Waypoint is probably unnecessary.
@@ -76,9 +78,11 @@ repo/
76
78
  ├── .agents/
77
79
  │ └── skills/
78
80
  └── .waypoint/
79
- ├── WORKSPACE.md
80
81
  ├── DOCS_INDEX.md
82
+ ├── TRACKS_INDEX.md
83
+ ├── WORKSPACE.md
81
84
  ├── docs/
85
+ ├── track/
82
86
  ├── context/
83
87
  ├── scripts/
84
88
  └── ...
@@ -126,16 +130,13 @@ Flags you can combine:
126
130
  Waypoint ships a strong default skill pack for real coding work:
127
131
 
128
132
  - `planning`
129
- - `error-audit`
130
- - `observability-audit`
131
- - `ux-states-audit`
133
+ - `work-tracker`
132
134
  - `docs-sync`
133
135
  - `code-guide-audit`
134
136
  - `break-it-qa`
135
137
  - `workspace-compress`
136
138
  - `pre-pr-hygiene`
137
139
  - `pr-review`
138
- - `e2e-verify`
139
140
 
140
141
  These are repo-local, so the workflow travels with the project.
141
142
 
@@ -147,7 +148,7 @@ If you initialize with `--with-roles`, Waypoint scaffolds:
147
148
  - `code-reviewer`
148
149
  - `plan-reviewer`
149
150
 
150
- The intended workflow is post-commit: make your change, commit it, run the reviewers in parallel, fix real findings, then close out.
151
+ The intended workflow is chunk-based: once there is a meaningful reviewable slice, run the reviewers in parallel, fix real findings, then close out. A recent self-authored commit is the preferred scope anchor when one cleanly represents the slice, but it is not the only valid trigger.
151
152
 
152
153
  ## What makes it different
153
154
 
package/dist/src/core.js CHANGED
@@ -4,14 +4,18 @@ import os from "node:os";
4
4
  import path from "node:path";
5
5
  import * as TOML from "@iarna/toml";
6
6
  import { renderDocsIndex } from "./docs-index.js";
7
+ import { renderTracksIndex } from "./track-index.js";
7
8
  import { readTemplate, renderWaypointConfig, MANAGED_BLOCK_END, MANAGED_BLOCK_START, templatePath } from "./templates.js";
8
9
  const DEFAULT_CONFIG_PATH = ".waypoint/config.toml";
9
10
  const DEFAULT_DOCS_DIR = ".waypoint/docs";
10
11
  const DEFAULT_DOCS_INDEX = ".waypoint/DOCS_INDEX.md";
12
+ const DEFAULT_TRACK_DIR = ".waypoint/track";
13
+ const DEFAULT_TRACKS_INDEX = ".waypoint/TRACKS_INDEX.md";
11
14
  const DEFAULT_WORKSPACE = ".waypoint/WORKSPACE.md";
12
15
  const STATE_DIR = ".waypoint/state";
13
16
  const SYNC_RECORDS_FILE = ".waypoint/state/sync-records.json";
14
17
  const TIMESTAMPED_WORKSPACE_SECTIONS = new Set([
18
+ "## Active Trackers",
15
19
  "## Current State",
16
20
  "## In Progress",
17
21
  "## Next",
@@ -101,6 +105,7 @@ function scaffoldWaypointOptionalTemplates(projectRoot) {
101
105
  copyTemplateTree(templatePath(".waypoint/automations"), path.join(projectRoot, ".waypoint/automations"));
102
106
  copyTemplateTree(templatePath(".waypoint/rules"), path.join(projectRoot, ".waypoint/rules"));
103
107
  copyTemplateTree(templatePath(".waypoint/scripts"), path.join(projectRoot, ".waypoint/scripts"));
108
+ copyTemplateTree(templatePath(".waypoint/track"), path.join(projectRoot, ".waypoint/track"));
104
109
  }
105
110
  function scaffoldOptionalCodex(projectRoot) {
106
111
  copyTemplateTree(templatePath(".codex"), path.join(projectRoot, ".codex"));
@@ -112,6 +117,9 @@ export function initRepository(projectRoot, options) {
112
117
  "docs/README.md",
113
118
  "docs/code-guide.md",
114
119
  "docs/legacy-import",
120
+ ".agents/skills/error-audit",
121
+ ".agents/skills/observability-audit",
122
+ ".agents/skills/ux-states-audit",
115
123
  "WAYPOINT_MIGRATION.md",
116
124
  ".agents/skills/waypoint-planning",
117
125
  ".agents/skills/waypoint-docs",
@@ -145,6 +153,7 @@ export function initRepository(projectRoot, options) {
145
153
  }));
146
154
  writeIfMissing(path.join(projectRoot, DEFAULT_WORKSPACE), readTemplate("WORKSPACE.md"));
147
155
  ensureDir(path.join(projectRoot, DEFAULT_DOCS_DIR));
156
+ ensureDir(path.join(projectRoot, DEFAULT_TRACK_DIR));
148
157
  writeIfMissing(path.join(projectRoot, ".waypoint/docs/README.md"), readTemplate(".waypoint/docs/README.md"));
149
158
  writeIfMissing(path.join(projectRoot, ".waypoint/docs/code-guide.md"), readTemplate(".waypoint/docs/code-guide.md"));
150
159
  upsertManagedBlock(path.join(projectRoot, "AGENTS.md"), readTemplate("managed-agents-block.md"));
@@ -154,13 +163,15 @@ export function initRepository(projectRoot, options) {
154
163
  }
155
164
  appendGitignoreSnippet(projectRoot);
156
165
  const docsIndex = renderDocsIndex(projectRoot, path.join(projectRoot, DEFAULT_DOCS_DIR));
166
+ const tracksIndex = renderTracksIndex(projectRoot, path.join(projectRoot, DEFAULT_TRACK_DIR));
157
167
  writeText(path.join(projectRoot, DEFAULT_DOCS_INDEX), `${docsIndex.content}\n`);
168
+ writeText(path.join(projectRoot, DEFAULT_TRACKS_INDEX), `${tracksIndex.content}\n`);
158
169
  return [
159
170
  "Initialized Waypoint scaffold",
160
171
  "Installed managed AGENTS block",
161
- "Created .waypoint/WORKSPACE.md and .waypoint/docs/ scaffold",
172
+ "Created .waypoint/WORKSPACE.md, .waypoint/docs/, and .waypoint/track/ scaffold",
162
173
  "Installed repo-local Waypoint skills",
163
- "Generated .waypoint/DOCS_INDEX.md",
174
+ "Generated .waypoint/DOCS_INDEX.md and .waypoint/TRACKS_INDEX.md",
164
175
  ];
165
176
  }
166
177
  export function loadWaypointConfig(projectRoot) {
@@ -366,6 +377,7 @@ export function doctorRepository(projectRoot) {
366
377
  const workspaceText = readFileSync(workspacePath, "utf8");
367
378
  for (const section of [
368
379
  "## Active Goal",
380
+ "## Active Trackers",
369
381
  "## Current State",
370
382
  "## In Progress",
371
383
  "## Next",
@@ -398,6 +410,7 @@ export function doctorRepository(projectRoot) {
398
410
  path.join(projectRoot, ".waypoint", "agent-operating-manual.md"),
399
411
  path.join(projectRoot, ".waypoint", "scripts", "prepare-context.mjs"),
400
412
  path.join(projectRoot, ".waypoint", "scripts", "build-docs-index.mjs"),
413
+ path.join(projectRoot, ".waypoint", "scripts", "build-track-index.mjs"),
401
414
  ]) {
402
415
  if (!existsSync(requiredFile)) {
403
416
  findings.push({
@@ -412,6 +425,9 @@ export function doctorRepository(projectRoot) {
412
425
  const docsDir = path.join(projectRoot, config.docs_dir ?? DEFAULT_DOCS_DIR);
413
426
  const docsIndexPath = path.join(projectRoot, config.docs_index_file ?? DEFAULT_DOCS_INDEX);
414
427
  const docsIndex = renderDocsIndex(projectRoot, docsDir);
428
+ const trackDir = path.join(projectRoot, DEFAULT_TRACK_DIR);
429
+ const tracksIndexPath = path.join(projectRoot, DEFAULT_TRACKS_INDEX);
430
+ const tracksIndex = renderTracksIndex(projectRoot, trackDir);
415
431
  if (!existsSync(docsDir)) {
416
432
  findings.push({
417
433
  severity: "error",
@@ -448,18 +464,62 @@ export function doctorRepository(projectRoot) {
448
464
  paths: [docsIndexPath],
449
465
  });
450
466
  }
467
+ if (!existsSync(trackDir)) {
468
+ findings.push({
469
+ severity: "error",
470
+ category: "track",
471
+ message: ".waypoint/track/ directory is missing.",
472
+ remediation: "Run `waypoint init` to scaffold track files.",
473
+ paths: [trackDir],
474
+ });
475
+ }
476
+ for (const relPath of tracksIndex.invalidTracks) {
477
+ findings.push({
478
+ severity: "warn",
479
+ category: "track",
480
+ message: `Tracker is missing valid frontmatter or status: ${relPath}`,
481
+ remediation: "Add `summary`, `last_updated`, `status`, and `read_when` frontmatter using the track template.",
482
+ paths: [path.join(projectRoot, relPath)],
483
+ });
484
+ }
485
+ if (!existsSync(tracksIndexPath)) {
486
+ findings.push({
487
+ severity: "warn",
488
+ category: "track",
489
+ message: ".waypoint/TRACKS_INDEX.md is missing.",
490
+ remediation: "Run `waypoint sync` to generate the tracks index.",
491
+ paths: [tracksIndexPath],
492
+ });
493
+ }
494
+ else if (readFileSync(tracksIndexPath, "utf8").trimEnd() !== tracksIndex.content.trimEnd()) {
495
+ findings.push({
496
+ severity: "warn",
497
+ category: "track",
498
+ message: ".waypoint/TRACKS_INDEX.md is stale.",
499
+ remediation: "Run `waypoint sync` to rebuild the tracks index.",
500
+ paths: [tracksIndexPath],
501
+ });
502
+ }
503
+ if (existsSync(workspacePath) &&
504
+ tracksIndex.activeTrackPaths.length > 0 &&
505
+ !tracksIndex.activeTrackPaths.some((trackPath) => readFileSync(workspacePath, "utf8").includes(trackPath))) {
506
+ findings.push({
507
+ severity: "warn",
508
+ category: "track",
509
+ message: "Workspace does not reference any active tracker file.",
510
+ remediation: "Add the active `.waypoint/track/*.md` file paths under `## Active Trackers` in `.waypoint/WORKSPACE.md`.",
511
+ paths: [workspacePath, ...tracksIndex.activeTrackPaths.map((trackPath) => path.join(projectRoot, trackPath))],
512
+ });
513
+ }
451
514
  for (const skillName of [
452
515
  "planning",
453
- "error-audit",
454
- "observability-audit",
455
- "ux-states-audit",
516
+ "work-tracker",
456
517
  "docs-sync",
457
518
  "code-guide-audit",
458
519
  "break-it-qa",
459
520
  "workspace-compress",
460
521
  "pre-pr-hygiene",
461
522
  "pr-review",
462
- "e2e-verify",
463
523
  ]) {
464
524
  const skillPath = path.join(projectRoot, ".agents/skills", skillName, "SKILL.md");
465
525
  if (!existsSync(skillPath)) {
@@ -529,8 +589,12 @@ export function syncRepository(projectRoot) {
529
589
  const docsDir = path.join(projectRoot, config.docs_dir ?? DEFAULT_DOCS_DIR);
530
590
  const docsIndexPath = path.join(projectRoot, config.docs_index_file ?? DEFAULT_DOCS_INDEX);
531
591
  const docsIndex = renderDocsIndex(projectRoot, docsDir);
592
+ const trackDir = path.join(projectRoot, DEFAULT_TRACK_DIR);
593
+ const tracksIndexPath = path.join(projectRoot, DEFAULT_TRACKS_INDEX);
594
+ const tracksIndex = renderTracksIndex(projectRoot, trackDir);
532
595
  writeText(docsIndexPath, `${docsIndex.content}\n`);
533
- const results = ["Rebuilt .waypoint/DOCS_INDEX.md"];
596
+ writeText(tracksIndexPath, `${tracksIndex.content}\n`);
597
+ const results = ["Rebuilt .waypoint/DOCS_INDEX.md", "Rebuilt .waypoint/TRACKS_INDEX.md"];
534
598
  const featureMap = config.features ?? {};
535
599
  if (featureMap.rules) {
536
600
  results.push(...syncRules(projectRoot));
@@ -0,0 +1,107 @@
1
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
2
+ import path from "node:path";
3
+ const VALID_TRACK_STATUSES = new Set(["active", "blocked", "paused", "done", "archived"]);
4
+ const ACTIVE_TRACK_STATUSES = new Set(["active", "blocked", "paused"]);
5
+ const SKIP_NAMES = new Set(["README.md", "CHANGELOG.md", "LICENSE.md"]);
6
+ function shouldSkipTrackFile(entry) {
7
+ return SKIP_NAMES.has(entry) || entry.startsWith("_");
8
+ }
9
+ function parseFrontmatter(filePath) {
10
+ const text = readFileSync(filePath, "utf8");
11
+ if (!text.startsWith("---\n")) {
12
+ return { summary: "", lastUpdated: "", readWhen: [], status: "" };
13
+ }
14
+ const endIndex = text.indexOf("\n---\n", 4);
15
+ if (endIndex === -1) {
16
+ return { summary: "", lastUpdated: "", readWhen: [], status: "" };
17
+ }
18
+ const frontmatter = text.slice(4, endIndex);
19
+ let summary = "";
20
+ let lastUpdated = "";
21
+ let status = "";
22
+ const readWhen = [];
23
+ let collectingReadWhen = false;
24
+ for (const rawLine of frontmatter.split("\n")) {
25
+ const line = rawLine.trim();
26
+ if (line.startsWith("summary:")) {
27
+ summary = line.slice("summary:".length).trim().replace(/^['"]|['"]$/g, "");
28
+ collectingReadWhen = false;
29
+ continue;
30
+ }
31
+ if (line.startsWith("last_updated:")) {
32
+ lastUpdated = line.slice("last_updated:".length).trim().replace(/^['"]|['"]$/g, "");
33
+ collectingReadWhen = false;
34
+ continue;
35
+ }
36
+ if (line.startsWith("status:")) {
37
+ status = line.slice("status:".length).trim().replace(/^['"]|['"]$/g, "").toLowerCase();
38
+ collectingReadWhen = false;
39
+ continue;
40
+ }
41
+ if (line.startsWith("read_when:")) {
42
+ collectingReadWhen = true;
43
+ continue;
44
+ }
45
+ if (collectingReadWhen && line.startsWith("- ")) {
46
+ readWhen.push(line.slice(2).trim());
47
+ continue;
48
+ }
49
+ if (collectingReadWhen && line.length > 0) {
50
+ collectingReadWhen = false;
51
+ }
52
+ }
53
+ return { summary, lastUpdated, readWhen, status };
54
+ }
55
+ function walkTracks(projectRoot, currentDir, output, invalid) {
56
+ for (const entry of readdirSync(currentDir)) {
57
+ const fullPath = path.join(currentDir, entry);
58
+ const stat = statSync(fullPath);
59
+ if (stat.isDirectory()) {
60
+ walkTracks(projectRoot, fullPath, output, invalid);
61
+ continue;
62
+ }
63
+ if (!entry.endsWith(".md") || shouldSkipTrackFile(entry)) {
64
+ continue;
65
+ }
66
+ const { summary, lastUpdated, readWhen, status } = parseFrontmatter(fullPath);
67
+ const relPath = path.relative(projectRoot, fullPath);
68
+ if (!summary || !lastUpdated || readWhen.length === 0 || !VALID_TRACK_STATUSES.has(status)) {
69
+ invalid.push(relPath);
70
+ continue;
71
+ }
72
+ output.push({ path: relPath, summary, readWhen, status });
73
+ }
74
+ }
75
+ export function renderTracksIndex(projectRoot, trackDir) {
76
+ const entries = [];
77
+ const invalidTracks = [];
78
+ if (existsSync(trackDir)) {
79
+ walkTracks(projectRoot, trackDir, entries, invalidTracks);
80
+ }
81
+ const lines = [
82
+ "# Tracks Index",
83
+ "",
84
+ "Auto-generated by `waypoint sync` / `waypoint doctor`. Read active trackers when resuming long-running work.",
85
+ "",
86
+ "## .waypoint/track/",
87
+ "",
88
+ ];
89
+ if (entries.length === 0) {
90
+ lines.push("No tracker files found.");
91
+ }
92
+ else {
93
+ for (const entry of entries.sort((a, b) => a.path.localeCompare(b.path))) {
94
+ lines.push(`- **${entry.path}** — [${entry.status}] ${entry.summary}`);
95
+ lines.push(` Read when: ${entry.readWhen.join("; ")}`);
96
+ }
97
+ }
98
+ lines.push("");
99
+ return {
100
+ content: `${lines.join("\n")}`,
101
+ invalidTracks,
102
+ activeTrackPaths: entries
103
+ .filter((entry) => ACTIVE_TRACK_STATUSES.has(entry.status))
104
+ .map((entry) => entry.path)
105
+ .sort((a, b) => a.localeCompare(b)),
106
+ };
107
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "waypoint-codex",
3
- "version": "0.6.1",
3
+ "version": "0.8.0",
4
4
  "description": "Codex-native repository operating system: scaffolding, docs routing, repo-local skills, doctor, and sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -7,10 +7,7 @@ description: Verify a user-facing feature by trying to break it on purpose inste
7
7
 
8
8
  Use this skill to attack the feature like an impatient, confused, or careless user.
9
9
 
10
- This is not the same as `e2e-verify`.
11
-
12
- - `e2e-verify` proves the intended flow works end to end.
13
- - `break-it-qa` tries to make the feature fail through invalid, interrupted, stale, repeated, or out-of-order interactions.
10
+ This skill is for adversarial manual QA. It tries to make the feature fail through invalid, interrupted, stale, repeated, or out-of-order interactions instead of only proving the happy path works.
14
11
 
15
12
  ## Step 1: Ask The Three Setup Questions
16
13
 
@@ -11,7 +11,9 @@ This skill owns one job: inspect the specific code the user points at, map it ag
11
11
 
12
12
  ## Step 1: Load The Right Scope
13
13
 
14
- - Read `.waypoint/docs/code-guide.md`.
14
+ - Read the repo's routed code guide.
15
+ - In standard Waypoint repos, use `.waypoint/docs/code-guide.md`.
16
+ - If the repo routes the code guide somewhere else, follow the repo's own docs and routing instead of assuming another fixed path.
15
17
  - Read only the files, routes, tests, contracts, and nearby docs needed to understand the specific feature or slice under review.
16
18
  - If the scope is ambiguous, resolve it to a concrete file set, feature path, or commit-sized change surface before auditing.
17
19
 
@@ -45,6 +47,8 @@ Skip rules that genuinely do not apply, but say that you skipped them.
45
47
 
46
48
  This skill is narrower than `pre-pr-hygiene`. Use that other skill for broader ship-readiness.
47
49
 
50
+ If this audit produces a large remediation campaign, create or update a tracker under `.waypoint/track/` before switching into implementation so the fix list does not live only in chat.
51
+
48
52
  ## Step 4: Verify Evidence
49
53
 
50
54
  Ground each finding in the actual code.
@@ -36,6 +36,8 @@ The plan belongs in the repo, not only in chat.
36
36
  - Make sure the doc remains discoverable through the routed docs layer.
37
37
  - In chat, return only a concise summary plus the path to the plan doc.
38
38
 
39
+ If the planned implementation will be large, multi-step, or likely to span multiple sessions, also create or update a tracker under `.waypoint/track/` and link it from `WORKSPACE.md` before implementation begins.
40
+
39
41
  ## The Core Loop
40
42
 
41
43
  ```
@@ -16,7 +16,9 @@ Before the hygiene pass:
16
16
  3. Read `.waypoint/WORKSPACE.md`
17
17
  4. Read `.waypoint/context/MANIFEST.md`
18
18
  5. Read every file listed in that manifest
19
- 6. Read `.waypoint/docs/code-guide.md` and the routed docs relevant to the area being shipped
19
+ 6. Read the repo's routed code guide and the routed docs relevant to the area being shipped
20
+
21
+ In standard Waypoint repos, the code guide lives at `.waypoint/docs/code-guide.md`. If the repo routes it somewhere else, follow the repo's own docs and routing instead of assuming another fixed path.
20
22
 
21
23
  ## Step 1: Audit The Whole Change Surface
22
24
 
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: work-tracker
3
+ description: Create or maintain a durable tracker under `.waypoint/track/` for large multi-step work. Use when implementation will span multiple sessions, when an audit or review produces many fix items, when verification has a long checklist, or whenever `WORKSPACE.md` would become too detailed if it tried to hold the whole execution log.
4
+ ---
5
+
6
+ # Work Tracker
7
+
8
+ Use this skill when the work is too large, too long-running, or too itemized to live safely in `WORKSPACE.md`.
9
+
10
+ This skill owns the execution tracker layer:
11
+
12
+ - create or update `.waypoint/track/<slug>.md`
13
+ - keep `WORKSPACE.md` pointing at the active tracker
14
+ - move detailed checklists and progress into the tracker instead of bloating the workspace
15
+
16
+ ## Read First
17
+
18
+ Before tracking:
19
+
20
+ 1. Read `.waypoint/SOUL.md`
21
+ 2. Read `.waypoint/agent-operating-manual.md`
22
+ 3. Read `.waypoint/WORKSPACE.md`
23
+ 4. Read `.waypoint/context/MANIFEST.md`
24
+ 5. Read every file listed in that manifest
25
+ 6. Read `.waypoint/track/README.md`
26
+
27
+ ## When A Tracker Is Required
28
+
29
+ Create or update a tracker when any of these are true:
30
+
31
+ - the work will likely span multiple sessions
32
+ - there are many actionable items to implement
33
+ - an audit, QA pass, or review produced a remediation campaign
34
+ - verification requires a substantial checklist
35
+ - `WORKSPACE.md` would become noisy if it carried all the detail
36
+
37
+ Small, single-shot work does not need a tracker.
38
+
39
+ ## Step 1: Choose The Tracker File
40
+
41
+ - Use `.waypoint/track/<kebab-case-slug>.md`.
42
+ - If a relevant tracker already exists, update it instead of creating a competing one.
43
+ - Keep one tracker per coherent workstream, not one tracker per tiny edit.
44
+
45
+ ## Step 2: Set The Frontmatter
46
+
47
+ Trackers need:
48
+
49
+ ```yaml
50
+ ---
51
+ summary: One-line description
52
+ last_updated: "2026-03-13 11:38 PDT"
53
+ status: active
54
+ read_when:
55
+ - resuming this workstream
56
+ ---
57
+ ```
58
+
59
+ Valid statuses:
60
+
61
+ - `active`
62
+ - `blocked`
63
+ - `paused`
64
+ - `done`
65
+ - `archived`
66
+
67
+ Use `active` unless there is a clear reason not to.
68
+
69
+ ## Step 3: Structure The Tracker
70
+
71
+ A good tracker usually includes:
72
+
73
+ - `Goal`
74
+ - `Source`
75
+ - `Current State`
76
+ - `Next`
77
+ - `Workstreams`
78
+ - `Verification`
79
+ - `Decisions`
80
+ - `Notes`
81
+
82
+ Use checklists when there are many concrete items. Use timestamped bullets for materially revised state.
83
+
84
+ ## Step 4: Link It From The Workspace
85
+
86
+ Add or update a bullet under `## Active Trackers` in `.waypoint/WORKSPACE.md` that points at the tracker path and states the current phase or next step.
87
+
88
+ `WORKSPACE.md` should answer "what matters right now?"
89
+ The tracker should answer "what exactly is happening across the whole workstream?"
90
+
91
+ ## Step 5: Maintain It During Execution
92
+
93
+ - Update `last_updated` whenever you materially change the tracker.
94
+ - Mark completed items done instead of deleting the record.
95
+ - Add blockers, new tasks, and verification status as the work evolves.
96
+ - When the workstream finishes, set `status: done` or `status: archived`.
97
+
98
+ Do not let the tracker become fiction. It must match reality.
99
+
100
+ ## Step 6: Distill Durable Knowledge
101
+
102
+ If the tracker reveals durable architecture, rollout, or debugging knowledge, move that durable knowledge into `.waypoint/docs/` and leave the tracker focused on execution state.
103
+
104
+ ## Report
105
+
106
+ When you create or update a tracker, report:
107
+
108
+ - the tracker path
109
+ - the current status
110
+ - what `WORKSPACE.md` now points to
@@ -39,6 +39,7 @@ Ask one question:
39
39
 
40
40
  Keep only the answer to that question in the workspace. Usually that means:
41
41
 
42
+ - active tracker pointers
42
43
  - current focus
43
44
  - latest verified state
44
45
  - open blockers or risks
@@ -52,6 +53,7 @@ Usually remove or collapse:
52
53
  - validation transcripts
53
54
  - old milestone history
54
55
  - duplicated durable documentation
56
+ - per-item implementation checklists that belong in `.waypoint/track/`
55
57
 
56
58
  Compression is documentation quality, not data loss.
57
59
 
@@ -66,6 +68,7 @@ When editing the workspace:
66
68
  5. Do not turn the workspace into an archive, changelog, or debug notebook.
67
69
 
68
70
  If durable context is missing from `.waypoint/docs/`, add or refresh the smallest coherent routed doc before removing it from the workspace.
71
+ If execution detail is still active but too large for the workspace, move it into `.waypoint/track/` instead of deleting it.
69
72
 
70
73
  ## Step 4: Protect User-Owned State
71
74
 
@@ -33,8 +33,9 @@ Do not skip this sequence.
33
33
  The repository should contain the context the next agent needs.
34
34
 
35
35
  - `.waypoint/WORKSPACE.md` is the live operational record: in progress, current state, next steps
36
+ - `.waypoint/track/` is the durable execution-tracking layer for active long-running work
36
37
  - `.waypoint/docs/` is the durable project memory: architecture, decisions, integration notes, debugging knowledge, and durable plans
37
- - `.waypoint/context/` is the generated session context bundle: current git/PR/doc index state
38
+ - `.waypoint/context/` is the generated session context bundle: current git/PR/doc/track index state
38
39
 
39
40
  If something important lives only in your head or in the chat transcript, the repo is under-documented.
40
41
 
@@ -43,8 +44,10 @@ If something important lives only in your head or in the chat transcript, the re
43
44
  - Read code before editing it.
44
45
  - Follow the repo's documented patterns when they are healthy.
45
46
  - Update `.waypoint/WORKSPACE.md` as live execution state when progress meaningfully changes. In multi-topic sections, prefix new or materially revised bullets with a local timestamp like `[2026-03-06 20:10 PST]`.
47
+ - For large multi-step work, create or update a tracker in `.waypoint/track/`, keep detailed execution state there, and point at it from `## Active Trackers` in `.waypoint/WORKSPACE.md`.
46
48
  - Update `.waypoint/docs/` when durable knowledge changes, and refresh each changed routable doc's `last_updated` field.
47
49
  - Rebuild `.waypoint/DOCS_INDEX.md` whenever routable docs change.
50
+ - Rebuild `.waypoint/TRACKS_INDEX.md` whenever tracker files change.
48
51
  - Use the repo-local skills and optional reviewer agents instead of improvising from scratch.
49
52
  - Do not kill long-running subagents or reviewer agents just because they are slow. Wait unless they are clearly stuck, failed, or the user redirects the work.
50
53
 
@@ -64,16 +67,13 @@ Do not document every trivial implementation detail. Document the non-obvious, d
64
67
  ## When to use Waypoint skills
65
68
 
66
69
  - `planning` for non-trivial changes
67
- - `error-audit` when failures are being swallowed or degraded invisibly
68
- - `observability-audit` when production debugging signals look weak
69
- - `ux-states-audit` when async/data-driven UI likely lacks loading, empty, or error states
70
+ - `work-tracker` when large multi-step work needs durable progress tracking in `.waypoint/track/`
70
71
  - `docs-sync` when routed docs may be stale, missing, or inconsistent with the codebase
71
72
  - `code-guide-audit` when a specific feature or file set needs a targeted coding-guide compliance check
72
73
  - `break-it-qa` when a browser-facing feature should be attacked with invalid inputs, refreshes, repeated clicks, wrong action order, or other adversarial manual QA
73
74
  - `workspace-compress` after meaningful chunks, before stopping, and before review when the live handoff needs compression
74
75
  - `pre-pr-hygiene` before pushing or opening/updating a PR for substantial work
75
76
  - `pr-review` once a PR has active review comments or automated review in progress
76
- - `e2e-verify` for major user-facing or cross-system changes that need manual end-to-end verification
77
77
 
78
78
  ## When to use the optional reviewer agents
79
79
 
@@ -83,14 +83,15 @@ If the repo was initialized with Waypoint roles enabled, use them as focused sec
83
83
  - `code-health-reviewer` for maintainability drift
84
84
  - `plan-reviewer` to challenge weak implementation plans before execution
85
85
 
86
- ## Post-Commit Review Loop
86
+ ## Review Loop
87
87
 
88
- If Waypoint's optional roles are enabled and you authored a commit, immediately after that commit:
88
+ If Waypoint's optional roles are enabled, run the reviewer pair after a meaningful reviewable implementation chunk, not just as a reflex after every tiny commit.
89
89
 
90
- 1. Launch `code-reviewer` and `code-health-reviewer` in parallel as background, read-only reviewers.
91
- 2. Scope them to the commit you just made, then widen only when surrounding files are needed to validate a finding.
92
- 3. Do not call the work finished before you read both reviewer results.
93
- 4. Fix real findings, rerun the relevant verification, update workspace/docs if needed, and make a follow-up commit when fixes change the repo.
90
+ 1. Launch `code-reviewer` and `code-health-reviewer` in parallel as background, read-only reviewers once there is a coherent slice of work worth reviewing.
91
+ 2. If you have a recent self-authored commit that cleanly represents that slice, use it as the default review scope anchor. Otherwise scope the reviewers to the current changed slice.
92
+ 3. Widen only when surrounding files are needed to validate a finding.
93
+ 4. Do not call the work finished before you read both reviewer results.
94
+ 5. Fix real findings, rerun the relevant verification, update workspace/docs if needed, and make a follow-up commit when fixes change the repo.
94
95
 
95
96
  ## Quality bar
96
97
 
@@ -59,7 +59,13 @@ Do not create findings for:
59
59
 
60
60
  ## Scope
61
61
 
62
- In Waypoint's default post-commit review loop, start with the latest self-authored commit, then widen only when related files are needed to validate a maintainability issue. Focus on:
62
+ In Waypoint's default review loop, start with the reviewable slice the main agent hands you.
63
+
64
+ - If there is a recent self-authored commit that cleanly represents the slice, use that commit as the default scope anchor.
65
+ - Otherwise, start from the current changed files or diff under review.
66
+ - Widen only when related files are needed to validate a maintainability issue.
67
+
68
+ Focus on:
63
69
 
64
70
  - recently changed files
65
71
  - their importers
@@ -41,7 +41,11 @@ Not:
41
41
 
42
42
  ### 1. Get the Changes
43
43
 
44
- In Waypoint's default post-commit review loop, start with the latest self-authored commit. Review the actual diff or recent changed files first, then widen only as needed.
44
+ In Waypoint's default review loop, start with the reviewable slice the main agent hands you.
45
+
46
+ - If there is a recent self-authored commit that cleanly represents the slice, use that commit as the default scope anchor.
47
+ - Otherwise, start from the current changed files or diff the main agent is asking you to review.
48
+ - Widen only as needed.
45
49
 
46
50
  ### 2. Deep Research
47
51
 
@@ -13,6 +13,8 @@ Put the durable context here that the next agent will need to continue the work:
13
13
 
14
14
  These are **project docs**, not Waypoint internals.
15
15
 
16
+ Do not use `.waypoint/docs/` as the execution tracker layer for active long-running work. That belongs under `.waypoint/track/`.
17
+
16
18
  Every routable doc needs YAML frontmatter:
17
19
 
18
20
  ```yaml