@jakkrichm/create-nexus-devflow 2.17.1 → 2.17.3
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/dist/bin/create-nexus-devflow.d.ts +1 -1
- package/dist/bin/create-nexus-devflow.js +3 -74
- package/dist/bin/create-nexus-devflow.js.map +1 -1
- package/dist/lib/doctor.js +1 -2
- package/dist/lib/doctor.js.map +1 -1
- package/dist/lib/project-config.js +1 -2
- package/dist/lib/project-config.js.map +1 -1
- package/dist/lib/tooling/commands/summarize-run-status.js +1 -3
- package/dist/lib/tooling/commands/summarize-run-status.js.map +1 -1
- package/dist/lib/tooling/registry.js +0 -2
- package/dist/lib/tooling/registry.js.map +1 -1
- package/dist/lib/update.d.ts +3 -13
- package/dist/lib/update.js +1 -66
- package/dist/lib/update.js.map +1 -1
- package/dist/scripts/prepare-template.js +15 -75
- package/dist/scripts/prepare-template.js.map +1 -1
- package/package.json +1 -1
- package/template/AGENTS.md +9 -10
- package/template/devflow/build-plan.md +45 -0
- package/template/devflow/config.json +0 -1
- package/template/devflow/project-plan.md +52 -0
- package/template/devflow/runs/.gitkeep +1 -0
- package/dist/lib/tooling/commands/migrate-structure.d.ts +0 -8
- package/dist/lib/tooling/commands/migrate-structure.js +0 -200
- package/dist/lib/tooling/commands/migrate-structure.js.map +0 -1
- package/dist/lib/workspace-paths.d.ts +0 -16
- package/dist/lib/workspace-paths.js +0 -85
- package/dist/lib/workspace-paths.js.map +0 -1
- package/template/devflow/30-planning/build-plan.md +0 -302
- package/template/devflow/30-planning/project-plan.md +0 -79
- package/template/devflow/40-tasks/.gitkeep +0 -0
- package/template/devflow/40-tasks/README.md +0 -11
- package/template/devflow/60-docs/migration-guide-decade-numbered.md +0 -93
- /package/template/devflow/{00-context → context}/ai-interaction.md +0 -0
- /package/template/devflow/{00-context → context}/coding-standards.md +0 -0
- /package/template/devflow/{00-context → context}/glossary.md +0 -0
- /package/template/devflow/{00-context → context}/project-overview.md +0 -0
- /package/template/devflow/{20-discovery/decisions → decisions}/.gitkeep +0 -0
- /package/template/devflow/{20-discovery/decisions → decisions}/README.md +0 -0
- /package/template/devflow/{20-discovery/discoveries → discoveries}/.gitkeep +0 -0
- /package/template/devflow/{60-docs → docs}/USAGE.md +0 -0
- /package/template/devflow/{60-docs → docs}/diagrams/nexus-devflow-architecture.html +0 -0
- /package/template/devflow/{60-docs → docs}/diagrams/nexus-devflow-architecture.json +0 -0
- /package/template/devflow/{60-docs → docs}/diagrams/nexus-devflow-lifecycle.html +0 -0
- /package/template/devflow/{60-docs → docs}/diagrams/nexus-devflow-lifecycle.json +0 -0
- /package/template/devflow/{60-docs → docs}/examples/living-spec/adr.example.md +0 -0
- /package/template/devflow/{60-docs → docs}/examples/living-spec/current-feature.example.md +0 -0
- /package/template/devflow/{60-docs → docs}/examples/living-spec/discovery.example.md +0 -0
- /package/template/devflow/{60-docs → docs}/examples/living-spec/ideas.example.md +0 -0
- /package/template/devflow/{60-docs → docs}/governance-rules.md +0 -0
- /package/template/devflow/{60-docs → docs}/manual-review-workflow-spec.md +0 -0
- /package/template/devflow/{60-docs → docs}/markdown-metadata-contract.md +0 -0
- /package/template/devflow/{60-docs → docs}/quickstart.md +0 -0
- /package/template/devflow/{60-docs → docs}/release-process.md +0 -0
- /package/template/devflow/{60-docs → docs}/skill-selection-policy.md +0 -0
- /package/template/devflow/{60-docs → docs}/workflow-surface-map.md +0 -0
- /package/template/devflow/{50-history → history}/HISTORY.md +0 -0
- /package/template/devflow/{50-history → history}/features/README.md +0 -0
- /package/template/devflow/{50-history → history}/fixes/README.md +0 -0
- /package/template/devflow/{50-history → history}/rollbacks/README.md +0 -0
- /package/template/devflow/{10-ideation/ideas.md → ideas.md} +0 -0
- /package/template/devflow/{10-ideation/reference → reference}/build-plan-template.md +0 -0
- /package/template/devflow/{10-ideation/reference → reference}/feature-spec-template.md +0 -0
- /package/template/devflow/{10-ideation/reference → reference}/mockup.html +0 -0
- /package/template/devflow/{10-ideation/reference → reference}/project-overview-template.md +0 -0
- /package/template/devflow/{10-ideation/reference → reference}/project-plan-template.md +0 -0
- /package/template/devflow/{10-ideation/reference → reference}/running-id-contract.md +0 -0
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
async function pathExists(p) {
|
|
4
|
-
try {
|
|
5
|
-
await fs.stat(p);
|
|
6
|
-
return true;
|
|
7
|
-
}
|
|
8
|
-
catch {
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
async function movePath(src, dest, moved, warnings) {
|
|
13
|
-
if (!(await pathExists(src)))
|
|
14
|
-
return;
|
|
15
|
-
if (path.resolve(src) === path.resolve(dest))
|
|
16
|
-
return;
|
|
17
|
-
await fs.mkdir(path.dirname(dest), { recursive: true });
|
|
18
|
-
try {
|
|
19
|
-
await fs.rename(src, dest);
|
|
20
|
-
moved.push(`${src} -> ${dest}`);
|
|
21
|
-
}
|
|
22
|
-
catch (err) {
|
|
23
|
-
try {
|
|
24
|
-
const stat = await fs.stat(src);
|
|
25
|
-
if (stat.isDirectory()) {
|
|
26
|
-
await fs.cp(src, dest, { recursive: true });
|
|
27
|
-
await fs.rm(src, { recursive: true, force: true });
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
await fs.copyFile(src, dest);
|
|
31
|
-
await fs.unlink(src);
|
|
32
|
-
}
|
|
33
|
-
moved.push(`${src} -> ${dest}`);
|
|
34
|
-
}
|
|
35
|
-
catch (fallbackErr) {
|
|
36
|
-
warnings.push(`Failed to move ${src} -> ${dest}: ${fallbackErr.message}`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export async function migrateDevflowStructure(projectRoot) {
|
|
41
|
-
const moved = [];
|
|
42
|
-
const warnings = [];
|
|
43
|
-
const devflowDir = path.join(projectRoot, "devflow");
|
|
44
|
-
if (!(await pathExists(devflowDir))) {
|
|
45
|
-
return {
|
|
46
|
-
success: false,
|
|
47
|
-
moved: [],
|
|
48
|
-
warnings: ["Directory devflow does not exist"]
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
// Ensure target decade directories exist
|
|
52
|
-
const targetDirs = [
|
|
53
|
-
"00-context",
|
|
54
|
-
"10-ideation",
|
|
55
|
-
"20-discovery",
|
|
56
|
-
"30-planning",
|
|
57
|
-
"40-tasks",
|
|
58
|
-
"50-history",
|
|
59
|
-
"60-docs"
|
|
60
|
-
];
|
|
61
|
-
for (const d of targetDirs) {
|
|
62
|
-
await fs.mkdir(path.join(devflowDir, d), { recursive: true });
|
|
63
|
-
}
|
|
64
|
-
// 1. Handle devflow/context/
|
|
65
|
-
const oldContextDir = path.join(devflowDir, "context");
|
|
66
|
-
if (await pathExists(oldContextDir)) {
|
|
67
|
-
const entries = await fs.readdir(oldContextDir, { withFileTypes: true });
|
|
68
|
-
for (const entry of entries) {
|
|
69
|
-
const src = path.join(oldContextDir, entry.name);
|
|
70
|
-
if (entry.isDirectory()) {
|
|
71
|
-
// Active task folder -> devflow/40-tasks/{task-slug}
|
|
72
|
-
const dest = path.join(devflowDir, "40-tasks", entry.name);
|
|
73
|
-
await movePath(src, dest, moved, warnings);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
// Context file -> devflow/00-context/{file}
|
|
77
|
-
const dest = path.join(devflowDir, "00-context", entry.name);
|
|
78
|
-
await movePath(src, dest, moved, warnings);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// Remove empty old context dir
|
|
82
|
-
try {
|
|
83
|
-
await fs.rm(oldContextDir, { recursive: true, force: true });
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
// ignore
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// 2. Handle 10-ideation (ideas.md, inbox/, reference/)
|
|
90
|
-
await movePath(path.join(devflowDir, "ideas.md"), path.join(devflowDir, "10-ideation", "ideas.md"), moved, warnings);
|
|
91
|
-
await movePath(path.join(devflowDir, "inbox"), path.join(devflowDir, "10-ideation", "inbox"), moved, warnings);
|
|
92
|
-
await movePath(path.join(devflowDir, "reference"), path.join(devflowDir, "10-ideation", "reference"), moved, warnings);
|
|
93
|
-
// 3. Handle 20-discovery (analysis/, discoveries/, decisions/, research/)
|
|
94
|
-
await movePath(path.join(devflowDir, "analysis"), path.join(devflowDir, "20-discovery", "analysis"), moved, warnings);
|
|
95
|
-
await movePath(path.join(devflowDir, "discoveries"), path.join(devflowDir, "20-discovery", "discoveries"), moved, warnings);
|
|
96
|
-
await movePath(path.join(devflowDir, "decisions"), path.join(devflowDir, "20-discovery", "decisions"), moved, warnings);
|
|
97
|
-
await movePath(path.join(devflowDir, "research"), path.join(devflowDir, "20-discovery", "research"), moved, warnings);
|
|
98
|
-
// 4. Handle 30-planning (project-plan.md, build-plan.md)
|
|
99
|
-
await movePath(path.join(devflowDir, "project-plan.md"), path.join(devflowDir, "30-planning", "project-plan.md"), moved, warnings);
|
|
100
|
-
await movePath(path.join(devflowDir, "build-plan.md"), path.join(devflowDir, "30-planning", "build-plan.md"), moved, warnings);
|
|
101
|
-
// 5. Handle 50-history (history/)
|
|
102
|
-
const oldHistoryDir = path.join(devflowDir, "history");
|
|
103
|
-
if (await pathExists(oldHistoryDir)) {
|
|
104
|
-
const historyEntries = await fs.readdir(oldHistoryDir, { withFileTypes: true });
|
|
105
|
-
for (const entry of historyEntries) {
|
|
106
|
-
const src = path.join(oldHistoryDir, entry.name);
|
|
107
|
-
const dest = path.join(devflowDir, "50-history", entry.name);
|
|
108
|
-
await movePath(src, dest, moved, warnings);
|
|
109
|
-
}
|
|
110
|
-
try {
|
|
111
|
-
await fs.rm(oldHistoryDir, { recursive: true, force: true });
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
// ignore
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
// 6. Handle 60-docs (docs/)
|
|
118
|
-
const oldDocsDir = path.join(devflowDir, "docs");
|
|
119
|
-
if (await pathExists(oldDocsDir)) {
|
|
120
|
-
const docsEntries = await fs.readdir(oldDocsDir, { withFileTypes: true });
|
|
121
|
-
for (const entry of docsEntries) {
|
|
122
|
-
const src = path.join(oldDocsDir, entry.name);
|
|
123
|
-
const dest = path.join(devflowDir, "60-docs", entry.name);
|
|
124
|
-
await movePath(src, dest, moved, warnings);
|
|
125
|
-
}
|
|
126
|
-
try {
|
|
127
|
-
await fs.rm(oldDocsDir, { recursive: true, force: true });
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
// ignore
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// 7. Clean up legacy runs folder
|
|
134
|
-
const oldRunsDir = path.join(devflowDir, "runs");
|
|
135
|
-
if (await pathExists(oldRunsDir)) {
|
|
136
|
-
try {
|
|
137
|
-
await fs.rm(oldRunsDir, { recursive: true, force: true });
|
|
138
|
-
moved.push(`${oldRunsDir} (removed legacy runs folder)`);
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
// ignore
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// 8. Update manifest if present
|
|
145
|
-
const manifestPath = path.join(projectRoot, ".nexus", "nexus-devflow.json");
|
|
146
|
-
if (await pathExists(manifestPath)) {
|
|
147
|
-
try {
|
|
148
|
-
const manifestContent = await fs.readFile(manifestPath, "utf8");
|
|
149
|
-
const manifest = JSON.parse(manifestContent);
|
|
150
|
-
const isAlreadyDecade = manifest.workspace?.contextDir === "devflow/00-context";
|
|
151
|
-
if (!isAlreadyDecade) {
|
|
152
|
-
manifest.workspace = {
|
|
153
|
-
...manifest.workspace,
|
|
154
|
-
contextDir: "devflow/00-context",
|
|
155
|
-
ideationDir: "devflow/10-ideation",
|
|
156
|
-
discoveryDir: "devflow/20-discovery",
|
|
157
|
-
planningDir: "devflow/30-planning",
|
|
158
|
-
tasksDir: "devflow/40-tasks",
|
|
159
|
-
historyDir: "devflow/50-history",
|
|
160
|
-
docsDir: "devflow/60-docs",
|
|
161
|
-
referenceDir: "devflow/10-ideation/reference",
|
|
162
|
-
discoveriesDir: "devflow/20-discovery/discoveries",
|
|
163
|
-
decisionsDir: "devflow/20-discovery/decisions"
|
|
164
|
-
};
|
|
165
|
-
delete manifest.workspace.runsDir;
|
|
166
|
-
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2), "utf8");
|
|
167
|
-
moved.push(`${manifestPath} (updated workspace paths)`);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
warnings.push(`Could not update manifest: ${err.message}`);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return {
|
|
175
|
-
success: true,
|
|
176
|
-
moved,
|
|
177
|
-
warnings
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
export const migrateStructureCommand = {
|
|
181
|
-
name: "migrate-structure",
|
|
182
|
-
description: "Migrate legacy devflow folder structure to Decade-Numbered layout (00-context, 10-ideation, etc.)",
|
|
183
|
-
async run(args, options) {
|
|
184
|
-
const projectRoot = options?.projectRoot || options?.cwd || process.cwd();
|
|
185
|
-
const result = await migrateDevflowStructure(projectRoot);
|
|
186
|
-
if (!result.success) {
|
|
187
|
-
return {
|
|
188
|
-
ok: false,
|
|
189
|
-
message: result.warnings.join("\n") || "Migration failed",
|
|
190
|
-
data: result
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
return {
|
|
194
|
-
ok: true,
|
|
195
|
-
message: `Successfully migrated devflow structure (${result.moved.length} items processed)`,
|
|
196
|
-
data: result
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
};
|
|
200
|
-
//# sourceMappingURL=migrate-structure.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-structure.js","sourceRoot":"","sources":["../../../../lib/tooling/commands/migrate-structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export interface WorkspacePaths {
|
|
2
|
-
contextDir: string;
|
|
3
|
-
ideationDir: string;
|
|
4
|
-
discoveryDir: string;
|
|
5
|
-
planningDir: string;
|
|
6
|
-
tasksDir: string;
|
|
7
|
-
historyDir: string;
|
|
8
|
-
docsDir: string;
|
|
9
|
-
referenceDir: string;
|
|
10
|
-
isDecadeNumbered: boolean;
|
|
11
|
-
}
|
|
12
|
-
export declare const LEGACY_WORKSPACE_PATHS: WorkspacePaths;
|
|
13
|
-
export declare const DECADE_NUMBERED_WORKSPACE_PATHS: WorkspacePaths;
|
|
14
|
-
export declare function isDecadeNumberedLayout(projectRoot: string): Promise<boolean>;
|
|
15
|
-
export declare function hasLegacyDevflowStructure(projectRoot: string): Promise<boolean>;
|
|
16
|
-
export declare function resolveWorkspacePaths(projectRoot: string): Promise<WorkspacePaths>;
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
export const LEGACY_WORKSPACE_PATHS = {
|
|
4
|
-
contextDir: "devflow/context",
|
|
5
|
-
ideationDir: "devflow",
|
|
6
|
-
discoveryDir: "devflow/discoveries",
|
|
7
|
-
planningDir: "devflow",
|
|
8
|
-
tasksDir: "devflow/context",
|
|
9
|
-
historyDir: "devflow/history",
|
|
10
|
-
docsDir: "devflow/docs",
|
|
11
|
-
referenceDir: "devflow/reference",
|
|
12
|
-
isDecadeNumbered: false
|
|
13
|
-
};
|
|
14
|
-
export const DECADE_NUMBERED_WORKSPACE_PATHS = {
|
|
15
|
-
contextDir: "devflow/00-context",
|
|
16
|
-
ideationDir: "devflow/10-ideation",
|
|
17
|
-
discoveryDir: "devflow/20-discovery",
|
|
18
|
-
planningDir: "devflow/30-planning",
|
|
19
|
-
tasksDir: "devflow/40-tasks",
|
|
20
|
-
historyDir: "devflow/50-history",
|
|
21
|
-
docsDir: "devflow/60-docs",
|
|
22
|
-
referenceDir: "devflow/10-ideation/reference",
|
|
23
|
-
isDecadeNumbered: true
|
|
24
|
-
};
|
|
25
|
-
export async function isDecadeNumberedLayout(projectRoot) {
|
|
26
|
-
try {
|
|
27
|
-
const stat = await fs.stat(path.join(projectRoot, "devflow", "00-context"));
|
|
28
|
-
return stat.isDirectory();
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export async function hasLegacyDevflowStructure(projectRoot) {
|
|
35
|
-
const devflowDir = path.join(projectRoot, "devflow");
|
|
36
|
-
const legacyPaths = [
|
|
37
|
-
path.join(devflowDir, "context"),
|
|
38
|
-
path.join(devflowDir, "discoveries"),
|
|
39
|
-
path.join(devflowDir, "history"),
|
|
40
|
-
path.join(devflowDir, "docs"),
|
|
41
|
-
path.join(devflowDir, "reference"),
|
|
42
|
-
path.join(devflowDir, "runs"),
|
|
43
|
-
path.join(devflowDir, "ideas.md"),
|
|
44
|
-
path.join(devflowDir, "project-plan.md"),
|
|
45
|
-
path.join(devflowDir, "build-plan.md")
|
|
46
|
-
];
|
|
47
|
-
for (const p of legacyPaths) {
|
|
48
|
-
try {
|
|
49
|
-
await fs.stat(p);
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
// continue
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
export async function resolveWorkspacePaths(projectRoot) {
|
|
59
|
-
// 1. Check manifest for custom workspace configuration
|
|
60
|
-
try {
|
|
61
|
-
const manifestPath = path.join(projectRoot, ".nexus", "nexus-devflow.json");
|
|
62
|
-
const content = await fs.readFile(manifestPath, "utf8");
|
|
63
|
-
const manifest = JSON.parse(content.replace(/^\uFEFF/, ""));
|
|
64
|
-
if (manifest && typeof manifest === "object" && manifest.workspace) {
|
|
65
|
-
const isDecade = Boolean(manifest.workspace.contextDir?.includes("00-context") ||
|
|
66
|
-
(await isDecadeNumberedLayout(projectRoot)));
|
|
67
|
-
const base = isDecade ? DECADE_NUMBERED_WORKSPACE_PATHS : LEGACY_WORKSPACE_PATHS;
|
|
68
|
-
return {
|
|
69
|
-
...base,
|
|
70
|
-
...manifest.workspace,
|
|
71
|
-
isDecadeNumbered: isDecade
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
// Fall through to auto-detection
|
|
77
|
-
}
|
|
78
|
-
// 2. Physical directory inspection
|
|
79
|
-
if (await isDecadeNumberedLayout(projectRoot)) {
|
|
80
|
-
return { ...DECADE_NUMBERED_WORKSPACE_PATHS };
|
|
81
|
-
}
|
|
82
|
-
// 3. Fallback to legacy flat layout
|
|
83
|
-
return { ...LEGACY_WORKSPACE_PATHS };
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=workspace-paths.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-paths.js","sourceRoot":"","sources":["../../lib/workspace-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
# 📋 Build Plan (User-Owned Feature Queue)
|
|
2
|
-
|
|
3
|
-
> **Document Type**: Build Plan (User-Owned)
|
|
4
|
-
> **Purpose**: รายการคิวฟีเจอร์การพัฒนาปรับปรุงระบบตามลำดับ พร้อมการประเมินขนาด (Sizing) และความสัมพันธ์ (Dependencies) สำหรับ `/brief` และ `/feature`
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 🚀 Phase 1: Hard Quality Gates & Pre-commit Enforcement
|
|
9
|
-
|
|
10
|
-
- [x] **1. Automated Quality Gatekeeper & Pre-commit Hook Integration** `[Size: S]`
|
|
11
|
-
- *Dependencies*: None
|
|
12
|
-
- *Scope*: ผสาน `nexus-devflow check-gate` เข้าสู่ Git Pre-commit Hooks และ CI เพื่อบล็อกการ Commit/Merge เมื่อมี Unchecked Tasks, Test ล้มเหลว หรือมี P0/P1 Finding ค้างอยู่
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## ⚡ Phase 2: DevFlow Model Context Protocol (MCP) Server Hub
|
|
17
|
-
|
|
18
|
-
- [x] **2. DevFlow MCP Server Hub & Type-Safe Schema Engine (`IDEA-004`)** `[Size: M]`
|
|
19
|
-
- *Dependencies*: Feature 1
|
|
20
|
-
- *Scope*: สร้าง Subcommand `nexus-devflow mcp` เปิด JSON-RPC Server พร้อมเครื่องมือ Typed Tools (`update_task`, `record_finding`, `get_stage_context`) ด้วย Zod Schema Validation
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## 🌿 Phase 3: Branch-Scoped Context Isolation
|
|
25
|
-
|
|
26
|
-
- [x] **3. Branch-Scoped Context Isolation & Dynamic Router** `[Size: M]`
|
|
27
|
-
- *Dependencies*: Feature 2
|
|
28
|
-
- *Scope*: แยกจัดเก็บ State ตาม Git Branch ใน `.nexus/branches/<branch-name>/`, ระบบ Canonical Dynamic Router สำหรับ AI Agent และระบบ Auto-Cleanup หลัง `/complete`
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## ✂️ Phase 4: JIT Context Slicing & Token Optimizer
|
|
33
|
-
|
|
34
|
-
- [x] **4. Just-In-Time (JIT) Dynamic Context Slicing Engine** `[Size: M]`
|
|
35
|
-
- *Dependencies*: Feature 3
|
|
36
|
-
- *Scope*: สร้างตัวตัดตอนบริบท (Context Slicer) สำหรับสคิล `/implement`, `/check`, `/discovery` เพื่อส่งเฉพาะข้อมูลที่จำเป็นและควบคุม Token Budget ลดการใช้ Token 60–70%
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## 🔄 Phase 5: State Drift Detection & Self-Healing
|
|
41
|
-
|
|
42
|
-
- [x] **5. Git Diff Drift Reconciler & Self-Healing State Engine** `[Size: M]`
|
|
43
|
-
- *Dependencies*: Feature 4
|
|
44
|
-
- *Scope*: ตรวจจับความไม่สอดคล้องระหว่าง `git diff` กับรายการไฟล์ใน Living Spec พร้อมระบบแจ้งเตือนและ Auto-Reconcile ซิงค์สถานะอัตโนมัติ
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## 🖥️ Phase 6: IDE Native Extension & Visual Studio
|
|
49
|
-
|
|
50
|
-
- [x] **6. IDE Native Extension & Interactive Webview Studio** `[Size: L]`
|
|
51
|
-
- *Dependencies*: Feature 5
|
|
52
|
-
- *Scope*: พัฒนา Extension สำหรับ VS Code / Antigravity Webview เพื่อแสดง Live Kanban Board, ปุ่มกดรันคำสั่ง DevFlow และ Diff Inspector ในตัว IDE
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## 🤖 Phase 7: Multi-Agent Swarm Orchestration & Code Graph RAG
|
|
58
|
-
|
|
59
|
-
- [x] **7. Multi-Agent Swarm Orchestrator & Semantic Code Graph RAG** `[Size: L]`
|
|
60
|
-
- *Dependencies*: Feature 6
|
|
61
|
-
- *Scope*: พัฒนาระบบกระจายงานแบบคู่ขนานให้ Subagents (Coder, QA Verifier, Security Auditor) และระบบ Indexing Local Codebase Graph เพื่อดึงบริบทที่แม่นยำสูงสุด
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## 🔄 Phase 8: Upstream Synchronization & Multi-Adapter Expansion
|
|
66
|
-
|
|
67
|
-
- [x] **8. Sync Upstream v0.13.0 (Adopt Visibility, OpenCode & Multi-Adapter Selection)** `[Size: M]`
|
|
68
|
-
- *Dependencies*: None
|
|
69
|
-
- *Scope*: ผสานความสามารถ Adopt Workflow Visibility (Commit vs Local-only), การรองรับ OpenCode และ Multi-Adapter Checkbox Prompt ใน CLI พร้อมอัปเดต Doctor checks และซิงก์ Baseline SHA เป็น v0.13.0 (`0b65166`)
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## 🧪 Phase 9: Strict TDD Sub-Tasks & Two-Stage Review Guardrails
|
|
74
|
-
|
|
75
|
-
- [x] **9. Strict TDD Sub-Tasks & Two-Stage Review Guardrails** `[Size: M]`
|
|
76
|
-
- *Dependencies*: None
|
|
77
|
-
- *Scope*: นำ Strict TDD (Red-Green-Refactor) Sub-Tasks และ Two-Stage Review Pattern (Stage 1: Spec Fidelity, Stage 2: Quality & Security Gate) ผสานเข้าสู่ Prompt Rules, Coding Standards, AI Interaction และ Stage Skills (`30-plan`, `40-execute`, `50-verify`, `feature`, `implement`, `check`, `debug`) พร้อมอัปเดต Template และ Unit Tests
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## ⚡ Phase 10: Nexus-DevFlow 2.5.0 (Unified Living Spec Model)
|
|
82
|
-
|
|
83
|
-
- [x] **10. Unify Deep-Track and Fast-Track into Single Living Spec Model** `[Size: L]`
|
|
84
|
-
- *Dependencies*: ADR-001
|
|
85
|
-
- *Scope*: รวมความสามารถเชิงสถาปัตยกรรมระดับลึกของ Deep-Track เข้าสู่ 4 ขั้นตอนหลักของ Fast-Track บนเอกสาร Single Living Spec (`current-feature.md`) จัดเก็บประวัติแบบ Single Archive (`.md`), ปลดระวาง stage skills 10-70 ที่ซ้ำซ้อน, และปรับปรุงเอกสาร & Schemas ทั้งหมด
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## 🚀 Phase 11: Multi-Run Context Architecture & Spec Queue Engine
|
|
90
|
-
|
|
91
|
-
- [x] **11. Multi-Run Context Architecture & Spec Queue Engine (`IDEA-026`, `DISC-20260826-001`)** `[Size: M]`
|
|
92
|
-
- *Dependencies*: Feature 10, Feature 3
|
|
93
|
-
- *Scope*: แยกจัดเก็บ Task-Specific Context เป็นโฟลเดอร์ย่อยใน `devflow/context/{xxx-slug}/`, พัฒนา Context Resolver สำหรับสลับและเรียกใช้งาน `/implement <id>`, `/check <id>`, `/complete <id>` แบบระบุ Running ID หรือ Fuzzy Match, และอัปเกรด CLI/Dashboard/Skills ให้รองรับ Spec Queue หลายรันพร้อมกัน
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## 🧹 Phase 12: Purge Legacy Deep-Track & Numbered Stage Artifacts
|
|
98
|
-
|
|
99
|
-
- [x] **12. Purge Legacy Deep-Track & Numbered Stage Artifacts (`DISC-20260826-002`)** `[Size: M]`
|
|
100
|
-
- *Dependencies*: Feature 10, Feature 11
|
|
101
|
-
- *Scope*: ล้างโค้ดตกค้างของ Deep-Track (สเตจ 00-70 เช่น `40-execute`, `50-verify`, `60-report`, `70-deliver`, `10-define`, `20-spec`, `30-plan`) ออกจาก package engine (`status.ts`, `current-work.ts`, `history.ts`), agent skills (`.agents/`, `.claude/`), automation scripts & tests ใน `scripts/`, และเอกสาร/mockup ให้เป็นปัจจุบันสมบูรณ์
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## 🔄 Phase 13: Upstream AI Blueprint v0.14.0 Synchronization & Deterministic Config Engine
|
|
106
|
-
|
|
107
|
-
- [x] **13. Sync Upstream v0.14.0 (Deterministic Config & Continuous Mode)** `[Size: M]`
|
|
108
|
-
- *Dependencies*: Feature 12, DISC-20260826-003
|
|
109
|
-
- *Scope*: นำระบบ Deterministic Project Configuration (`devflow/config.json`) และสคิล Autonomous Multi-Feature Loop (`/continuous`) เข้าสู่ Nexus-DevFlow พร้อมอัปเกรด `project-config.ts`, `doctor`, `status`, `dashboard` และอัปเดต upstream baseline tracking สู่ v0.14.0
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## ⚡ Phase 14: Pure Multi-Run Task-Isolated Architecture
|
|
114
|
-
|
|
115
|
-
- [x] **14. Pure Multi-Run Task-Isolated Architecture (`DISC-20260826-004`)** `[Size: M]`
|
|
116
|
-
- *Dependencies*: Feature 11, Feature 12, Feature 13
|
|
117
|
-
- *Scope*: ยกเลิกไฟล์ Single Living Spec ที่ Root (`current-feature.md`, `current-stage.md`, `findings.md`) อย่างสมบูรณ์ ปรับโครงสร้างสู่ Task-Isolated Subdirectories 100% (`devflow/context/{xxx-slug}/`), อัปเกรด Agent Directives, Core Context Resolver, Scaffolding Templates และ Workflow Skills ทั้งหมด
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## 🔄 Phase 15: Upstream AI Blueprint v1.0.0 / v1.0.1 Synchronization
|
|
122
|
-
|
|
123
|
-
- [x] **15. Sync Upstream v1.0.0 (Activity Contract, Rollback & Complete Safeguards, Local Linking)** `[Size: M]`
|
|
124
|
-
- *Dependencies*: Feature 14, DISC-20260828-001-sync-upstream-ai-blueprint-v100
|
|
125
|
-
- *Scope*: ผสาน Activity State Contract (`devflow/.state/run.json`) และ Live Dashboard Activity, เสริม Rollback 40-char SHA & Merge Commit Protection, Complete Fixed Finding Persistence, คำสั่ง `npm run link:local` / `unlink:local` พร้อม `findPackageRoot()`, Onboarding Markers และ Windows Smoke/Path Fixes
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## 🖥️ Phase 16: Multi-Task Dashboard & Live Kanban Studio UI
|
|
130
|
-
|
|
131
|
-
- [x] **16. Multi-Task Dashboard & Live Kanban Studio UI (`DISC-20260828-002`)** `[Size: M]`
|
|
132
|
-
- *Dependencies*: Feature 14, Feature 15
|
|
133
|
-
- *Scope*: ปรับปรุง Full Web Dashboard (`dashboard-page.ts`) และ Live Kanban Studio (`webview-studio.ts`) ให้อ่านและวนลูปแสดงผลรายการ Task ทั้งหมดใน `status.activeRuns` จาก `devflow/context/{xxx-slug}/` พร้อม Task Progress Bar, Branch Pill, Findings Indicator และปุ่ม Quick Actions แบบเจาะจง Target Run ID
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
## 🔌 Phase 17: Unified Third-Party Skills Installer & Updater
|
|
138
|
-
|
|
139
|
-
- [x] **17. Unified Third-Party Skills Installation & Update Command (`DISC-20260831-001`, `055-unified-third-party-skills-installer`)** `[Size: S]`
|
|
140
|
-
- *Dependencies*: None
|
|
141
|
-
- *Scope*: เพิ่มฟังก์ชัน `installRecommendedSkills` และ `updateRecommendedSkills` ใน `skill-manager.ts`, รองรับสวิตช์ `--recommended` ในคำสั่ง `nexus-devflow skill add` และ `nexus-devflow skill update`, พร้อมอัปเดตเอกสาร `README.md`, `README.th.md` และ Automated Tests
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
## 🔄 Phase 18: Upstream AI Blueprint v1.1.0 & v1.2.0 Synchronization
|
|
146
|
-
|
|
147
|
-
- [x] **18. Sync Upstream v1.1.0 & v1.2.0 (Browser Tests & Independent Review System) (`DISC-20260901-001`)** `[Size: M]`
|
|
148
|
-
- *Dependencies*: None
|
|
149
|
-
- *Scope*: ผสานสคิล `/browser-tests` สำหรับ Playwright/E2E testing, ระบบตรวจทานอิสระ Independent Audit Review (`audit independent current` พร้อม `review.ts` และ `review.md`), อัปเกรด Config Quality Gates (`independentReview`), อัปเดต CLI Engine/Dashboard และปรับปรุงคู่มือ Scaffolding
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## 🛡️ Phase 19: BugHunter Master Skill & Upstream Knowledge Sync Engine
|
|
154
|
-
|
|
155
|
-
- [x] **19. BugHunter Master Skill & Upstream Knowledge Sync Engine (`DISC-20260901-002`, `065-bughunter-master-skill-and-sync-engine`)** `[Size: M]`
|
|
156
|
-
- *Dependencies*: Feature 17, Feature 18
|
|
157
|
-
- *Scope*: พัฒนา Master Orchestrator Skill `bughunter` พร้อมระบบ Sync ดึงคลังความรู้ 83 skills และ report patterns จาก `elementalsouls/Claude-BugHunter` เก็บใน `devflow/.vendor/bughunter/`, รองรับคำสั่ง `nexus-devflow skill add/update bughunter`, อัปเดต Manifest และผสานเข้ากับ Multi-Adapter (`.agents/`, `.claude/`)
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## 🔄 Phase 20: Upstream AI Blueprint v1.3.0 – v1.4.1 Synchronization
|
|
162
|
-
|
|
163
|
-
- [x] **20. Sync Upstream v1.3.0 – v1.4.1 (Planning Baseline Commit & Context Overhead Reduction) (`DISC-20260902-002`, `067-sync-upstream-ai-blueprint-v130-v141`)** `[Size: M]`
|
|
164
|
-
- *Dependencies*: Feature 18, DISC-20260902-002
|
|
165
|
-
- *Scope*: ผสานสคิล Planning Baseline Commit ใน `/overview` (`chore: establish DevFlow project baseline`), กฎ Overview Compactness Budget (20KB) พร้อม Hard-stop ใน `/feature` และคำเตือนใน `/doctor`, ปรับ Workflow Defaults เป็น `stepReview: "feature"` และ `checkpointCommits: "disabled"` พร้อม Onboarding Presets (Efficient/Guided/Custom), ย่อ Skill Descriptions 31 สคิลให้ <= 400 chars, ปรับ Claude Code Startup Context ใน `CLAUDE.md`, และอัปเดต Framework Validation/Tests ผ่าน 100%
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## 🛠️ Phase 21: Upstream Tooling Parity & Comprehensive Evals Suite
|
|
170
|
-
|
|
171
|
-
- [x] **21. Upstream Tooling Parity & Comprehensive Evals Suite (E2E Agent Harness, Complete Routing Fixtures, Sandbox Automation & Upstream Drift Monitor) (`DISC-20260902-001`, `068-sync-upstream-ai-blueprint-tooling-and-evals`)** `[Size: M]`
|
|
172
|
-
- *Dependencies*: Feature 20, DISC-20260902-001
|
|
173
|
-
- *Scope*: ขยายชุดทดสอบ Evals Routing ให้ครอบคลุมทุกสคิล (`browser-tests.json`, `continuous.json`, `bughunter.json`, `publish-devflow.json`), นำเข้าและปรับใช้ Live-Agent E2E Test Harness (`scripts/e2e/`), สคริปต์จำลองติดตั้ง Sandbox Scaffolding (`scripts/scaffold-sandbox.ts`), สคริปต์ตรวจจับ Upstream Drift (`scripts/check-upstream-drift.ts`), และเอกสารวิเคราะห์ Token Efficiency (`benchmarks/context-efficiency.md`)
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## 🎨 Phase 22: Visual Dashboard & Diagram Integration
|
|
178
|
-
|
|
179
|
-
- [x] **22. Standalone HTML Report Diagram Integration (`DISC-20260902-003`, `069-report-html-diagram-integration`)** `[Size: S]`
|
|
180
|
-
- *Dependencies*: Feature 17 (`055`), DISC-20260902-003
|
|
181
|
-
- *Scope*: ปรับปรุง `md2html-report.mjs` รองรับการเรนเดอร์ native Mermaid block (`.mermaid`), เพิ่มการสแกนและ embed ไฟล์ไดอะแกรมจาก `devflow/context/{xxx-slug}/diagrams/` (`.svg` และ `.html`), อัปเดต `report-html` skill ให้ตรวจจับและ auto-install `archify` / `diagram-design` ผ่าน `nexus-devflow skill add` และเขียนชุดทดสอบครอบคลุม
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## 🧹 Phase 23: Reference Artifacts Housekeeping
|
|
186
|
-
|
|
187
|
-
- [x] **23. Prune Studio Reference Artifacts (`069-prune-studio-reference-artifacts`)** `[Size: S]`
|
|
188
|
-
- *Dependencies*: None
|
|
189
|
-
- *Scope*: ลบไฟล์ Static HTML Snapshot ตกค้าง `devflow/reference/studio.html` และสคริปต์ `scripts/export-studio.ts` โดยยังคงรักษา Webview Studio Engine (`webview-studio.ts`), MCP tool (`devflow_get_studio_html`), CLI Command (`nexus-devflow studio`) และชุดทดสอบทั้งหมดให้ทำงานได้สมบูรณ์ 100%
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
## 📐 Phase 24: Role-Based Profiles & SA Command Suite Engine
|
|
194
|
-
|
|
195
|
-
- [x] **24. Role-Based Profiles & SA Analyze Command Engine (`DISC-20260903-001`, `070-role-based-profile-and-sa-analyze-engine`)** `[Size: M]`
|
|
196
|
-
- *Dependencies*: None
|
|
197
|
-
- *Scope*: เพิ่มตัวเลือก `--role [sa|dev|full]` ใน CLI Installer (`create-nexus-devflow`), ระบบจำแนกชุด Skill Profiles ใน `skill-manager.ts`, โฟลเดอร์ Template สำหรับ SA (`devflow/inbox/`, `devflow/analysis/`, `devflow/blueprints/`), พัฒนาสคิล `/analyze` สำหรับสกัดเอกสารหลายรูปแบบ (PDF, Word, Excel, รูปภาพ, ข้อความ) และวิเคราะห์ Codebase Impact พร้อมชุดทดสอบ Automated Tests
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
## 🔄 Phase 25: Upstream AI Blueprint v1.5.0 – v1.5.1 Synchronization
|
|
202
|
-
|
|
203
|
-
- [x] **25. Sync Upstream v1.5.0 & v1.5.1 (Hardened Run-State Engine & On-Demand Context Loading) (`DISC-20260903-001`, `070-sync-upstream-ai-blueprint-v150-v151`)** `[Size: M]`
|
|
204
|
-
- *Dependencies*: Feature 20, Feature 21, DISC-20260903-001
|
|
205
|
-
- *Scope*: พอร์ตและปรับแต่ง Hardened Dashboard Activity State Helper (`.agents/skills/doctor/scripts/run-state.mjs` และ `.claude/`), บังคับใช้ Zero-Manual Writes กับ `devflow/.state/run.json`, ปรับใช้ On-Demand Context Loading Protocol พร้อมแยก Reference Templates ย่อย (`reference/`), เพิ่ม Unit Tests `run-state-helper.test.ts`, อัปเดต `scripts/validate-framework.ts`, `AGENTS.md`, `CLAUDE.md` และยืนยันการผ่าน 100%
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## 🔄 Phase 26: Upstream AI Blueprint v1.5.2 Synchronization
|
|
210
|
-
|
|
211
|
-
- [x] **26. Sync Upstream v1.5.2 (Unborn Repository Onboarding & Branch Baseline Finalization) (`REQ-20260903-001`, `071-sync-upstream-ai-blueprint-v152`)** `[Size: S]`
|
|
212
|
-
- *Dependencies*: Feature 25, REQ-20260903-001
|
|
213
|
-
- *Scope*: เพิ่มการตรวจจับและกู้คืน Unborn Git repository ใน `/onboard` ด้วย Scaffold Initial Commit (`chore: scaffold application`), รองรับการ Finalize DevFlow Baseline บน Dedicated Setup Branch ด้วย `git merge --ff-only` ใน `/overview`, เพิ่มชุดทดสอบ E2E Scenario `scripts/e2e/scenarios/unborn-onboarding.ts`, อัปเดต `devflow/context/ai-interaction.md` และอัปเดต Framework Static Contracts ผ่าน 100%
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## 🔄 Phase 27: Upstream AI Blueprint v1.5.3 Synchronization
|
|
218
|
-
|
|
219
|
-
- [x] **27. Sync Upstream v1.5.3 (Manifest-Aware Adapter Selection in Onboard & E2E Scenario Parity) (`REQ-20260904-001`, `072-sync-upstream-ai-blueprint-v153`)** `[Size: S]`
|
|
220
|
-
- *Dependencies*: Feature 26, REQ-20260904-001
|
|
221
|
-
- *Scope*: ปรับปรุง `/onboard` (ทั้ง `.agents/` และ `.claude/`) ให้อ่านและยึดถือรายการ `adapters` จาก Manifest (`.nexus/nexus-devflow.json` / `devflow/.state/manifest.json`) เป็นความจริงหลัก (Authoritative Selection) โดยไม่ถามซ้ำและไม่อนุมานผิดพลาด, เพิ่มชุดทดสอบ E2E Scenario ตัวที่ 10 `scripts/e2e/scenarios/adapter-selection.ts`, อัปเดต `agent-bundle.manifest.json` และ `scripts/validate-framework.ts` ให้ครอบคลุม Verification Contracts ใหม่ 100%
|
|
222
|
-
|
|
223
|
-
---
|
|
224
|
-
|
|
225
|
-
## 🔄 Phase 28: Upstream AI Blueprint v1.5.4 – v1.6.0 Synchronization
|
|
226
|
-
|
|
227
|
-
- [x] **28. Sync Upstream v1.5.4 & v1.6.0 (Automatic Independent Review, Post-Implementation Walkthroughs & Hardened Dashboard Engine) (`DISC-20260907-001`, `073-sync-upstream-ai-blueprint-v154-v160`)** `[Size: M]`
|
|
228
|
-
- *Dependencies*: Feature 27, DISC-20260907-001
|
|
229
|
-
- *Scope*: นำเข้าระบบตรวจทานอิสระแบบอัตโนมัติ (`review.independentExecution: "automatic"` พร้อม Isolated Subagent Spawning, Receipts Metadata Schema), ปรับค่าเริ่มต้น Quality Gates เป็น `when-sensitive`, เพิ่ม Post-Implementation Code Walkthrough ใน `implement` / `autopilot`, ปรับปรุงความทนทานของสถานะโครงการและ Dashboard (Sortable Findings, Roadmap Focus, Strict Heading Contracts), อัปเดต Framework Validation และ Unit Tests ผ่าน 100%
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## 🖥️ Phase 30: Modernize Web Dashboard with Dynamic Archify Visualizer & Recommended Skills
|
|
234
|
-
|
|
235
|
-
- [x] **30. Modernize Web Dashboard with Dynamic Archify Visualizer & Recommended Skills (`DISC-20260907-003`, `080-dashboard-workflow-visualizer`)** `[Size: M]`
|
|
236
|
-
- *Dependencies*: Feature 28, DISC-20260907-003
|
|
237
|
-
- *Scope*: เพิ่ม Dynamic Archify SVG Workflow Visualizer (Macro Lifecycle Pulse Map พร้อม CSS Trace Motion และ Micro Tracer-Bullet Tickets DAG), เพิ่มการ์ด Recommended Skills & Vendors (`matt-pocock`, `bughunter`, `archify`, `diagram-design`, `9arm-skills`) พร้อมตรวจจับสถานะติดตั้งจริงและแสดงป้ายติ๊กถูก ✔, ปรับลดความรกบนแดชบอร์ด (ลบ Swarm Tab, ยุบ Doctor สรุปคลีน), เพิ่มข้อมูลใน `DashboardSnapshot` และชุดทดสอบความถูกต้องผ่าน 100%
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
## 🧹 Phase 31: Vendor Purge, Unified Debug & Headless Ticket Ingestion
|
|
241
|
-
|
|
242
|
-
- [x] **31. Purge Matt Pocock Vendor, Unify Debug Skill & Headless Ticket Ingestion (`081-purge-vendor-and-unify-debug`)** `[Size: S]`
|
|
243
|
-
- *Dependencies*: None
|
|
244
|
-
- *Scope*: ตัดโฟลเดอร์ vendor `devflow/.vendor/matt-pocock/`, ลบ skill wrapper ของ `matt-pocock` และ `debug-mantra`, รวมสาระสำคัญของ mantra 4 ข้อเข้าสู่ `/debug` (ทั้ง `.agents` และ `.claude`), ลบโฟลเดอร์ตกค้าง `.scratch/` และ `docs/agents/`, อัปเดต `AGENTS.md` และเอกสารเพื่อรองรับการนำเข้า external spec และ tickets จาก `devflow/context/{slug}/issues/` หรือ `tickets/` ได้ทันที
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
## 🧹 Phase 32: Consolidate 9arm Skills into DevFlow Core & Purge Extension
|
|
249
|
-
|
|
250
|
-
- [x] **32. Consolidate 9arm Skills into DevFlow Core & Purge Extension (`DISC-20260908-001`, `082-consolidate-9arm-skills-and-purge`)** `[Size: S]`
|
|
251
|
-
- *Dependencies*: None
|
|
252
|
-
- *Scope*: รวมสาระสำคัญของ `scrutinize` (Outsider Stance, Call-path tracing, Challenge intent) เข้าสู่ `/audit`, ผสาน `post-mortem` เข้าสู่ `/debug` (Phase 4 Handoff) และ `/complete` (Fix Archive Template), เพิ่ม Executive / Stakeholder Summary ใน `/status` และ `/complete`, ลบโฟลเดอร์ extension `post-mortem`, `scrutinize`, `management-talk` ทั้งใน `.agents/` และ `.claude/`, ลบ entries 9arm-skills ออกจาก `.nexus/nexus-devflow.json`, อัปเดตเอกสารและยืนยัน static contracts ผ่าน 100%
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## 🪓 Phase 33: Ponytail Hybrid Compound-Vendor Integration
|
|
257
|
-
|
|
258
|
-
- [x] **33. Ponytail Hybrid Compound-Vendor Integration (`DISC-20260909-001`)** `[Size: S]`
|
|
259
|
-
- *Dependencies*: Feature 17 (`055`), Feature 19 (`065`), DISC-20260909-001
|
|
260
|
-
- *Scope*: นำเข้า `DietrichGebert/ponytail` ในรูปแบบ Hybrid Compound-Vendor (`type: "compound-knowledge"`) โดยโคลน upstream ลง `devflow/.vendor/ponytail/`, สร้าง Master Wrapper Skill (`.agents/skills/ponytail/` และ `.claude/`) พร้อม 5W1H Playbook และ Auto-Bypass สำหรับงาน Frontend/UI, อัปเดต `skill-registry-engine.ts`, บันทึก `thirdPartySkills` ใน `.nexus/nexus-devflow.json` และเขียน Automated Tests ครอบคลุม
|
|
261
|
-
|
|
262
|
-
---
|
|
263
|
-
|
|
264
|
-
## 📦 Phase 34: Unscoped CLI Packages & Shorthand Shims (`npx nexus-devflow` & `npm create nexus-devflow`)
|
|
265
|
-
|
|
266
|
-
- [x] **34. Unscoped CLI Packages & Shorthand Shims (`nexus-devflow` & `create-nexus-devflow`) (`084-unscoped-nexus-devflow-cli-package`)** `[Size: S]`
|
|
267
|
-
- *Dependencies*: Feature 1 (`check-gate`), Feature 17 (`055`)
|
|
268
|
-
- *Scope*: สร้างและกำหนดค่า Wrapper Shims สำหรับ Unscoped NPM Packages: `nexus-devflow` (เพื่อรองรับ `npx nexus-devflow`) และ `create-nexus-devflow` (เพื่อรองรับ `npm create nexus-devflow`), อัปเดต Pipeline การ Publish ใน `.github/workflows/publish.yml` และ `publish-devflow` ให้ซิงก์เวอร์ชันและเผยแพร่คู่ขนานกับ `@jakkrichm/create-nexus-devflow`, อัปเดตเอกสาร `AGENTS.md`, `CLAUDE.md` และ README ให้แนะนำคำสั่งสั้นเป็นหลัก
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
---
|
|
273
|
-
|
|
274
|
-
## Phase 35: Superpowers Debugging & TDD Heuristics Integration
|
|
275
|
-
|
|
276
|
-
- [x] **35. Superpowers Debugging Heuristics & TDD Reference Guides (`DISC-20260909-003`, `085-superpowers-debugging-heuristics-integration`)** `[Size: S]`
|
|
277
|
-
- *Dependencies*: Feature 31 (`081`), Feature 32 (`082`)
|
|
278
|
-
- *Scope*: เพิ่ม JIT reference guides สำหรับ root-cause tracing, defense-in-depth, condition-based waiting, TDD anti-patterns และ two-stage review พร้อม 3-Strike Rule และ Iron Law; ซิงก์ `.agents/` กับ `.claude/` และตรวจ file contracts
|
|
279
|
-
|
|
280
|
-
---
|
|
281
|
-
|
|
282
|
-
## Phase 36: Upstream AI Blueprint v1.6.1 Synchronization
|
|
283
|
-
|
|
284
|
-
- [x] **36. Sync Upstream v1.6.1 (Installer Symlink Rejection, Completion Recovery Engine, Rebuild History Preservation, Local-Only Spec Review & Status Evidence Alignment) (`DISC-20260911-001`, `086-sync-upstream-ai-blueprint-v161`)** `[Size: M]`
|
|
285
|
-
- *Dependencies*: Feature 28 (`073`), DISC-20260911-001
|
|
286
|
-
- *Scope*: นำเข้า 5 เสาหลักความปลอดภัยและความแม่นยำจาก AI Blueprint v1.6.1: (1) ปฏิเสธ Symlink paths และตรวจ type compatibility ในตัวติดตั้ง `create-nexus-devflow`, (2) สร้างสัญญา `completion-recovery.md` พร้อม JSON comment annotation `<!-- devflow:completion ... -->` กู้คืนการส่งมอบงานที่สะดุด, (3) สร้างสัญญา `build-history.md` รองรับการตั้งชื่อ `--build-N` เมื่อ Rebuild ฟีเจอร์ที่เคยถูก Rollback, (4) ขยาย `lib/review.ts` ให้รองรับ `specSnapshot` สำหรับ Local-only spec review, (5) บูรณาการ `classifyWorkEvidence` ใน `project-status-engine.ts` และ `dashboard.ts` ป้องกัน False Ready State เมื่อ verification failed หรือพบ malformed records, (6) ซิงก์สคิลและเอกสารทั้ง `.agents/` และ `.claude/` พร้อม automated tests ผ่าน 100%
|
|
287
|
-
|
|
288
|
-
## 🔌 Phase 37: AI-Orchestrated Project-Local Vendor Skill Ingestion (`/vendor`)
|
|
289
|
-
|
|
290
|
-
- [x] **37. AI-Orchestrated Project-Local Vendor Skill Ingestion (`DISC-20260911-002`, `087-ai-orchestrated-vendor-skill-ingestion`)** `[Size: M]`
|
|
291
|
-
- *Dependencies*: Feature 33 (`083`), Feature 34 (`084`), DISC-20260911-002
|
|
292
|
-
- *Scope*: พัฒนาคำสั่ง `/vendor` (พร้อม aliases: `skill-add`, `equip`, `ingest`) สำหรับนำเข้า Git repository ลงในระดับโปรเจกต์ `devflow/.vendor/<slug>/`, ให้ AI Agent สำรวจโค้ดและสังเคราะห์ Custom Wrapper Skill ใน `.agents/skills/<slug>/SKILL.md` และ `.claude/skills/<slug>/SKILL.md`, พัฒนากลไก Update Protection ใน `update.ts` เพื่อป้องกันไม่ให้คำสั่งอัปเดต DevFlow ลบ custom skills เหล่านี้, บันทึก metadata ลง `.nexus/nexus-devflow.json`, ปรับปรุง CLI `nexus-devflow skill update all` ให้รองรับการ pull upstream ใน `.vendor/` โดยคงรักษา custom wrapper ที่ AI เขียนไว้, พร้อมเขียน Automated Unit Tests ครอบคลุม 100%
|
|
293
|
-
|
|
294
|
-
---
|
|
295
|
-
|
|
296
|
-
## 📂 Phase 38: Decade-Numbered Folder Architecture & Multi-Version Migration Engine
|
|
297
|
-
|
|
298
|
-
- [x] **38. Decade-Numbered Folder Architecture, Legacy Path Resolver & Structure Migration Engine (`REQ-20260911-001`, `088-decade-numbered-folder-architecture`)** `[Size: M]`
|
|
299
|
-
- *Dependencies*: None
|
|
300
|
-
- *Scope*: ปรับสถาปัตยกรรมโฟลเดอร์ของ DevFlow ให้จัดเรียงตาม Decade-Numbered Stages (`00-context`, `10-ideation`, `20-discovery`, `30-planning`, `40-tasks`, `50-history`, `60-docs`), สร้าง Dynamic Path Resolver Engine รองรับ Client เวอร์ชันเก่าแบบ Zero-Breaking Change, พัฒนา CLI Subcommand `nexus-devflow migrate-structure` ทำการย้ายโฟลเดอร์และอัปเดต Manifest/Config อัตโนมัติ, ลบโฟลเดอร์ Legacy `devflow/runs/`, อัปเดตคู่มือ `AGENTS.md`, `CLAUDE.md`, `README.md`, Playbooks และเขียน Automated Tests ครอบคลุม
|
|
301
|
-
|
|
302
|
-
|