specatlas 0.1.7 → 0.1.9
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.js +12 -4
- package/package.json +2 -2
package/dist/bin.js
CHANGED
|
@@ -9898,10 +9898,11 @@ function deriveState(input) {
|
|
|
9898
9898
|
}
|
|
9899
9899
|
if (approval.status === "missing" || approval.status === "stale") {
|
|
9900
9900
|
blockedBy.push(approval.status === "stale" ? "la firma de la spec qued\xF3 obsoleta (el archivo cambi\xF3)" : "la spec no est\xE1 aprobada");
|
|
9901
|
+
const presented = change.presentationPath !== void 0;
|
|
9901
9902
|
return {
|
|
9902
9903
|
state: "awaiting_approval",
|
|
9903
9904
|
blockedBy,
|
|
9904
|
-
nextAction: next(`satlas present ${change.slug}`, "Presentar la propuesta y firmar la aprobaci\xF3n (satlas approve)"),
|
|
9905
|
+
nextAction: presented ? next(`satlas approve ${change.slug} --by "<nombre>"`, "Firmar la aprobaci\xF3n (la presentaci\xF3n ya est\xE1 generada)") : next(`satlas present ${change.slug}`, "Presentar la propuesta y firmar la aprobaci\xF3n (satlas approve)"),
|
|
9905
9906
|
progress
|
|
9906
9907
|
};
|
|
9907
9908
|
}
|
|
@@ -10128,6 +10129,8 @@ async function loadChange(root, slug, relDir) {
|
|
|
10128
10129
|
if (await exists(planFile)) change.planPath = planFile;
|
|
10129
10130
|
const reviewFile = path4.join(dir, "review.md");
|
|
10130
10131
|
if (await exists(reviewFile)) change.reviewPath = reviewFile;
|
|
10132
|
+
const presentationFile = path4.join(dir, "presentation", "index.html");
|
|
10133
|
+
if (await exists(presentationFile)) change.presentationPath = presentationFile;
|
|
10131
10134
|
const tasksFile = path4.join(dir, "tasks.md");
|
|
10132
10135
|
const tasksRaw = await readTextIfExists(tasksFile);
|
|
10133
10136
|
if (tasksRaw !== void 0) {
|
|
@@ -11850,6 +11853,8 @@ async function generatePresentation(opts) {
|
|
|
11850
11853
|
const mockupInfo = await copyMockups(root, change, mockupsCopyDir);
|
|
11851
11854
|
const proposalRaw = await readTextIfExists(path12.join(change.dir, "proposal.md"));
|
|
11852
11855
|
const proposalBody = proposalRaw ? parseFrontmatter(proposalRaw).body : "";
|
|
11856
|
+
const approvals = await loadApprovals(path12.join(root, ".sdd"));
|
|
11857
|
+
const approval = verifyApproval(change, approvals.byArtifact, config, deltaContent);
|
|
11853
11858
|
const labels = labelsFor(language);
|
|
11854
11859
|
const html = page({
|
|
11855
11860
|
language,
|
|
@@ -11866,7 +11871,8 @@ async function generatePresentation(opts) {
|
|
|
11866
11871
|
evidence: new Map((change.verify?.evidence ?? []).map((e) => [e.scenario, e.result])),
|
|
11867
11872
|
mockups: mockupInfo.screens,
|
|
11868
11873
|
screenshots: mockupInfo.screenshots,
|
|
11869
|
-
approveHint: `satlas approve ${change.slug} --by "<nombre>" --channel presentation
|
|
11874
|
+
approveHint: `satlas approve ${change.slug} --by "<nombre>" --channel presentation`,
|
|
11875
|
+
...approval.status === "valid" && approval.approvedBy ? { approval: { by: approval.approvedBy, at: approval.approvedAt ?? "" } } : {}
|
|
11870
11876
|
});
|
|
11871
11877
|
const outFile = path12.join(presentationDir, "index.html");
|
|
11872
11878
|
await writeText(outFile, html);
|
|
@@ -11917,6 +11923,7 @@ function labelsFor(language) {
|
|
|
11917
11923
|
mockups: "Mockups",
|
|
11918
11924
|
approve: "Approval",
|
|
11919
11925
|
approveText: "This proposal is approved by signing the spec (hash + author). Any later change invalidates the signature.",
|
|
11926
|
+
approveDone: "Approved by {by} on {at}. Any later change invalidates the signature.",
|
|
11920
11927
|
command: "Command",
|
|
11921
11928
|
hash: "Hash",
|
|
11922
11929
|
generated: "Generated",
|
|
@@ -11938,6 +11945,7 @@ function labelsFor(language) {
|
|
|
11938
11945
|
mockups: "Mockups",
|
|
11939
11946
|
approve: "Aprobaci\xF3n",
|
|
11940
11947
|
approveText: "Esta propuesta se aprueba firmando la spec (hash + autor). Cualquier cambio posterior invalida la firma.",
|
|
11948
|
+
approveDone: "Aprobada por {by} el {at}. Cualquier cambio posterior invalida la firma.",
|
|
11941
11949
|
command: "Comando",
|
|
11942
11950
|
hash: "Hash",
|
|
11943
11951
|
generated: "Generado",
|
|
@@ -12053,8 +12061,8 @@ function page(input) {
|
|
|
12053
12061
|
|
|
12054
12062
|
<section>
|
|
12055
12063
|
<h2>${esc(l.approve)}</h2>
|
|
12056
|
-
|
|
12057
|
-
<p>${esc(l.command)}: <code>${esc(input.approveHint)}</code></p
|
|
12064
|
+
${input.approval ? `<div class="callout" style="border-left-color:#15803d;background:rgba(21,128,61,.12)">\u2714 ${esc(l.approveDone.replace("{by}", input.approval.by).replace("{at}", input.approval.at))}</div>` : `<div class="callout">${esc(l.approveText)}</div>
|
|
12065
|
+
<p>${esc(l.command)}: <code>${esc(input.approveHint)}</code></p>`}
|
|
12058
12066
|
</section>
|
|
12059
12067
|
|
|
12060
12068
|
<footer>SpecAtlas \xB7 ${esc(input.project)} \xB7 ${esc(input.generatedAt)}</footer>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specatlas",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "SpecAtlas: kernel determinista de Spec-Driven Development (CLI)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@specatlas/adapters": "0.1.1",
|
|
43
|
-
"@specatlas/core": "0.1.
|
|
43
|
+
"@specatlas/core": "0.1.7"
|
|
44
44
|
},
|
|
45
45
|
"scripts": {
|
|
46
46
|
"typecheck": "tsc --noEmit",
|