@awak-app/simy-cli 0.5.16 → 0.5.18
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/README.md +61 -13
- package/package.json +2 -2
- package/src/cli-contract.js +1 -1
- package/src/codex-plugins/simy/.codex-plugin/plugin.json +5 -6
- package/src/console/app.js +2 -2
- package/src/desktop-host.js +1 -1
- package/src/desktop-process-lock.js +41 -4
- package/src/desktop-stop-conflicts.js +17 -0
- package/src/orchestrator/budget.js +1 -1
- package/src/orchestrator/checklist-continuation.js +21 -0
- package/src/orchestrator/completion-contract.js +1 -1
- package/src/{codex-plugins/simy/skills/agentic-delivery-loop/SKILL.md → orchestrator/delivery/WORKFLOW.md} +65 -13
- package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/references/acceptance-evidence.md +27 -3
- package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/references/change-boundary-matrix.md +1 -1
- package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/references/delivery-levels.md +78 -27
- package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/references/minimum-completion.md +3 -3
- package/src/orchestrator/delivery/references/pr-closure.md +203 -0
- package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/references/state-and-receipts.md +4 -1
- package/src/orchestrator/delivery/references/ux-specification.md +98 -0
- package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/scripts/production-contract.mjs +1 -1
- package/src/orchestrator/delivery-level.js +19 -0
- package/src/orchestrator/independent-audit.js +8 -0
- package/src/orchestrator/instruction.js +11 -2
- package/src/orchestrator/loop.js +1 -1
- package/src/orchestrator/minimum-completion.js +2 -2
- package/src/orchestrator/pr-closure.js +26 -0
- package/src/orchestrator/presentation.js +2 -2
- package/src/orchestrator/result.js +2 -2
- package/src/orchestrator/ux-specification.js +20 -0
- package/src/runner.js +12 -0
- package/src/codex-plugins/simy/skills/agentic-delivery-loop/agents/openai.yaml +0 -5
- /package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/references/chrome-user-verification.md +0 -0
- /package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/references/cross-repository-control.md +0 -0
- /package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/references/local-sqm-evidence.md +0 -0
- /package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/references/shared-system-specifications.md +0 -0
- /package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/scripts/check-acceptance.mjs +0 -0
- /package/src/{codex-plugins/simy/skills/agentic-delivery-loop → orchestrator/delivery}/scripts/check-minimum-completion.mjs +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
import { section } from "./shared.js";
|
|
3
|
+
|
|
4
|
+
export const PR_CLOSURE_GUIDE_PATH = fileURLToPath(
|
|
5
|
+
new URL("./delivery/references/pr-closure.md", import.meta.url),
|
|
6
|
+
);
|
|
7
|
+
|
|
8
|
+
// Both real executor and independent-auditor instructions use this contract.
|
|
9
|
+
// This is not a GitHub permission hook: external mutations still need authority.
|
|
10
|
+
export function buildPrClosureInstruction({ auditor = false } = {}) {
|
|
11
|
+
return section("pr_closure_gate", [
|
|
12
|
+
"Applies only when proposing, performing or auditing PR closure/supersession/retirement. It does not request closing any PR.",
|
|
13
|
+
`Before a closure decision, read the packaged Web/CLI procedure: ${PR_CLOSURE_GUIDE_PATH}`,
|
|
14
|
+
"Freeze the original outcome criteria and exact old head/base, current target base, successor heads, integrated candidate and deployed identity. Preserve intended, observed and unknown behavior separately.",
|
|
15
|
+
"Persist a criterion-ID before/after table: old PR, current base alone, integrated successors and deployed target. Account for all changed files and unintended added behavior; file counts, ancestry and green CI are not UX equivalence.",
|
|
16
|
+
"For every unresolved yellow/red row, create a new remediation PR within explicit implementation/commit/push/PR authority, grouping only coherent changes. Reuse an exact existing open remediation PR rather than duplicating it. Map every criterion ID to a real PR URL, owner and acceptance tests; a broad successor link or uncreated PR plan is insufficient for transfer_ready. Missing authority, unresolved product decisions or budget blocks remain explicit blockers. PR creation alone never makes a row green.",
|
|
17
|
+
"Verify normal production reachability and the complete trigger-to-usable-result path, with independent technical postconditions and recovery. Code surviving only in fixtures is not inherited UX. Distinguish reuse, composition, conversational design, immediate ad-hoc work and background learning, including the no-workflow/no-match fallback.",
|
|
18
|
+
"Unknown, failed or stale applicable evidence blocks close_ready. Require independent review of original requirements and raw evidence before an authorized close. Preserve initial failures; tests changed to pass do not validate the unchanged original candidate.",
|
|
19
|
+
"Unfinished successors require transfer_ready with explicit informed administrative-close authorization, accepted owner, open tracking and remaining gates; never claim full inheritance. Intentional removal requires an explicit retirement decision and safe data/migration handling.",
|
|
20
|
+
"Re-read all bound revisions, successor state, checks and authority immediately before mutation; changed inputs invalidate affected verification/review. Close and comment-posting authority are separate. Audit-only requests authorize neither.",
|
|
21
|
+
"After an authorized action, read back remote state before claiming success or retrying. Persist pre/post state, review/evidence digests, draft/comment identity, pending obligations and recovery references before cleanup. Do not infer branch deletion, successor merge, deployment or delivery completion.",
|
|
22
|
+
auditor
|
|
23
|
+
? "You remain read-only. Independently inspect the closure table and raw proof; report gaps as findings. Closure decisions never turn unmet delivery criteria green. Do not close, reopen, comment or repair the PR."
|
|
24
|
+
: "If any required decision, evidence, independent review or authority is missing, stop the dependent close action and report the blocker. This protocol is not authorization and does not introduce a new loop completion state.",
|
|
25
|
+
].join("\n"));
|
|
26
|
+
}
|
|
@@ -88,9 +88,9 @@ export function summarizeCodingLoopEvent(snapshot, event) {
|
|
|
88
88
|
};
|
|
89
89
|
case "pr_ready_for_review":
|
|
90
90
|
return {
|
|
91
|
-
summary: "
|
|
91
|
+
summary: "The run is unfinished: required PR checks, review or evidence still need verification.",
|
|
92
92
|
result: pendingReasons.length ? `Pending: ${pendingReasons.join("; ")}` : cleanString(event?.message),
|
|
93
|
-
next: "
|
|
93
|
+
next: "Continue authorized verification, resolve the listed pending gates, then refresh evidence from Web or CLI. Obtain human approval only where required.",
|
|
94
94
|
};
|
|
95
95
|
case "merge_ready":
|
|
96
96
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { minimumCharterDigest } from "./minimum-completion.js";
|
|
2
|
-
import { minimumContext } from "
|
|
3
|
-
import { contextDigest } from "
|
|
2
|
+
import { minimumContext } from "./delivery/scripts/check-minimum-completion.mjs";
|
|
3
|
+
import { contextDigest } from "./delivery/scripts/check-acceptance.mjs";
|
|
4
4
|
import { cleanString, stringArray } from "./shared.js";
|
|
5
5
|
import { normalizeProblemSolving } from "./problem-solving.js";
|
|
6
6
|
import {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
import { section } from "./shared.js";
|
|
3
|
+
|
|
4
|
+
export const UX_SPECIFICATION_PATH = fileURLToPath(
|
|
5
|
+
new URL("./delivery/references/ux-specification.md", import.meta.url),
|
|
6
|
+
);
|
|
7
|
+
|
|
8
|
+
export function buildUxSpecificationInstruction({ auditor = false } = {}) {
|
|
9
|
+
return section("ux_specification_contract", [
|
|
10
|
+
`Apply the same behavioral-completeness standard throughout requirements, design, implementation mapping, verification, review, release, closure and handoff. Read: ${UX_SPECIFICATION_PATH}`,
|
|
11
|
+
"Describe observable interaction units, not feature inventories. Reuse stable acceptance IDs. For each unit specify actor/goal, context/preconditions, trigger/reachable entry, perceived information, available action/choice/control, system response/state transition, usable outcome/postconditions, next action/handoff, alternative/failure/recovery paths, and verification oracle/provenance. Treat these as semantic obligations in the existing specification, not new CLI JSON fields.",
|
|
12
|
+
"Decompose when actor, precondition, decision, observable state, postcondition or recovery differs materially, or when any clause could fail independently. Link predecessors/successors and preserve end-to-end criteria. Derive branches and applicable constraints from authoritative requirements and observed system boundaries; do not invent scenarios, defaults, thresholds or product policy to fill gaps.",
|
|
13
|
+
"Description is sufficient only when another implementer can derive the intended behavior and an independent verifier can determine pass/fail without guessing a material requirement. Review source coverage, causal continuity, branch closure, controllability, observability, traceability, consistency and epistemic separation. Word count, row count and verbosity are not quality thresholds.",
|
|
14
|
+
"Keep required/intended/observed/assumed/unknown distinct. Unknown facts stay explicit with affected IDs and resolution evidence; a missing requirement decision blocks dependent design, while missing runtime evidence blocks the affected verification claim. Genuine non-applicability needs a source and reason, not an empty cell.",
|
|
15
|
+
"Persist the complete contract in the canonical specification and link the same IDs from summaries, matrices, PRs and receipts. Summaries may shorten repetition but must not replace or drop behavioral obligations, unresolved gaps or evidence. A phase change revalidates affected descriptions and results; plans never become observed proof by wording alone.",
|
|
16
|
+
auditor
|
|
17
|
+
? "Remain read-only. Independently derive coverage from original sources, identify any material behavior that still requires guessing, and report affected criterion IDs and required clarification/evidence as findings. Do not infer completeness from filled fields or copied executor claims."
|
|
18
|
+
: "Before dependent implementation, resolve material specification ambiguity within authority or report needs_decision; continue independent work. Before verification or completion, repair missing descriptions/evidence rather than relabeling incomplete UX as complete. This procedural contract does not add automatic schema or GitHub enforcement.",
|
|
19
|
+
].join("\n"));
|
|
20
|
+
}
|
package/src/runner.js
CHANGED
|
@@ -532,6 +532,18 @@ async function runLocalCodingRun(
|
|
|
532
532
|
|
|
533
533
|
markAttachmentsDelivered(run.request.attachments);
|
|
534
534
|
|
|
535
|
+
// All collectors and the executor must use the same root. Bind a missing
|
|
536
|
+
// default only after resolving the authorized checkout, including on resume.
|
|
537
|
+
if (!run.snapshot.charter.ui_evidence_root) {
|
|
538
|
+
const evidenceRoot = path.join(repositoryPath, ".artifacts");
|
|
539
|
+
run.snapshot.charter.ui_evidence_root = evidenceRoot;
|
|
540
|
+
run.request.ui_evidence_root = evidenceRoot;
|
|
541
|
+
appendEvent(run.snapshot, run.status, "Local evidence root bound to the verified checkout.", {
|
|
542
|
+
code: "local_evidence_root_bound",
|
|
543
|
+
});
|
|
544
|
+
await updateRun(run, run.status);
|
|
545
|
+
}
|
|
546
|
+
|
|
535
547
|
const executor =
|
|
536
548
|
executeAttempt ||
|
|
537
549
|
((context) =>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|