persona-harness 0.3.2-alpha.2 → 0.3.2-alpha.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/.persona/rules/backend/gradle-bootstrap.md +1 -1
- package/CHANGELOG.md +22 -0
- package/dist/cli/bootstrap.d.ts +8 -0
- package/dist/cli/bootstrap.js +154 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plan-prompts.js +1 -0
- package/dist/cli/plan-prompts.js.map +1 -1
- package/dist/cli/workflow-command.js +37 -4
- package/dist/cli/workflow-command.js.map +1 -1
- package/dist/cli/workflow-output.d.ts +1 -0
- package/dist/cli/workflow-output.js +32 -7
- package/dist/cli/workflow-output.js.map +1 -1
- package/dist/cli/workflow-status.js +6 -10
- package/dist/cli/workflow-status.js.map +1 -1
- package/dist/phase0/injection.js +4 -3
- package/dist/phase0/injection.js.map +1 -1
- package/docs/current/release/next-version-readiness.md +11 -2
- package/docs/current/release/v0.3.2-alpha.2-release-notes.md +6 -0
- package/docs/current/release/v0.3.2-alpha.3-clean-short-request-review.md +285 -0
- package/docs/current/release/v0.3.2-alpha.3-release-notes.md +108 -0
- package/package.json +1 -1
- package/packages/shared-skills/skills/programming/references/java/backend.md +2 -0
|
@@ -20,7 +20,7 @@ enforcement: inject_only
|
|
|
20
20
|
|
|
21
21
|
- Gradle build file에서는 Java/Spring Boot backend 기준을 유지하고 Maven `pom.xml`을 생성하지 않는다.
|
|
22
22
|
- `settings.gradle` 또는 `settings.gradle.kts`는 하나의 Spring Boot application root project 이름을 명확히 둔다.
|
|
23
|
-
- `build.gradle` 또는 `build.gradle.kts`는 Spring Boot backend를 만들기 위한 최소 plugin/dependency/source compatibility만 다루며, 호환되는 Spring Boot plugin / Gradle launcher or wrapper / JDK toolchain 조합을 먼저 선택하고 그 선택을 build file에 명시한다. JUnit Platform 실행에는 `testRuntimeOnly "org.junit.platform:junit-platform-launcher"` 또는 동등한 runtime launcher를 포함한다.
|
|
23
|
+
- `build.gradle` 또는 `build.gradle.kts`는 Spring Boot backend를 만들기 위한 최소 plugin/dependency/source compatibility만 다루며, 호환되는 Spring Boot plugin / Gradle launcher or wrapper / JDK toolchain 조합을 먼저 선택하고 그 선택을 build file에 명시한다. 가능하면 Gradle wrapper(`gradlew`, `gradlew.bat`, `gradle/wrapper/`)를 포함해 `./gradlew test`, `./gradlew build`, `./gradlew bootRun`으로 검증할 수 있게 하며, JUnit Platform 실행에는 `testRuntimeOnly "org.junit.platform:junit-platform-launcher"` 또는 동등한 runtime launcher를 포함한다.
|
|
24
24
|
- 실행 가능한 Spring Boot app에서는 `bootJar`를 끄지 않는다. `tasks.named("bootJar") { enabled = false }` 또는 동등한 설정은 plain Java library로 명시된 프로젝트가 아니면 사용하지 않는다. `gradle build` 출력에 `:bootJar SKIPPED`가 나오면 실행 가능한 Spring Boot app 검증을 통과한 것으로 기록하지 않는다. `bootJar`가 `CopyProcessingSpec.getDirMode()` 같은 호환성 오류로 실패하면, `bootJar`를 비활성화하지 말고 Spring Boot plugin을 현재 Gradle과 호환되는 line으로 올리거나 Gradle wrapper를 해당 plugin이 지원하는 line으로 고정한다.
|
|
25
25
|
- 로컬 launcher가 Gradle 9.x이면 Spring Boot 3.3.x 같은 오래된 plugin line을 기본으로 섞지 않는다. 호환 여부가 불명확하면 executable app 기준으로 `gradle test`, `gradle build`, `gradle bootRun`이 모두 통과하는 line을 선택한다.
|
|
26
26
|
- build 설정은 presentation/application/domain/infrastructure package 구조를 대신하지 않는다.
|
package/CHANGELOG.md
CHANGED
|
@@ -6,8 +6,30 @@ This project uses npm prerelease versions for tester-facing alpha builds. During
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
No unreleased changes yet.
|
|
10
|
+
|
|
11
|
+
## [0.3.2-alpha.3] - 2026-06-23
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Added `ph bootstrap backend` as an AI-facing fast path that fills missing backend profile, policy, accepted plan, and workflow report templates.
|
|
16
|
+
- Added conditional workflow behavior for non-harness projects: when `.persona/` is absent, `ph workflow implement` now returns an advisory PASS and does not block normal implementation.
|
|
17
|
+
- Added stricter initialized-harness behavior: when `.persona/` exists but profile/plan/report artifacts are missing, `ph workflow implement` now directs the agent to `npx ph bootstrap backend`.
|
|
18
|
+
- Added `ph workflow continue` as an AI-facing alias for the accepted-plan continuation prompt used after interrupted or long README implementations.
|
|
19
|
+
- Added clean short-request review evidence for the current alpha.3 candidate.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Strengthened Gradle wrapper guidance in Java/Spring implementation rails so generated apps prefer `./gradlew`/`gradlew.bat` verification and do not treat missing system Gradle as application failure.
|
|
24
|
+
- Clarified raw shell environment probe warnings as non-blocking notes when final verification was rerun through `npx ph bearshell`.
|
|
25
|
+
- Updated injection guidance so Persona Harness workflow gates apply only after a project has opted in with `.persona/`.
|
|
26
|
+
|
|
9
27
|
### Known Gaps
|
|
10
28
|
|
|
29
|
+
- OpenCode may still read `.persona/rules` directly before settling into the workflow rail.
|
|
30
|
+
- Workflow finish can still be satisfied by report text, so future hardening should reduce report-only self-attestation risk.
|
|
31
|
+
- This release still does not certify generated application product quality.
|
|
32
|
+
|
|
11
33
|
## [0.3.2-alpha.2] - 2026-06-22
|
|
12
34
|
|
|
13
35
|
### Added
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CliRunResult } from "./bearshell.js";
|
|
2
|
+
type BootstrapOptions = {
|
|
3
|
+
readonly projectDir?: string;
|
|
4
|
+
readonly packageRoot?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function bootstrapUsage(invocation?: string): string;
|
|
7
|
+
export declare function runBootstrapCommand(args: readonly string[], options?: BootstrapOptions, invocationName?: string): CliRunResult;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { PROFILE_PATH } from "./intake-profile.js";
|
|
5
|
+
import { initializePersonaHarness } from "./init.js";
|
|
6
|
+
import { runIntakeCommand } from "./intake.js";
|
|
7
|
+
import { IMPLEMENTATION_REPORT_PATH, PLAN_PATH, REVIEW_REPORT_PATH } from "./plan.js";
|
|
8
|
+
import { runPlanCommand } from "./plan-command.js";
|
|
9
|
+
import { runPolicyCommand } from "./policy.js";
|
|
10
|
+
import { readBackendProjectProfileState } from "../phase0/project-profile.js";
|
|
11
|
+
const PERSONA_DIR = ".persona";
|
|
12
|
+
const POLICY_OVERLAY_PATH = ".persona/policies/overlay.jsonc";
|
|
13
|
+
export function bootstrapUsage(invocation = "ph") {
|
|
14
|
+
return [
|
|
15
|
+
`Usage: ${invocation} bootstrap backend [--force]`,
|
|
16
|
+
"",
|
|
17
|
+
"Prepares the backend Persona Harness workflow for AI implementation.",
|
|
18
|
+
"",
|
|
19
|
+
"What it fills when missing:",
|
|
20
|
+
`- ${PERSONA_DIR}/ harness files`,
|
|
21
|
+
`- ${PROFILE_PATH}`,
|
|
22
|
+
`- ${POLICY_OVERLAY_PATH}`,
|
|
23
|
+
`- ${PLAN_PATH}`,
|
|
24
|
+
`- ${IMPLEMENTATION_REPORT_PATH}`,
|
|
25
|
+
`- ${REVIEW_REPORT_PATH}`,
|
|
26
|
+
"",
|
|
27
|
+
"Scope:",
|
|
28
|
+
"- Java/Spring backend workflow convenience",
|
|
29
|
+
"- no generated app product-quality certification",
|
|
30
|
+
"- no frontend/infra workflow",
|
|
31
|
+
].join("\n");
|
|
32
|
+
}
|
|
33
|
+
function parseBootstrapArgs(args) {
|
|
34
|
+
if (args.length === 0 || args[0] === "--help" || args[0] === "-h" || args[0] === "help") {
|
|
35
|
+
return { kind: "help" };
|
|
36
|
+
}
|
|
37
|
+
if (args[0] !== "backend") {
|
|
38
|
+
return { kind: "invalid", message: `Unknown bootstrap command: ${args[0]}` };
|
|
39
|
+
}
|
|
40
|
+
let force = false;
|
|
41
|
+
for (const arg of args.slice(1)) {
|
|
42
|
+
if (arg === "--force") {
|
|
43
|
+
force = true;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
return { kind: "invalid", message: `Unknown option: ${arg}` };
|
|
47
|
+
}
|
|
48
|
+
return { kind: "backend", force };
|
|
49
|
+
}
|
|
50
|
+
function projectDirFor(options) {
|
|
51
|
+
return resolve(options.projectDir ?? process.cwd());
|
|
52
|
+
}
|
|
53
|
+
function failStep(step, result) {
|
|
54
|
+
return {
|
|
55
|
+
status: 1,
|
|
56
|
+
stdout: "",
|
|
57
|
+
stderr: [
|
|
58
|
+
`Persona Harness backend bootstrap failed during ${step}.`,
|
|
59
|
+
"",
|
|
60
|
+
result.stderr.trim().length > 0 ? result.stderr.trim() : result.stdout.trim(),
|
|
61
|
+
"",
|
|
62
|
+
].join("\n"),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function runAndRecord(actions, step, result, successMessage) {
|
|
66
|
+
if (result.status !== 0) {
|
|
67
|
+
return failStep(step, result);
|
|
68
|
+
}
|
|
69
|
+
actions.push(successMessage);
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
function runBackendBootstrap(options, force) {
|
|
73
|
+
const projectDir = projectDirFor(options);
|
|
74
|
+
const actions = [];
|
|
75
|
+
const skipped = [];
|
|
76
|
+
if (!existsSync(join(projectDir, PERSONA_DIR))) {
|
|
77
|
+
initializePersonaHarness({ projectDir, packageRoot: options.packageRoot });
|
|
78
|
+
actions.push("initialized .persona and OpenCode plugin config");
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
skipped.push(".persona already exists");
|
|
82
|
+
}
|
|
83
|
+
const profileState = readBackendProjectProfileState(projectDir);
|
|
84
|
+
if (force || profileState.status !== "ready") {
|
|
85
|
+
const result = runIntakeCommand(["--default", "backend", "--force"], { projectDir }, "ph");
|
|
86
|
+
const failure = runAndRecord(actions, "profile", result, "created default backend profile");
|
|
87
|
+
if (failure !== undefined) {
|
|
88
|
+
return failure;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
skipped.push(`${PROFILE_PATH} already ready`);
|
|
93
|
+
}
|
|
94
|
+
if (force || !existsSync(join(projectDir, POLICY_OVERLAY_PATH))) {
|
|
95
|
+
const policyArgs = force ? ["init", "--force"] : ["init"];
|
|
96
|
+
const result = runPolicyCommand(policyArgs, { projectDir }, "ph");
|
|
97
|
+
const failure = runAndRecord(actions, "policy", result, "created backend policy overlay");
|
|
98
|
+
if (failure !== undefined) {
|
|
99
|
+
return failure;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
skipped.push(`${POLICY_OVERLAY_PATH} already exists`);
|
|
104
|
+
}
|
|
105
|
+
if (force || !existsSync(join(projectDir, PLAN_PATH))) {
|
|
106
|
+
const result = runPlanCommand(["--auto-accept"], { projectDir }, "ph");
|
|
107
|
+
const failure = runAndRecord(actions, "plan", result, "created and accepted backend workflow plan");
|
|
108
|
+
if (failure !== undefined) {
|
|
109
|
+
return failure;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
skipped.push(`${PLAN_PATH} already exists`);
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
status: 0,
|
|
117
|
+
stdout: [
|
|
118
|
+
"Persona Harness backend bootstrap complete.",
|
|
119
|
+
"",
|
|
120
|
+
"Actions:",
|
|
121
|
+
...(actions.length > 0 ? actions.map((action) => `- ${action}`) : ["- no changes needed"]),
|
|
122
|
+
"",
|
|
123
|
+
"Skipped:",
|
|
124
|
+
...(skipped.length > 0 ? skipped.map((item) => `- ${item}`) : ["- none"]),
|
|
125
|
+
"",
|
|
126
|
+
"Ready workflow files:",
|
|
127
|
+
`- ${PROFILE_PATH}`,
|
|
128
|
+
`- ${POLICY_OVERLAY_PATH}`,
|
|
129
|
+
`- ${PLAN_PATH}`,
|
|
130
|
+
`- ${IMPLEMENTATION_REPORT_PATH}`,
|
|
131
|
+
`- ${REVIEW_REPORT_PATH}`,
|
|
132
|
+
"",
|
|
133
|
+
"Next:",
|
|
134
|
+
"- Ask the AI agent to run `npx ph workflow implement` before implementation.",
|
|
135
|
+
"- Short TUI requests like `README.md 보고 구현해줘` should use the workflow rail, not ad hoc commands.",
|
|
136
|
+
"",
|
|
137
|
+
"Scope:",
|
|
138
|
+
"- workflow convenience only",
|
|
139
|
+
"- no generated app product-quality certification",
|
|
140
|
+
].join("\n") + "\n",
|
|
141
|
+
stderr: "",
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
export function runBootstrapCommand(args, options = {}, invocationName = "ph") {
|
|
145
|
+
const parsed = parseBootstrapArgs(args);
|
|
146
|
+
if (parsed.kind === "help") {
|
|
147
|
+
return { status: 0, stdout: `${bootstrapUsage(invocationName)}\n`, stderr: "" };
|
|
148
|
+
}
|
|
149
|
+
if (parsed.kind === "invalid") {
|
|
150
|
+
return { status: 1, stdout: "", stderr: `${parsed.message}\n\n${bootstrapUsage(invocationName)}\n` };
|
|
151
|
+
}
|
|
152
|
+
return runBackendBootstrap(options, parsed.force);
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/cli/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import process from "node:process";
|
|
3
3
|
import { createInterface } from "node:readline/promises";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { runBootstrapCommand } from "./bootstrap.js";
|
|
5
6
|
import { runInitCommand } from "./init.js";
|
|
6
7
|
import { runBearshell } from "./bearshell.js";
|
|
7
8
|
import { runHistoryCommand } from "./history.js";
|
|
@@ -21,6 +22,9 @@ export function runPersonaCli(args, options = {}) {
|
|
|
21
22
|
if (command === "init") {
|
|
22
23
|
return runInitCommand({ projectDir: options.cwd, packageRoot: options.packageRoot });
|
|
23
24
|
}
|
|
25
|
+
if (command === "bootstrap") {
|
|
26
|
+
return runBootstrapCommand(args.slice(1), { projectDir: options.cwd, packageRoot: options.packageRoot }, invocationName);
|
|
27
|
+
}
|
|
24
28
|
if (command === "intake") {
|
|
25
29
|
return runIntakeCommand(args.slice(1), { projectDir: options.cwd }, invocationName);
|
|
26
30
|
}
|
|
@@ -72,6 +76,7 @@ function personaCliUsage(invocationName) {
|
|
|
72
76
|
"",
|
|
73
77
|
"Commands:",
|
|
74
78
|
" init Install Persona Harness config into the current project.",
|
|
79
|
+
" bootstrap backend Fill missing backend profile/policy/plan workflow pieces.",
|
|
75
80
|
" intake Create a draft backend project profile for planning.",
|
|
76
81
|
" plan Create a blackbear architecture plan draft before implementation.",
|
|
77
82
|
" policy Create backend-only policy overlay files.",
|
|
@@ -80,6 +85,7 @@ function personaCliUsage(invocationName) {
|
|
|
80
85
|
" bearshell <command> [args...] Run a bounded command helper for repo inspection and smoke tests.",
|
|
81
86
|
" workflow check Report plan/report/evidence workflow status.",
|
|
82
87
|
" workflow implement Print the single AI-facing implementation rail.",
|
|
88
|
+
" workflow continue Print the accepted-plan continuation prompt.",
|
|
83
89
|
" workflow start implement Print the AI-facing implementation workflow rail.",
|
|
84
90
|
" workflow finish implement Block final answer until implementation workflow evidence is complete.",
|
|
85
91
|
" workflow guard implement Block implementation until plan workflow state is ready.",
|
|
@@ -92,6 +98,7 @@ function personaCliUsage(invocationName) {
|
|
|
92
98
|
"",
|
|
93
99
|
"Examples:",
|
|
94
100
|
` ${invocationName} init`,
|
|
101
|
+
` ${invocationName} bootstrap backend`,
|
|
95
102
|
` ${invocationName} intake`,
|
|
96
103
|
` ${invocationName} plan`,
|
|
97
104
|
` ${invocationName} policy init`,
|
|
@@ -100,6 +107,7 @@ function personaCliUsage(invocationName) {
|
|
|
100
107
|
` ${invocationName} bearshell npm test`,
|
|
101
108
|
` ${invocationName} workflow check`,
|
|
102
109
|
` ${invocationName} workflow implement`,
|
|
110
|
+
` ${invocationName} workflow continue`,
|
|
103
111
|
` ${invocationName} workflow start implement`,
|
|
104
112
|
` ${invocationName} workflow finish implement`,
|
|
105
113
|
` ${invocationName} workflow guard implement`,
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/plan-prompts.js
CHANGED
|
@@ -34,6 +34,7 @@ export function createImplementationPrompt() {
|
|
|
34
34
|
"",
|
|
35
35
|
"구현 중에는 Java/Spring Gradle backend Clean Code 범위를 유지하고, plan에 없는 frontend/infra/desktop 범위로 확장하지 마.",
|
|
36
36
|
"실행 가능한 Spring Boot 앱이면 `bootJar`를 비활성화하지 마. `gradle build` 출력에 `:bootJar SKIPPED`가 나오면 build 통과로 기록하지 말고, Spring Boot plugin / Gradle wrapper / JDK toolchain 호환성을 맞춰 다시 검증해줘.",
|
|
37
|
+
"가능하면 생성 프로젝트에 Gradle wrapper를 포함하고, 검증은 `./gradlew test`, `./gradlew build`, `./gradlew bootRun` 또는 Windows `gradlew.bat` 기준으로 기록해줘.",
|
|
37
38
|
"",
|
|
38
39
|
"구현 후 .persona/workflow/implementation-report.md를 채우고 `npx ph plan --report-filled implementation`을 실행해줘.",
|
|
39
40
|
"",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-prompts.js","sourceRoot":"","sources":["../../src/cli/plan-prompts.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,yIAAyI;QACzI,EAAE;QACF,8GAA8G;QAC9G,uGAAuG;QACvG,EAAE;QACF,4HAA4H;QAC5H,EAAE;QACF,6LAA6L;QAC7L,EAAE;QACF,gJAAgJ;QAChJ,EAAE;QACF,gEAAgE;QAChE,EAAE;QACF,8HAA8H;QAC9H,EAAE;QACF,6FAA6F;KAC9F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,mFAAmF;QACnF,EAAE;QACF,sLAAsL;QACtL,EAAE;QACF,8GAA8G;QAC9G,uGAAuG;QACvG,EAAE;QACF,6IAA6I;QAC7I,EAAE;QACF,6LAA6L;QAC7L,2JAA2J;QAC3J,EAAE;QACF,oGAAoG;QACpG,gLAAgL;QAChL,EAAE;QACF,0GAA0G;QAC1G,EAAE;QACF,mIAAmI;QACnI,EAAE;QACF,iMAAiM;QACjM,EAAE;QACF,6FAA6F;KAC9F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"plan-prompts.js","sourceRoot":"","sources":["../../src/cli/plan-prompts.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,yIAAyI;QACzI,EAAE;QACF,8GAA8G;QAC9G,uGAAuG;QACvG,EAAE;QACF,4HAA4H;QAC5H,EAAE;QACF,6LAA6L;QAC7L,EAAE;QACF,gJAAgJ;QAChJ,EAAE;QACF,gEAAgE;QAChE,EAAE;QACF,8HAA8H;QAC9H,EAAE;QACF,6FAA6F;KAC9F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,mFAAmF;QACnF,EAAE;QACF,sLAAsL;QACtL,EAAE;QACF,8GAA8G;QAC9G,uGAAuG;QACvG,EAAE;QACF,6IAA6I;QAC7I,EAAE;QACF,6LAA6L;QAC7L,2JAA2J;QAC3J,EAAE;QACF,oGAAoG;QACpG,gLAAgL;QAChL,sIAAsI;QACtI,EAAE;QACF,0GAA0G;QAC1G,EAAE;QACF,mIAAmI;QACnI,EAAE;QACF,iMAAiM;QACjM,EAAE;QACF,6FAA6F;KAC9F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
1
3
|
import { readBackendProjectProfileState } from "../phase0/project-profile.js";
|
|
2
|
-
import {
|
|
4
|
+
import { runResumeCommand } from "./plan-next.js";
|
|
5
|
+
import { failedGuardOutput, failedRunnerOutput, passedFinishOutput, passedGuardOutput, passedImplementOutput, passedStartOutput, uninitializedHarnessOutput, } from "./workflow-output.js";
|
|
3
6
|
import { formatWorkflowStatus, readWorkflowStatus } from "./workflow-status.js";
|
|
4
7
|
export function workflowUsage(invocation = "ph") {
|
|
5
8
|
return [
|
|
6
|
-
`Usage: ${invocation} workflow <check|implement|start implement|finish implement|guard implement|guard final>`,
|
|
9
|
+
`Usage: ${invocation} workflow <check|implement|continue|start implement|finish implement|guard implement|guard final>`,
|
|
7
10
|
"",
|
|
8
11
|
"Checks or guards Persona Harness workflow artifacts before or after implementation.",
|
|
9
12
|
"",
|
|
10
13
|
"Scope:",
|
|
11
14
|
"- workflow check is report-only",
|
|
12
15
|
"- workflow implement prints a single AI-facing implementation rail",
|
|
16
|
+
"- workflow continue prints the accepted-plan continuation prompt",
|
|
13
17
|
"- workflow start/finish are AI-facing workflow rails",
|
|
14
18
|
"- workflow guard uses strict exit codes for AI-facing workflow discipline",
|
|
15
19
|
"- no generated app quality certification",
|
|
@@ -22,6 +26,9 @@ function parseWorkflowArgs(args) {
|
|
|
22
26
|
if (args[0] === "implement") {
|
|
23
27
|
return args.length === 1 ? { kind: "implement" } : { kind: "invalid", message: "workflow implement does not accept extra arguments." };
|
|
24
28
|
}
|
|
29
|
+
if (args[0] === "continue") {
|
|
30
|
+
return args.length === 1 ? { kind: "continue" } : { kind: "invalid", message: "workflow continue does not accept extra arguments." };
|
|
31
|
+
}
|
|
25
32
|
if (args[0] === "guard") {
|
|
26
33
|
if (args.length !== 2) {
|
|
27
34
|
return { kind: "invalid", message: "workflow guard requires implement or final." };
|
|
@@ -58,9 +65,17 @@ function implementationGuardReasons(summary) {
|
|
|
58
65
|
const reasons = [];
|
|
59
66
|
const profileState = readBackendProjectProfileState(summary.projectDir);
|
|
60
67
|
if (profileState.status !== "ready") {
|
|
61
|
-
reasons.push(
|
|
68
|
+
reasons.push([
|
|
69
|
+
"Harness initialized but project profile is not ready.",
|
|
70
|
+
profileState.message,
|
|
71
|
+
"Fast path: run npx ph bootstrap backend.",
|
|
72
|
+
"Manual path: run npx ph intake --default backend or npx ph intake --interactive.",
|
|
73
|
+
].join(" "));
|
|
62
74
|
}
|
|
63
|
-
if (summary.plan
|
|
75
|
+
if (summary.plan === "missing") {
|
|
76
|
+
reasons.push(".persona/workflow/plan.md is missing. Run npx ph bootstrap backend or npx ph plan --auto-accept.");
|
|
77
|
+
}
|
|
78
|
+
else if (summary.plan !== "accepted") {
|
|
64
79
|
reasons.push(".persona/workflow/plan.md must be accepted");
|
|
65
80
|
}
|
|
66
81
|
if (summary.implementation === "missing") {
|
|
@@ -93,8 +108,14 @@ function finalGuardReasons(summary) {
|
|
|
93
108
|
}
|
|
94
109
|
return reasons;
|
|
95
110
|
}
|
|
111
|
+
function hasPersonaHarness(summary) {
|
|
112
|
+
return existsSync(join(summary.projectDir, ".persona"));
|
|
113
|
+
}
|
|
96
114
|
function runWorkflowGuard(guardKind, options) {
|
|
97
115
|
const summary = readWorkflowStatus(options.projectDir);
|
|
116
|
+
if (!hasPersonaHarness(summary)) {
|
|
117
|
+
return uninitializedHarnessOutput();
|
|
118
|
+
}
|
|
98
119
|
const reasons = guardKind === "implement" ? implementationGuardReasons(summary) : finalGuardReasons(summary);
|
|
99
120
|
if (reasons.length > 0) {
|
|
100
121
|
return failedGuardOutput(guardKind, reasons);
|
|
@@ -103,6 +124,9 @@ function runWorkflowGuard(guardKind, options) {
|
|
|
103
124
|
}
|
|
104
125
|
function runWorkflowStart(runnerKind, options) {
|
|
105
126
|
const summary = readWorkflowStatus(options.projectDir);
|
|
127
|
+
if (!hasPersonaHarness(summary)) {
|
|
128
|
+
return uninitializedHarnessOutput();
|
|
129
|
+
}
|
|
106
130
|
const reasons = implementationGuardReasons(summary);
|
|
107
131
|
if (reasons.length > 0) {
|
|
108
132
|
return failedRunnerOutput("start", runnerKind, reasons);
|
|
@@ -111,6 +135,9 @@ function runWorkflowStart(runnerKind, options) {
|
|
|
111
135
|
}
|
|
112
136
|
function runWorkflowImplement(options) {
|
|
113
137
|
const summary = readWorkflowStatus(options.projectDir);
|
|
138
|
+
if (!hasPersonaHarness(summary)) {
|
|
139
|
+
return uninitializedHarnessOutput();
|
|
140
|
+
}
|
|
114
141
|
const reasons = implementationGuardReasons(summary);
|
|
115
142
|
if (reasons.length > 0) {
|
|
116
143
|
return failedRunnerOutput("implement", "implement", reasons);
|
|
@@ -119,6 +146,9 @@ function runWorkflowImplement(options) {
|
|
|
119
146
|
}
|
|
120
147
|
function runWorkflowFinish(runnerKind, options) {
|
|
121
148
|
const summary = readWorkflowStatus(options.projectDir);
|
|
149
|
+
if (!hasPersonaHarness(summary)) {
|
|
150
|
+
return uninitializedHarnessOutput();
|
|
151
|
+
}
|
|
122
152
|
const reasons = finalGuardReasons(summary);
|
|
123
153
|
if (reasons.length > 0) {
|
|
124
154
|
return failedRunnerOutput("finish", runnerKind, reasons);
|
|
@@ -139,6 +169,9 @@ export function runWorkflowCommand(args, options = {}, invocationName = "ph") {
|
|
|
139
169
|
if (parsed.kind === "implement") {
|
|
140
170
|
return runWorkflowImplement(options);
|
|
141
171
|
}
|
|
172
|
+
if (parsed.kind === "continue") {
|
|
173
|
+
return runResumeCommand(options);
|
|
174
|
+
}
|
|
142
175
|
if (parsed.kind === "start") {
|
|
143
176
|
return runWorkflowStart(parsed.runnerKind, options);
|
|
144
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-command.js","sourceRoot":"","sources":["../../src/cli/workflow-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow-command.js","sourceRoot":"","sources":["../../src/cli/workflow-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { CliRunResult } from "./bearshell.js";
|
|
|
2
2
|
export type WorkflowGuardKind = "implement" | "final";
|
|
3
3
|
export type WorkflowRunnerKind = "implement";
|
|
4
4
|
export type WorkflowRunnerAction = "implement" | "start" | "finish";
|
|
5
|
+
export declare function uninitializedHarnessOutput(): CliRunResult;
|
|
5
6
|
export declare function failedGuardOutput(guardKind: WorkflowGuardKind, reasons: readonly string[]): CliRunResult;
|
|
6
7
|
export declare function failedRunnerOutput(action: WorkflowRunnerAction, runnerKind: WorkflowRunnerKind, reasons: readonly string[]): CliRunResult;
|
|
7
8
|
export declare function passedStartOutput(runnerKind: WorkflowRunnerKind): CliRunResult;
|
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
export function uninitializedHarnessOutput() {
|
|
2
|
+
return {
|
|
3
|
+
status: 0,
|
|
4
|
+
stdout: [
|
|
5
|
+
"Persona Harness not initialized.",
|
|
6
|
+
"",
|
|
7
|
+
"Implementation is not blocked.",
|
|
8
|
+
"",
|
|
9
|
+
"This project does not have a `.persona/` directory, so Persona Harness workflow gates are inactive.",
|
|
10
|
+
"Continue normal implementation if the user did not opt into Persona Harness.",
|
|
11
|
+
"",
|
|
12
|
+
"To opt in:",
|
|
13
|
+
"- `npx ph init`",
|
|
14
|
+
"- `npx ph bootstrap backend`",
|
|
15
|
+
"- then run `npx ph workflow implement` again",
|
|
16
|
+
"",
|
|
17
|
+
"Scope:",
|
|
18
|
+
"- advisory only",
|
|
19
|
+
"- no generated app product-quality certification",
|
|
20
|
+
].join("\n") + "\n",
|
|
21
|
+
stderr: "",
|
|
22
|
+
};
|
|
23
|
+
}
|
|
1
24
|
export function failedGuardOutput(guardKind, reasons) {
|
|
2
25
|
return {
|
|
3
26
|
status: 1,
|
|
@@ -88,13 +111,15 @@ export function passedImplementOutput() {
|
|
|
88
111
|
"1. Implement from the accepted plan.",
|
|
89
112
|
"2. After Java files are generated or changed, run `npx ph bearshell --shell 'find src/main/java src/test/java -name \"*.java\" 2>/dev/null | sort'` so Persona Harness can discover generated Java roles.",
|
|
90
113
|
"3. If Persona Harness adds a Java Role Read Follow-up, read those representative Java files before continuing.",
|
|
91
|
-
"4.
|
|
92
|
-
"5.
|
|
93
|
-
"6.
|
|
94
|
-
"7. Fill `.persona/workflow/
|
|
95
|
-
"8. Run `npx ph plan --report-filled
|
|
96
|
-
"9.
|
|
97
|
-
"10.
|
|
114
|
+
"4. Prefer Gradle wrapper verification for generated Spring apps: `./gradlew test`, `./gradlew build`, and `./gradlew bootRun`; on Windows use `gradlew.bat`.",
|
|
115
|
+
"5. If Gradle wrapper files are missing, record why and do not treat missing system Gradle as generated app failure.",
|
|
116
|
+
"6. Use `npx ph bearshell` for shell verification.",
|
|
117
|
+
"7. Fill `.persona/workflow/implementation-report.md` with README read method, README ranges read, plan read method, plan ranges read, and Java role discovery/read evidence.",
|
|
118
|
+
"8. Run `npx ph plan --report-filled implementation`.",
|
|
119
|
+
"9. Fill `.persona/workflow/review-report.md` after review/manual QA.",
|
|
120
|
+
"10. Run `npx ph plan --report-filled review`.",
|
|
121
|
+
"11. Run `npx ph workflow finish implement`.",
|
|
122
|
+
"12. Do not give the final answer until `npx ph workflow finish implement` passes.",
|
|
98
123
|
"",
|
|
99
124
|
"Scope:",
|
|
100
125
|
"- AI-facing workflow rail",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-output.js","sourceRoot":"","sources":["../../src/cli/workflow-output.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,iBAAiB,CAAC,SAA4B,EAAE,OAA0B;IACxF,OAAO;QACL,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,EAAE;QACV,MAAM,EAAE;YACN,0BAA0B,SAAS,EAAE;YACrC,EAAE;YACF,iBAAiB;YACjB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;YACzC,EAAE;YACF,wFAAwF;SACzF,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;KACpB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAA4B,EAC5B,UAA8B,EAC9B,OAA0B;IAE1B,OAAO;QACL,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,EAAE;QACV,MAAM,EAAE;YACN,YAAY,MAAM,YAAY,UAAU,EAAE;YAC1C,EAAE;YACF,iBAAiB;YACjB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;YACzC,EAAE;YACF,6FAA6F;SAC9F,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;KACpB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAA8B;IAC9D,OAAO;QACL,MAAM,EAAE,CAAC;QACT,MAAM,EAAE;YACN,mCAAmC,UAAU,EAAE;YAC/C,EAAE;YACF,oBAAoB;YACpB,EAAE;YACF,6BAA6B;YAC7B,iJAAiJ;YACjJ,EAAE;YACF,mCAAmC;YACnC,8BAA8B;YAC9B,8GAA8G;YAC9G,wGAAwG;YACxG,wFAAwF;YACxF,sCAAsC;YACtC,mDAAmD;YACnD,uDAAuD;YACvD,sDAAsD;YACtD,sEAAsE;YACtE,+CAA+C;YAC/C,6CAA6C;YAC7C,mFAAmF;YACnF,EAAE;YACF,QAAQ;YACR,2BAA2B;YAC3B,kDAAkD;SACnD,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;QACnB,MAAM,EAAE,EAAE;KACX,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,MAAM,EAAE,CAAC;QACT,MAAM,EAAE;YACN,oCAAoC;YACpC,EAAE;YACF,kCAAkC;YAClC,EAAE;YACF,2FAA2F;YAC3F,EAAE;YACF,kDAAkD;YAClD,iDAAiD;YACjD,6DAA6D;YAC7D,oHAAoH;YACpH,qEAAqE;YACrE,+EAA+E;YAC/E,EAAE;YACF,mBAAmB;YACnB,aAAa;YACb,kCAAkC;YAClC,qBAAqB;YACrB,6BAA6B;YAC7B,EAAE;YACF,qGAAqG;YACrG,4GAA4G;YAC5G,EAAE;YACF,2BAA2B;YAC3B,sCAAsC;YACtC,2MAA2M;YAC3M,gHAAgH;YAChH,mDAAmD;YACnD,8KAA8K;YAC9K,sDAAsD;YACtD,sEAAsE;YACtE
|
|
1
|
+
{"version":3,"file":"workflow-output.js","sourceRoot":"","sources":["../../src/cli/workflow-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -132,7 +132,7 @@ function commandDiscipline(projectDir, implementationStatus, reviewStatus) {
|
|
|
132
132
|
}
|
|
133
133
|
if (hasBearshell) {
|
|
134
134
|
const warnings = [
|
|
135
|
-
...(hasRawShell ? ["raw shell environment probe observed"] : []),
|
|
135
|
+
...(hasRawShell ? ["non-blocking raw shell environment probe observed; final verification is acceptable only when rerun through `npx ph bearshell`"] : []),
|
|
136
136
|
];
|
|
137
137
|
const notes = [
|
|
138
138
|
...(hasDirectRulesRead ? ["direct `.persona/rules` read observed"] : []),
|
|
@@ -161,26 +161,22 @@ function commandDiscipline(projectDir, implementationStatus, reviewStatus) {
|
|
|
161
161
|
};
|
|
162
162
|
}
|
|
163
163
|
function nextAction(summary) {
|
|
164
|
-
if (summary.plan === "missing")
|
|
164
|
+
if (summary.plan === "missing")
|
|
165
165
|
return "run `npx ph plan`";
|
|
166
|
-
}
|
|
167
166
|
if (summary.plan !== "accepted") {
|
|
168
167
|
return "review plan, then run `npx ph plan --accept` or `npx ph plan --revise`";
|
|
169
168
|
}
|
|
170
169
|
if (summary.implementation !== "filled") {
|
|
171
170
|
return "run `npx ph workflow implement`, implement, fill implementation report, then run `npx ph plan --report-filled implementation`";
|
|
172
171
|
}
|
|
173
|
-
if (summary.review !== "filled")
|
|
172
|
+
if (summary.review !== "filled")
|
|
174
173
|
return "fill review report and run `npx ph plan --report-filled review`";
|
|
175
|
-
|
|
176
|
-
if (summary.commandDisciplineBlocking) {
|
|
174
|
+
if (summary.commandDisciplineBlocking)
|
|
177
175
|
return "rerun final verification through `npx ph bearshell`";
|
|
178
|
-
|
|
179
|
-
if (summary.readCoverageBlocking) {
|
|
176
|
+
if (summary.readCoverageBlocking)
|
|
180
177
|
return "record README ranges read in `.persona/workflow/implementation-report.md`";
|
|
181
|
-
}
|
|
182
178
|
if (summary.commandDisciplineFinding === "WARN") {
|
|
183
|
-
return "review workflow
|
|
179
|
+
return "review non-blocking workflow notes, then archive completed workflow if acceptable";
|
|
184
180
|
}
|
|
185
181
|
return "archive completed workflow with `npx ph history --id <run-id>`";
|
|
186
182
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-status.js","sourceRoot":"","sources":["../../src/cli/workflow-status.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"workflow-status.js","sourceRoot":"","sources":["../../src/cli/workflow-status.ts"],"names":[],"mappings":"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"}
|
package/dist/phase0/injection.js
CHANGED
|
@@ -53,8 +53,8 @@ export function createInjectionBlock(targetFile, projectDir = process.cwd()) {
|
|
|
53
53
|
? [
|
|
54
54
|
"프로젝트 프로필 상태:",
|
|
55
55
|
`- ${projectProfileState.message}`,
|
|
56
|
-
"- 구현 요청을
|
|
57
|
-
"- 프로필이 ready가 되기 전에는
|
|
56
|
+
"- `.persona`가 있는 하네스 프로젝트에서 구현 요청을 받았다면 먼저 `npx ph bootstrap backend` 또는 `npx ph intake --default backend --force`로 프로필을 확정한다.",
|
|
57
|
+
"- 프로필이 ready가 되기 전에는 하네스 workflow 구현 레일을 시작하지 않는다.",
|
|
58
58
|
"",
|
|
59
59
|
]
|
|
60
60
|
: []),
|
|
@@ -81,7 +81,8 @@ export function createInjectionBlock(targetFile, projectDir = process.cwd()) {
|
|
|
81
81
|
"이 Phase 0 블록은 .persona/rules 정본과 최소 frontmatter/glob/scenario catalog layer를 읽는 MVP rule-loader 결과이며, 아직 full rule engine은 아니다.",
|
|
82
82
|
"코드 구조 분석이나 변경 영향 파악이 필요하면 raw file read보다 codegraph MCP를 먼저 사용한다. codegraph를 사용할 수 없을 때만 필요한 파일 범위를 직접 읽고 그 이유를 남긴다.",
|
|
83
83
|
"repo inspection, CLI smoke test, 큰 출력 확인은 `ph bearshell`을 우선 사용한다.",
|
|
84
|
-
"프로젝트
|
|
84
|
+
"`.persona`가 있는데 프로젝트 프로필/정책/계획이 비어 있으면 구현하지 말고 먼저 `npx ph bootstrap backend`를 실행한다.",
|
|
85
|
+
"`.persona`가 없는 일반 프로젝트에는 Persona Harness workflow를 강제하지 않는다. 하네스를 쓰려면 사용자가 `npx ph init`으로 opt in한다.",
|
|
85
86
|
"짧은 구현 지시(예: '플랜 보고 구현해줘', '계획대로 해줘', '이제 구현해줘')를 받으면 먼저 `npx ph workflow implement`를 실행하고, 그 단일 레일을 따른다.",
|
|
86
87
|
"`npx ph workflow implement`가 실패하면 구현하지 말고 plan/status 문제를 사용자에게 보고한다.",
|
|
87
88
|
"긴 README/plan은 `npx ph bearshell --shell 'sed -n \"1,220p\" <file>'`처럼 범위를 나눠 끝까지 읽는다.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injection.js","sourceRoot":"","sources":["../../src/phase0/injection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACxG,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAA;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAElG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,MAAM,qBAAqB,GAA8C;IACvE,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,EAAE;CAChB,CAAA;AAED,SAAS,cAAc,CAAC,QAAkB;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;IACjF,MAAM,YAAY,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAA;IAClC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAA;IACpE,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACjD,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAA;IAClE,MAAM,QAAQ,GAAG,YAAY;QAC3B,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC;QAC7B,CAAC,CAAC,iBAAiB;YACjB,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAA;IAClE,MAAM,mBAAmB,GAAG,YAAY,IAAI,iBAAiB,IAAI,QAAQ,KAAK,aAAa,CAAA;IAC3F,MAAM,cAAc,GAAG,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;IACnE,MAAM,WAAW,GAAG,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACrG,MAAM,qBAAqB,GAAG,mBAAmB,CAAC,CAAC,CAAC,gCAAgC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACrG,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,CAAC,CAAC,8BAA8B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACxG,MAAM,aAAa,GAAG,mBAAmB;QACvC,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC;QACtC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAA;IACzD,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1D,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;QACpB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;QAC5B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;QAC5B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;KACjC,CAAC,CAAC,CAAA;IACH,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAA;IACnH,MAAM,KAAK,GAAG;QACZ,6BAA6B;QAC7B,EAAE;QACF,UAAU,UAAU,EAAE;QACtB,UAAU,QAAQ,EAAE;QACpB,EAAE;QACF,GAAG,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,mBAAmB,KAAK,SAAS,IAAI,mBAAmB,CAAC,MAAM,KAAK,OAAO;YAC7E,CAAC,CAAC;gBACE,cAAc;gBACd,KAAK,mBAAmB,CAAC,OAAO,EAAE;gBAClC,
|
|
1
|
+
{"version":3,"file":"injection.js","sourceRoot":"","sources":["../../src/phase0/injection.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,9 @@ This candidate is a hotfix for installed-package clean runs where generated Java
|
|
|
35
35
|
| `npm run check:injection-value` | pass: current window 3/3, expected decision `continue-java-mvp` |
|
|
36
36
|
| `npm pack --dry-run` | pass: `persona-harness-0.3.2-alpha.2.tgz`, 222 files, 230.8 kB package size, 889.4 kB unpacked size |
|
|
37
37
|
| `npm publish --dry-run --tag alpha` | pass: dry-run only for `persona-harness@0.3.2-alpha.2` |
|
|
38
|
+
| `npm publish --tag alpha` | pass: `persona-harness@0.3.2-alpha.2` |
|
|
39
|
+
| `npm view persona-harness@alpha version` | pass: `0.3.2-alpha.2` |
|
|
40
|
+
| `npm dist-tag add persona-harness@0.3.2-alpha.2 latest` | blocked: npm OTP required |
|
|
38
41
|
|
|
39
42
|
## Clean Install Smoke
|
|
40
43
|
|
|
@@ -73,9 +76,9 @@ Expected:
|
|
|
73
76
|
- Full TDD workflow.
|
|
74
77
|
- `ph bearshell` sandboxing.
|
|
75
78
|
|
|
76
|
-
##
|
|
79
|
+
## Release Decision
|
|
77
80
|
|
|
78
|
-
|
|
81
|
+
`persona-harness@0.3.2-alpha.2` is published under the `alpha` dist-tag.
|
|
79
82
|
|
|
80
83
|
Local tarball install smoke passed in a repo-external temporary project:
|
|
81
84
|
|
|
@@ -84,3 +87,9 @@ Local tarball install smoke passed in a repo-external temporary project:
|
|
|
84
87
|
- `npx ph plan --auto-accept`: created accepted workflow plan
|
|
85
88
|
- `npx ph workflow implement`: printed Java role discovery command
|
|
86
89
|
- `npx ph workflow implement`: printed Java role discovery/read evidence guidance
|
|
90
|
+
|
|
91
|
+
Registry status after publish:
|
|
92
|
+
|
|
93
|
+
- `alpha`: `0.3.2-alpha.2`
|
|
94
|
+
- `latest`: still `0.3.2-alpha.1`
|
|
95
|
+
- `latest` sync is pending OTP authorization.
|
|
@@ -57,6 +57,12 @@ npm pack --dry-run
|
|
|
57
57
|
npm publish --dry-run --tag alpha
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
+
Publish result:
|
|
61
|
+
|
|
62
|
+
- `npm publish --tag alpha`: passed for `persona-harness@0.3.2-alpha.2`.
|
|
63
|
+
- `npm view persona-harness@alpha version`: `0.3.2-alpha.2`.
|
|
64
|
+
- `npm dist-tag add persona-harness@0.3.2-alpha.2 latest`: blocked by npm OTP requirement, so `latest` remains `0.3.2-alpha.1` until OTP authorization is provided.
|
|
65
|
+
|
|
60
66
|
Expected clean-run evidence:
|
|
61
67
|
|
|
62
68
|
- `role-discovery` entries for generated Java files.
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# v0.3.2-alpha.3 Clean Short Request Review
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Verify the current local package candidate after `feat(workflow): add conditional backend bootstrap` in a clean external-style Java/Spring backend project.
|
|
6
|
+
|
|
7
|
+
The specific question was whether a short OpenCode request:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
README.md 보고 구현해줘
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
causes the agent to enter the Persona Harness workflow rail by using `ph bootstrap backend` or `ph workflow implement`.
|
|
14
|
+
|
|
15
|
+
## Candidate Under Review
|
|
16
|
+
|
|
17
|
+
- Repo: `/Users/yongtae/Desktop/persona-harness`
|
|
18
|
+
- HEAD: `2cff9d2 feat(workflow): add conditional backend bootstrap`
|
|
19
|
+
- Package version in `package.json`: `0.3.2-alpha.2`
|
|
20
|
+
- Review target: local tarball from current HEAD, treated as the `0.3.2-alpha.3` candidate code
|
|
21
|
+
- OpenCode: `1.17.7`
|
|
22
|
+
- Model: `openai/gpt-5.4-mini-fast`
|
|
23
|
+
|
|
24
|
+
## Clean Project Setup
|
|
25
|
+
|
|
26
|
+
Run root:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
/Users/yongtae/Desktop/persona-clean-short-request-20260623-105926
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Two scenarios were prepared:
|
|
33
|
+
|
|
34
|
+
1. `no-persona`
|
|
35
|
+
- package installed
|
|
36
|
+
- no `.persona/`
|
|
37
|
+
- no OpenCode plugin config
|
|
38
|
+
2. `persona-missing-profile`
|
|
39
|
+
- package installed
|
|
40
|
+
- `.opencode/opencode.json` points to installed Persona Harness plugin
|
|
41
|
+
- `.persona/harness.jsonc` and `.persona/rules` exist
|
|
42
|
+
- `.persona/project-profile.jsonc`, `.persona/policies`, `.persona/workflow`, and `.persona/evidence` were removed before the run
|
|
43
|
+
|
|
44
|
+
README fixture:
|
|
45
|
+
|
|
46
|
+
- Equipment Rental API
|
|
47
|
+
- Java/Spring Boot Gradle backend
|
|
48
|
+
- equipment registration/listing
|
|
49
|
+
- member registration
|
|
50
|
+
- equipment rental/return
|
|
51
|
+
- unavailable/insufficient quantity failure
|
|
52
|
+
- borrower-only return
|
|
53
|
+
- layered backend architecture expectations
|
|
54
|
+
|
|
55
|
+
## CLI Baseline
|
|
56
|
+
|
|
57
|
+
Before OpenCode:
|
|
58
|
+
|
|
59
|
+
| Scenario | Command | Result |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| `no-persona` | `npx ph workflow implement` | PASS/advisory, implementation not blocked |
|
|
62
|
+
| `persona-missing-profile` | `npx ph workflow implement` | FAIL with `npx ph bootstrap backend` fast path |
|
|
63
|
+
|
|
64
|
+
This matches the intended conditional gate:
|
|
65
|
+
|
|
66
|
+
- No `.persona/`: do not force Persona Harness.
|
|
67
|
+
- `.persona/` exists but profile/plan is missing: require bootstrap/intake before implementation.
|
|
68
|
+
|
|
69
|
+
## OpenCode Run
|
|
70
|
+
|
|
71
|
+
Command:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
opencode run \
|
|
75
|
+
--dir /Users/yongtae/Desktop/persona-clean-short-request-20260623-105926/persona-missing-profile \
|
|
76
|
+
--model openai/gpt-5.4-mini-fast \
|
|
77
|
+
--dangerously-skip-permissions \
|
|
78
|
+
"README.md 보고 구현해줘"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Observed sequence:
|
|
82
|
+
|
|
83
|
+
1. OpenCode read `README.md`.
|
|
84
|
+
2. OpenCode ran `npx ph workflow implement`.
|
|
85
|
+
3. The command failed because profile/plan/report artifacts were missing.
|
|
86
|
+
4. OpenCode interpreted the failure correctly and ran `npx ph bootstrap backend`.
|
|
87
|
+
5. Bootstrap created:
|
|
88
|
+
- `.persona/project-profile.jsonc`
|
|
89
|
+
- `.persona/policies/overlay.jsonc`
|
|
90
|
+
- `.persona/workflow/plan.md`
|
|
91
|
+
- `.persona/workflow/implementation-report.md`
|
|
92
|
+
- `.persona/workflow/review-report.md`
|
|
93
|
+
6. OpenCode implemented a Spring Boot Gradle app.
|
|
94
|
+
7. OpenCode ran Gradle test/build and HTTP smoke.
|
|
95
|
+
8. OpenCode filled implementation/review reports.
|
|
96
|
+
9. `npx ph workflow finish implement` eventually passed.
|
|
97
|
+
|
|
98
|
+
## Generated Structure
|
|
99
|
+
|
|
100
|
+
Main generated files followed the expected shape:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
src/main/java/com/example/equipmentrental
|
|
104
|
+
├── EquipmentRentalApplication.java
|
|
105
|
+
├── equipment
|
|
106
|
+
│ ├── application
|
|
107
|
+
│ ├── domain
|
|
108
|
+
│ ├── infrastructure
|
|
109
|
+
│ └── presentation
|
|
110
|
+
├── global
|
|
111
|
+
│ └── exception
|
|
112
|
+
├── member
|
|
113
|
+
│ ├── application
|
|
114
|
+
│ ├── domain
|
|
115
|
+
│ ├── infrastructure
|
|
116
|
+
│ └── presentation
|
|
117
|
+
└── rental
|
|
118
|
+
├── application
|
|
119
|
+
├── domain
|
|
120
|
+
├── infrastructure
|
|
121
|
+
└── presentation
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Notable generated code properties:
|
|
125
|
+
|
|
126
|
+
- Gradle only: `build.gradle`, `settings.gradle`, `gradlew`, `gradlew.bat`; no `pom.xml`.
|
|
127
|
+
- Repository ports exist in domain packages:
|
|
128
|
+
- `EquipmentRepository`
|
|
129
|
+
- `MemberRepository`
|
|
130
|
+
- `LoanRepository`
|
|
131
|
+
- Repository adapters exist in infrastructure packages:
|
|
132
|
+
- `JdbcEquipmentRepository`
|
|
133
|
+
- `JdbcMemberRepository`
|
|
134
|
+
- `JdbcLoanRepository`
|
|
135
|
+
- Application services depend on domain repository ports.
|
|
136
|
+
- Services do not directly own `Map`, `AtomicLong`, `nextId`, or `idCounter`.
|
|
137
|
+
- Domain models are classes with behavior, not records:
|
|
138
|
+
- `Equipment.canLoan()`
|
|
139
|
+
- `Equipment.loanOne()`
|
|
140
|
+
- `Equipment.returnOne()`
|
|
141
|
+
- `Loan.isOwnedBy(...)`
|
|
142
|
+
- `Loan.markReturned(...)`
|
|
143
|
+
- Request/response DTOs are separated from domain classes.
|
|
144
|
+
|
|
145
|
+
## Verification
|
|
146
|
+
|
|
147
|
+
OpenCode run:
|
|
148
|
+
|
|
149
|
+
- `./gradlew test`: PASS
|
|
150
|
+
- `./gradlew build`: PASS
|
|
151
|
+
- HTTP smoke:
|
|
152
|
+
- create equipment: PASS
|
|
153
|
+
- create member: PASS
|
|
154
|
+
- create loan: PASS
|
|
155
|
+
- duplicate loan conflict: `409`
|
|
156
|
+
- return loan: PASS
|
|
157
|
+
|
|
158
|
+
Independent recheck after OpenCode:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npx ph bearshell --shell './gradlew test build'
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Result:
|
|
165
|
+
|
|
166
|
+
- PASS
|
|
167
|
+
- `BUILD SUCCESSFUL`
|
|
168
|
+
|
|
169
|
+
Independent HTTP smoke through `ph bearshell`:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
npx ph bearshell --shell '<bootRun on port 18081 plus curl happy/conflict smoke>'
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Result:
|
|
176
|
+
|
|
177
|
+
- create equipment: JSON response with `id=1`
|
|
178
|
+
- create member: JSON response with `id=1`
|
|
179
|
+
- create loan: JSON response with `returned=false`
|
|
180
|
+
- duplicate loan: `409`
|
|
181
|
+
|
|
182
|
+
Backend shape report:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
npx ph review backend-shape
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Result:
|
|
189
|
+
|
|
190
|
+
- `Gradle only`: PASS
|
|
191
|
+
- `Layer/package structure`: PASS
|
|
192
|
+
- `Domain repository port`: PASS
|
|
193
|
+
- `Infrastructure repository adapter`: PASS
|
|
194
|
+
- `Service storage/id sequence ownership`: PASS
|
|
195
|
+
- `Domain behavior`: PASS
|
|
196
|
+
- `DTO boundary`: PASS
|
|
197
|
+
- `bootJar`: PASS
|
|
198
|
+
- `Verification report`: PASS
|
|
199
|
+
|
|
200
|
+
Workflow check:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
npx ph workflow check
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Result:
|
|
207
|
+
|
|
208
|
+
- `Workflow status: PASS`
|
|
209
|
+
- plan accepted
|
|
210
|
+
- implementation report filled
|
|
211
|
+
- review report filled
|
|
212
|
+
- evidence present
|
|
213
|
+
- README read coverage observed
|
|
214
|
+
- bearshell command discipline observed by report
|
|
215
|
+
|
|
216
|
+
## Evidence
|
|
217
|
+
|
|
218
|
+
Raw evidence files were generated:
|
|
219
|
+
|
|
220
|
+
```text
|
|
221
|
+
.persona/evidence/phase0
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Count:
|
|
225
|
+
|
|
226
|
+
```text
|
|
227
|
+
13
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Observed target roles include:
|
|
231
|
+
|
|
232
|
+
- `README.md`
|
|
233
|
+
- `RentalController.java`
|
|
234
|
+
- `ReturnLoanRequest.java`
|
|
235
|
+
- `EquipmentRentalApiTest.java`
|
|
236
|
+
- `JdbcMemberRepository.java`
|
|
237
|
+
|
|
238
|
+
Representative evidence confirms Java role injection:
|
|
239
|
+
|
|
240
|
+
- `RentalController.java` received controller rules.
|
|
241
|
+
- `JdbcMemberRepository.java` received repository-related rules.
|
|
242
|
+
- shared `programming` skill was selected for Java targets.
|
|
243
|
+
|
|
244
|
+
## Decision
|
|
245
|
+
|
|
246
|
+
This is a positive `0.3.2-alpha.3` candidate signal for the narrow goal:
|
|
247
|
+
|
|
248
|
+
```text
|
|
249
|
+
Short request -> ph workflow implement -> ph bootstrap backend -> implementation rail
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
The bootstrap/profile gate behavior worked in a clean external-style project, and the generated Java/Spring backend shape was materially aligned with the current backend Clean Code target.
|
|
253
|
+
|
|
254
|
+
## Known Gaps
|
|
255
|
+
|
|
256
|
+
This run is not a full product-quality proof.
|
|
257
|
+
|
|
258
|
+
Gaps observed:
|
|
259
|
+
|
|
260
|
+
1. OpenCode directly read `.persona/rules` early in the run.
|
|
261
|
+
- This violates the preferred guidance to use the injection summary and workflow artifacts instead of direct rule reads.
|
|
262
|
+
- It did not break the run, but it is still workflow noise.
|
|
263
|
+
2. OpenCode initially used raw shell for Gradle and HTTP smoke.
|
|
264
|
+
- `ph workflow finish implement` caught the raw shell issue.
|
|
265
|
+
- The agent then re-ran part of the verification through `ph bearshell` and edited reports.
|
|
266
|
+
- The gate can still be satisfied by report text, so future hardening should reduce report-only self-attestation risk.
|
|
267
|
+
3. The `no-persona` scenario was verified only at CLI level.
|
|
268
|
+
- This is expected because without `.opencode/opencode.json`, the plugin is not active.
|
|
269
|
+
- The behavior remains correct: no `.persona/` means Persona Harness does not force implementation gates.
|
|
270
|
+
4. Package version was not bumped during this review.
|
|
271
|
+
- Current `package.json` remains `0.3.2-alpha.2`.
|
|
272
|
+
- Publishing `0.3.2-alpha.3` still requires an explicit version bump and publish step.
|
|
273
|
+
|
|
274
|
+
## Next
|
|
275
|
+
|
|
276
|
+
Recommended next step:
|
|
277
|
+
|
|
278
|
+
1. Bump package version to `0.3.2-alpha.3`.
|
|
279
|
+
2. Update release notes/changelog with:
|
|
280
|
+
- conditional `.persona` gate
|
|
281
|
+
- `ph bootstrap backend`
|
|
282
|
+
- clean short-request verification result
|
|
283
|
+
- known gaps around direct rule reads and report self-attestation
|
|
284
|
+
3. Publish with `npm publish --tag alpha` when ready.
|
|
285
|
+
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# v0.3.2-alpha.3 Release Notes
|
|
2
|
+
|
|
3
|
+
## Version
|
|
4
|
+
|
|
5
|
+
`v0.3.2-alpha.3`
|
|
6
|
+
|
|
7
|
+
## Dist Tag
|
|
8
|
+
|
|
9
|
+
`alpha`
|
|
10
|
+
|
|
11
|
+
During the alpha pilot, `latest` may also point to the current alpha build to avoid stale default installs. This is not a stable support claim.
|
|
12
|
+
|
|
13
|
+
## npm Package
|
|
14
|
+
|
|
15
|
+
`persona-harness@0.3.2-alpha.3`
|
|
16
|
+
|
|
17
|
+
## Summary
|
|
18
|
+
|
|
19
|
+
This alpha adds the conditional backend bootstrap flow for short OpenCode/TUI requests. A project that has not opted into Persona Harness is no longer blocked, while a project with `.persona/` but missing profile/plan/workflow artifacts now has a single fast path:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx ph bootstrap backend
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The clean short-request review confirmed that a plain request like:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
README.md 보고 구현해줘
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
can route through `npx ph workflow implement`, recover by running `npx ph bootstrap backend`, generate a Java/Spring Gradle backend, and finish the workflow rail.
|
|
32
|
+
|
|
33
|
+
## What Changed
|
|
34
|
+
|
|
35
|
+
- Added `ph bootstrap backend`.
|
|
36
|
+
- Changed `ph workflow implement` so no `.persona/` means advisory PASS, not a blocking failure.
|
|
37
|
+
- Changed initialized harness behavior so `.persona/` plus missing profile/plan/report artifacts directs the agent to `npx ph bootstrap backend`.
|
|
38
|
+
- Updated injection guidance so workflow gates apply only after `.persona/` opt-in.
|
|
39
|
+
- Included the previously unreleased `ph workflow continue` alias and Gradle wrapper guidance improvements.
|
|
40
|
+
- Added clean short-request review evidence in `docs/current/release/v0.3.2-alpha.3-clean-short-request-review.md`.
|
|
41
|
+
|
|
42
|
+
## Verification
|
|
43
|
+
|
|
44
|
+
Pre-publish commands:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm test
|
|
48
|
+
npm run typecheck
|
|
49
|
+
npm run build
|
|
50
|
+
npm run report:rules
|
|
51
|
+
npm run check:scope:strict
|
|
52
|
+
npm run check:injection-value
|
|
53
|
+
npm pack --dry-run
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Clean project review:
|
|
57
|
+
|
|
58
|
+
- Local tarball install into a clean external-style project.
|
|
59
|
+
- OpenCode `1.17.7`.
|
|
60
|
+
- Model: `openai/gpt-5.4-mini-fast`.
|
|
61
|
+
- Prompt: `README.md 보고 구현해줘`.
|
|
62
|
+
|
|
63
|
+
Observed:
|
|
64
|
+
|
|
65
|
+
- OpenCode ran `npx ph workflow implement`.
|
|
66
|
+
- OpenCode then ran `npx ph bootstrap backend`.
|
|
67
|
+
- Generated Java/Spring app passed Gradle test/build.
|
|
68
|
+
- HTTP happy/failure smoke passed.
|
|
69
|
+
- `npx ph workflow finish implement` eventually passed.
|
|
70
|
+
- `npx ph review backend-shape` reported PASS across the backend shape criteria.
|
|
71
|
+
|
|
72
|
+
## Supported Scope
|
|
73
|
+
|
|
74
|
+
- Java/Spring backend MVP.
|
|
75
|
+
- Published npm alpha install path.
|
|
76
|
+
- OpenCode plugin workflow.
|
|
77
|
+
- AI-facing profile/plan/workflow bootstrap.
|
|
78
|
+
- Report-only backend shape and workflow diagnostics.
|
|
79
|
+
|
|
80
|
+
## Not Supported
|
|
81
|
+
|
|
82
|
+
- Generated app product-quality certification.
|
|
83
|
+
- Rule compliance enforcement.
|
|
84
|
+
- AST/linter/build-failure gates for rule compliance.
|
|
85
|
+
- Frontend, infra, desktop, or full TDD workflow productization.
|
|
86
|
+
|
|
87
|
+
## Known Gaps
|
|
88
|
+
|
|
89
|
+
- OpenCode may still read `.persona/rules` directly before fully following the workflow rail.
|
|
90
|
+
- Raw shell usage can still happen first; `ph workflow finish implement` catches this, but the current gate relies on report text.
|
|
91
|
+
- The alpha line still needs more external tester feedback before stable support guarantees.
|
|
92
|
+
|
|
93
|
+
## Next
|
|
94
|
+
|
|
95
|
+
- Publish `persona-harness@0.3.2-alpha.3` with the `alpha` tag.
|
|
96
|
+
- Ask external testers to install with:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm install -D persona-harness@alpha
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
- Re-run the short request path in a fresh project and report:
|
|
103
|
+
- install/init friction
|
|
104
|
+
- whether `ph bootstrap backend` was used
|
|
105
|
+
- evidence count
|
|
106
|
+
- backend shape
|
|
107
|
+
- Gradle test/build/HTTP smoke result
|
|
108
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "persona-harness",
|
|
3
|
-
"version": "0.3.2-alpha.
|
|
3
|
+
"version": "0.3.2-alpha.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "OpenCode plugin for Java/Spring backend Clean Code guidance injection and local/tarball Persona Harness verification.",
|
|
@@ -42,6 +42,8 @@ Before generating a Spring project, pick one compatible build line and keep it c
|
|
|
42
42
|
|
|
43
43
|
Do not solve a Spring Boot executable-app build failure by disabling `bootJar` unless the project is explicitly a plain Java library. For a backend application, `gradle test`, `gradle build`, and a basic `gradle bootRun` smoke should all be expected to pass.
|
|
44
44
|
|
|
45
|
+
Generated Spring apps should prefer wrapper-backed verification. Include `gradlew`, `gradlew.bat`, and `gradle/wrapper` when feasible; otherwise record why the wrapper could not be generated and avoid treating missing system Gradle as an application failure.
|
|
46
|
+
|
|
45
47
|
If `bootJar` fails with a compatibility symptom such as `CopyProcessingSpec.getDirMode()`, do not add `tasks.named("bootJar") { enabled = false }`. Treat it as a Spring Boot plugin / Gradle launcher mismatch: prefer a compatible Spring Boot plugin line for the current Gradle launcher, or generate a Gradle wrapper for the Gradle line supported by the chosen plugin.
|
|
46
48
|
|
|
47
49
|
If the local environment uses a newer Gradle than the selected Spring Boot plugin supports, prefer a compatible Spring Boot plugin line or generate a Gradle wrapper for the chosen line. With a Gradle 9.x launcher, do not default to older Spring Boot 3.3.x plugin lines unless the wrapper pins a supported Gradle line. If the test task fails to load JUnit Platform, add the launcher explicitly:
|