specatlas 0.1.37 → 0.1.38
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 +36 -6
- package/package.json +2 -2
package/dist/bin.js
CHANGED
|
@@ -34465,6 +34465,11 @@ function labelsFor(language) {
|
|
|
34465
34465
|
signatureName: "Approver name",
|
|
34466
34466
|
signatureDate: "Signature date",
|
|
34467
34467
|
signatureNote: "The signature is recorded with the specification hash and the date.",
|
|
34468
|
+
signedBy: "Approved by",
|
|
34469
|
+
signedAt: "Date",
|
|
34470
|
+
signedHash: "Signed hash",
|
|
34471
|
+
signedChannel: "Channel",
|
|
34472
|
+
signHere: "Sign here to approve this proposal.",
|
|
34468
34473
|
openMockup: "Open mockup",
|
|
34469
34474
|
mockupHint: "Each screen opens full size in its own tab. In a browser they are also previewed inline.",
|
|
34470
34475
|
illustrates: "Illustrates"
|
|
@@ -34496,6 +34501,11 @@ function labelsFor(language) {
|
|
|
34496
34501
|
missingMockups: "Mockups declarados que faltan",
|
|
34497
34502
|
screenshots: "Capturas",
|
|
34498
34503
|
print: "Imprimir / Guardar PDF",
|
|
34504
|
+
signedBy: "Aprobada por",
|
|
34505
|
+
signedAt: "Fecha",
|
|
34506
|
+
signedHash: "Huella firmada",
|
|
34507
|
+
signedChannel: "Canal",
|
|
34508
|
+
signHere: "Firma aqu\xED para aprobar esta propuesta.",
|
|
34499
34509
|
signatureName: "Nombre de quien aprueba",
|
|
34500
34510
|
signatureDate: "Fecha de la firma",
|
|
34501
34511
|
signatureNote: "La firma se registra con la huella de la especificaci\xF3n y la fecha.",
|
|
@@ -34578,6 +34588,8 @@ th { background:var(--elev); font-size:11px; text-transform:uppercase; letter-sp
|
|
|
34578
34588
|
.grid-shots { display:grid; grid-template-columns:repeat(auto-fill, minmax(220px, 1fr)); gap:12px; margin-top:12px; }
|
|
34579
34589
|
.grid-shots img { width:100%; border:1px solid var(--line); border-radius:10px; }
|
|
34580
34590
|
.signature { display:grid; grid-template-columns:1.2fr .8fr; gap:18px; }
|
|
34591
|
+
.sign-line.signed { border-style:solid; border-color:var(--ok); background:color-mix(in srgb, var(--ok) 8%, transparent); }
|
|
34592
|
+
.sign-line .mono { font-family:ui-monospace, Consolas, monospace; font-size:11.5px; word-break:break-all; }
|
|
34581
34593
|
.sign-line { border:1px dashed var(--accent); border-radius:8px; padding:16px; background:var(--accent-soft); }
|
|
34582
34594
|
.sign-line .sl-row { display:flex; justify-content:space-between; gap:12px; border-bottom:1px solid var(--line); padding:0 0 6px; margin-bottom:18px; color:var(--muted); font-size:12.5px; }
|
|
34583
34595
|
.sign-line .sl-row:last-child { border-bottom:0; margin-bottom:0; padding-top:14px; }
|
|
@@ -34624,6 +34636,15 @@ function page(input) {
|
|
|
34624
34636
|
return `<tr><td><code>${esc(s.id)}</code></td><td>${esc(s.title)}</td><td><span class="pill ${cls}">${esc(label)}</span></td></tr>`;
|
|
34625
34637
|
}).join("");
|
|
34626
34638
|
const signatureState = input.approvalStatus === "valid" && input.approval ? `<div class="sign-state ok"><span class="ss-label">${esc(l.approve)}</span><b>${esc(l.approveDone.replace("{by}", input.approval.by).replace("{at}", input.approval.at))}</b></div>` : input.approvalStatus === "stale" && input.approval ? `<div class="sign-state stale"><span class="ss-label">${esc(l.approve)}</span><b>${esc(l.approveStale)}</b><p>${esc(l.approveDone.replace("{by}", input.approval.by).replace("{at}", input.approval.at))}</p></div>` : `<div class="sign-state"><span class="ss-label">${esc(l.approve)}</span><b>${esc(l.approvePending)}</b><p>${esc(l.approveText)}</p></div>`;
|
|
34639
|
+
const signatureBlock = input.approvalStatus === "valid" && input.approval ? `<div class="sign-line signed">
|
|
34640
|
+
<div class="sl-row"><span>${esc(l.signedBy)}</span><b>${esc(input.approval.by)}</b></div>
|
|
34641
|
+
<div class="sl-row"><span>${esc(l.signedAt)}</span><b>${esc(input.approval.at)}</b></div>
|
|
34642
|
+
<div class="sl-row"><span>${esc(l.signedHash)}</span><span class="mono">${esc(input.hash)}</span></div>
|
|
34643
|
+
</div>` : `<div class="sign-line">
|
|
34644
|
+
<p class="sign-help" style="margin:0 0 12px">${esc(l.signHere)}</p>
|
|
34645
|
+
<div class="sl-row"><span>${esc(l.signatureName)}</span><span style="font-family:ui-monospace,Consolas,monospace">____________________</span></div>
|
|
34646
|
+
<div class="sl-row"><span>${esc(l.signatureDate)}</span><span style="font-family:ui-monospace,Consolas,monospace">____ / ____ / ________</span></div>
|
|
34647
|
+
</div>`;
|
|
34627
34648
|
const mockupHtml = input.mockups.length === 0 ? `<div class="callout">${esc(l.noMockups)}</div>` : `<p class="sign-help" style="margin:0 0 12px">${esc(l.mockupHint)}</p><div class="mockups">${input.mockups.map(
|
|
34628
34649
|
(m) => `<div class="mockup ${m.platform === "mobile" ? "phone" : ""}" data-mockup="${esc(m.file)}" data-title="${esc(m.title)}"><header><span>${esc(m.title)}</span><a class="btn" href="${esc(m.file)}" target="_blank" rel="noopener">${esc(l.openMockup)}</a></header><div class="mockup-body"><span class="mockup-file">${esc(m.file)}</span>${m.illustrates.length > 0 ? `<span class="mockup-scn">${esc(l.illustrates)}: ${m.illustrates.map((id) => esc(id)).join(", ")}</span>` : ""}</div></div>`
|
|
34629
34650
|
).join("")}</div>`;
|
|
@@ -34718,14 +34739,11 @@ function page(input) {
|
|
|
34718
34739
|
<div class="card-head"><span class="num">05</span><h2>${esc(l.approve)}</h2><span class="sub">acto humano \xB7 queda auditado</span></div>
|
|
34719
34740
|
<div class="card-body">
|
|
34720
34741
|
<div class="signature">
|
|
34721
|
-
|
|
34722
|
-
<div class="sl-row"><span>${esc(l.signatureName)}</span><span style="font-family:ui-monospace,Consolas,monospace">____________________</span></div>
|
|
34723
|
-
<div class="sl-row"><span>${esc(l.signatureDate)}</span><span style="font-family:ui-monospace,Consolas,monospace">____ / ____ / ________</span></div>
|
|
34724
|
-
</div>
|
|
34742
|
+
${signatureBlock}
|
|
34725
34743
|
<div>
|
|
34726
34744
|
<p class="sign-help">${esc(l.signatureNote)}</p>
|
|
34727
|
-
|
|
34728
|
-
|
|
34745
|
+
${input.approvalStatus === "valid" ? "" : `<p class="sign-help" style="margin-top:8px"><code>${esc(input.approveHint)}</code></p>`}
|
|
34746
|
+
${input.approvalStatus === "stale" ? `<p class="sign-help" style="margin-top:10px">${esc(l.approveStale)}</p>` : ""}
|
|
34729
34747
|
</div>
|
|
34730
34748
|
</div>
|
|
34731
34749
|
</div>
|
|
@@ -37553,6 +37571,18 @@ async function runApprove(ctx) {
|
|
|
37553
37571
|
lines.push(` fecha: ${result.approval.approvedAt}`);
|
|
37554
37572
|
lines.push("");
|
|
37555
37573
|
lines.push("La firma desbloquea el plan. Si el artefacto cambia, la firma queda obsoleta autom\xE1ticamente.");
|
|
37574
|
+
const slug = change?.slug;
|
|
37575
|
+
if (slug && !flagBool(ctx.flags, "dry-run")) {
|
|
37576
|
+
const presentation = path36.join(root, ".sdd", "changes", slug, "presentation", "index.html");
|
|
37577
|
+
if (await exists(presentation)) {
|
|
37578
|
+
try {
|
|
37579
|
+
await generatePresentation({ root, slug });
|
|
37580
|
+
lines.push(`Propuesta actualizada con la firma: ${path36.relative(ctx.cwd, presentation)}`);
|
|
37581
|
+
} catch (error2) {
|
|
37582
|
+
lines.push(`La propuesta no se pudo rehacer (${error2.message}); vuelve a generarla con \`satlas present ${slug}\`.`);
|
|
37583
|
+
}
|
|
37584
|
+
}
|
|
37585
|
+
}
|
|
37556
37586
|
}
|
|
37557
37587
|
const hasErrors2 = result.diagnostics.some((d) => d.severity === "error");
|
|
37558
37588
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specatlas",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.38",
|
|
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.2",
|
|
43
|
-
"@specatlas/core": "0.1.
|
|
43
|
+
"@specatlas/core": "0.1.32"
|
|
44
44
|
},
|
|
45
45
|
"scripts": {
|
|
46
46
|
"typecheck": "tsc --noEmit",
|