@specatlas/core 0.1.20 → 0.1.22
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/index.d.ts +38 -1
- package/dist/index.js +158 -0
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -802,6 +802,43 @@ declare function parseApprovals(raw: string, filePath: string): {
|
|
|
802
802
|
diagnostics: Diagnostic[];
|
|
803
803
|
};
|
|
804
804
|
|
|
805
|
+
interface GlossaryTerm {
|
|
806
|
+
term: string;
|
|
807
|
+
definition: string;
|
|
808
|
+
synonyms: string[];
|
|
809
|
+
}
|
|
810
|
+
interface ParsedGlossary {
|
|
811
|
+
terms: GlossaryTerm[];
|
|
812
|
+
diagnostics: Diagnostic[];
|
|
813
|
+
}
|
|
814
|
+
declare function parseGlossary(md: string, filePath?: string): ParsedGlossary;
|
|
815
|
+
|
|
816
|
+
interface ImpactTask {
|
|
817
|
+
id: string;
|
|
818
|
+
change: string;
|
|
819
|
+
text: string;
|
|
820
|
+
files: string[];
|
|
821
|
+
covers: string[];
|
|
822
|
+
}
|
|
823
|
+
interface ImpactEvidence {
|
|
824
|
+
scenario: string;
|
|
825
|
+
result: string;
|
|
826
|
+
change: string;
|
|
827
|
+
}
|
|
828
|
+
interface ImpactReport {
|
|
829
|
+
target: string;
|
|
830
|
+
kind: 'requirement' | 'file';
|
|
831
|
+
exists: boolean;
|
|
832
|
+
scenarios: string[];
|
|
833
|
+
tasks: ImpactTask[];
|
|
834
|
+
requirements: string[];
|
|
835
|
+
changes: string[];
|
|
836
|
+
files: string[];
|
|
837
|
+
evidence: ImpactEvidence[];
|
|
838
|
+
}
|
|
839
|
+
declare function impactOfRequirement(workspace: Workspace, reqId: string): ImpactReport;
|
|
840
|
+
declare function impactOfFile(workspace: Workspace, file: string): ImpactReport;
|
|
841
|
+
|
|
805
842
|
interface LintOptions {
|
|
806
843
|
language?: 'es' | 'en';
|
|
807
844
|
businessOnly?: boolean;
|
|
@@ -1710,4 +1747,4 @@ declare function livingRequirementsMap(specs: Array<{
|
|
|
1710
1747
|
}>): Map<string, Requirement>;
|
|
1711
1748
|
declare function runCiGate(opts: CiOptions): Promise<CiResult>;
|
|
1712
1749
|
|
|
1713
|
-
export { type AdoptDomain, type AdoptOptions, type AdoptResult, type AgingBucket, type AnalyzeOptions, type AnalyzePackSummary, type AnalyzeResult, type Approval, type ApprovalStatus, type ApprovalsFile, type ApprovalsIndex, type ApproveFromGithubOptions, type ApproveFromGithubResult, type ArchiveOptions, type ArchiveResult, type AtlasConfig, type AttentionItem, BLOCK_HEAD_RE, BUILTIN_PACKS, type BlockWavePlan, CONFIG_FILE, CORE_VERSION, type CaptureResult, type Change, type ChangeMeta, type ChangeMetrics, type ChangeState, type CiCheck, type CiExtraCheck, type CiOptions, type CiResult, type Delta, type DeltaOp, type DeriveInput, type DerivedState, type DetectionResult, type Diagnostic, type DoctorReport, type Domain, type Evidence, type EvidenceMethod, type EvidenceResult, type ExecOptions, type ExecResult, type FoldOutcome, type FrontmatterResult, type GhRunner, type GitHubRepo, type InitOptions, type InitResult, type IssueBodyInput, type Lane, type Language, type LinkedIssue, type LintOptions, type LoadedConfig, type MockupCheckResult, type MockupManifest, type MockupPlan, type MockupPlanScreen, type MockupScreen, type MoveOps, type NewChangeOptions, type NewChangeResult, type NextAction, type Override, type Pack, type PackCheck, type PackCheckResult, type PackCheckType, type PackEvaluation, type PresentOptions, type PresentResult, type ProfileMatch, REQ_HEAD_RE, REQ_ID_RE, RULE_ID_RE, RULE_RE, RUN_EVENT_TYPES, type RecordEvidenceOptions, type RecordEvidenceResult, type Rename, type Requirement, type RiskLevel, type Rule, type RunEvent, type RunEventType, type RunRecord, type RunState, type RunStatus, SCENARIO_HEAD_RE, SCENARIO_ID_RE, SDD_DIR, SLUG_RE, type Scenario, type Severity, type SignApprovalOptions, type SignApprovalResult, type SpecFile, type SpecRef, type StackProfile, type SyncGithubOptions, type SyncGithubResult, TASK_ID_RE, TASK_LINE_RE, type Task, type TaskBlock, type TasksFile, type TemplateSet, type TraceEdge, type TraceFinding, type TraceGraph, type TraceInput, type TraceNode, type TraceResult, type VerifyFile, type WalkEntry, type WavePlan, type Workspace, type WorkspaceMetrics, adoptWorkspace, appendRunEvent, approvalsSchema, approveFromGithub, archiveChange, artifactHash, atlasConfigSchema, buildTraceGraph, canonicalizeMarkdown, captureMockups, changeMarker, changeMetaSchema, changeMetaYaml, checkMockups, checkTrace, collectMetrics, commentIssue, compareTaskIds, computeInputsHash, configToYaml, copyFile, countBySeverity, createChange, createIssue, createRun, defaultConfig, deriveState, detectProfiles, detectRepo, detectionToYaml, diag, editIssue, emitFrontmatter, ensureDir, ensureSddDirs, esc, evaluatePacks, evidenceSummary, exists, findLinkedIssue, findWorkspaceRoot, firstToken, foldDelta, generatePresentation, generateRunId, getNumber, getString, ghAuthStatus, ghAvailable, hasErrors, hasShellMetacharacters, indexMarkdown, initWorkspace, inline, isCommandAllowed, isDirectory, issueBody, issueLabels, laneOrDefault, lintDelta, lintMockupHtml, lintMockupManifest, lintPlan, lintRequirement, lintSpec, lintTasks, lintVerify, listChangeSlugs, listDir, listDirs, listRuns, livingRequirementsMap, loadActiveProfile, loadApprovals, loadChange, loadConfig, loadDetectedBest, loadProfileFile, loadProfilesFromDir, loadProjectPacks, loadSpecs, loadWorkspace, localCompact, localDate, localMonth, localOffset, localStamp, matchGlob, mockupManifestSchema, mockupsDir, mockupsReady, moveDirectory, packFindings, parseApprovals, parseChangeMeta, parseConfig, parseDelta, parseFrontmatter, parseGitHubRemote, parseIssueUrl, parseRequirementBlocks, parseSpecFile, parseTasksFile, parseVerifyFile, patchChangeMeta, planBlock, planMockups, planWaves, profileSchema, readMockupManifest, readRun, readText, readTextIfExists, recordEvidence, regenerateIndex, renderMarkdown, renderRequirement, renderTemplate, requiresMockups, resolvePacks, runAnalyze, runCiGate, runDoctor, runProcess, setMockupRequirement, sha256, shortHash, signApproval, specHashOf, splitCommand, stateLabel, syncGithubIssue, templatesFor, toPosix, tokensFile, updateMockupScreenshots, updateRunStatus, verifyApproval, walkFiles, writeConfig, writeMockupManifest, writeMockupPlan, writeText };
|
|
1750
|
+
export { type AdoptDomain, type AdoptOptions, type AdoptResult, type AgingBucket, type AnalyzeOptions, type AnalyzePackSummary, type AnalyzeResult, type Approval, type ApprovalStatus, type ApprovalsFile, type ApprovalsIndex, type ApproveFromGithubOptions, type ApproveFromGithubResult, type ArchiveOptions, type ArchiveResult, type AtlasConfig, type AttentionItem, BLOCK_HEAD_RE, BUILTIN_PACKS, type BlockWavePlan, CONFIG_FILE, CORE_VERSION, type CaptureResult, type Change, type ChangeMeta, type ChangeMetrics, type ChangeState, type CiCheck, type CiExtraCheck, type CiOptions, type CiResult, type Delta, type DeltaOp, type DeriveInput, type DerivedState, type DetectionResult, type Diagnostic, type DoctorReport, type Domain, type Evidence, type EvidenceMethod, type EvidenceResult, type ExecOptions, type ExecResult, type FoldOutcome, type FrontmatterResult, type GhRunner, type GitHubRepo, type GlossaryTerm, type ImpactEvidence, type ImpactReport, type ImpactTask, type InitOptions, type InitResult, type IssueBodyInput, type Lane, type Language, type LinkedIssue, type LintOptions, type LoadedConfig, type MockupCheckResult, type MockupManifest, type MockupPlan, type MockupPlanScreen, type MockupScreen, type MoveOps, type NewChangeOptions, type NewChangeResult, type NextAction, type Override, type Pack, type PackCheck, type PackCheckResult, type PackCheckType, type PackEvaluation, type ParsedGlossary, type PresentOptions, type PresentResult, type ProfileMatch, REQ_HEAD_RE, REQ_ID_RE, RULE_ID_RE, RULE_RE, RUN_EVENT_TYPES, type RecordEvidenceOptions, type RecordEvidenceResult, type Rename, type Requirement, type RiskLevel, type Rule, type RunEvent, type RunEventType, type RunRecord, type RunState, type RunStatus, SCENARIO_HEAD_RE, SCENARIO_ID_RE, SDD_DIR, SLUG_RE, type Scenario, type Severity, type SignApprovalOptions, type SignApprovalResult, type SpecFile, type SpecRef, type StackProfile, type SyncGithubOptions, type SyncGithubResult, TASK_ID_RE, TASK_LINE_RE, type Task, type TaskBlock, type TasksFile, type TemplateSet, type TraceEdge, type TraceFinding, type TraceGraph, type TraceInput, type TraceNode, type TraceResult, type VerifyFile, type WalkEntry, type WavePlan, type Workspace, type WorkspaceMetrics, adoptWorkspace, appendRunEvent, approvalsSchema, approveFromGithub, archiveChange, artifactHash, atlasConfigSchema, buildTraceGraph, canonicalizeMarkdown, captureMockups, changeMarker, changeMetaSchema, changeMetaYaml, checkMockups, checkTrace, collectMetrics, commentIssue, compareTaskIds, computeInputsHash, configToYaml, copyFile, countBySeverity, createChange, createIssue, createRun, defaultConfig, deriveState, detectProfiles, detectRepo, detectionToYaml, diag, editIssue, emitFrontmatter, ensureDir, ensureSddDirs, esc, evaluatePacks, evidenceSummary, exists, findLinkedIssue, findWorkspaceRoot, firstToken, foldDelta, generatePresentation, generateRunId, getNumber, getString, ghAuthStatus, ghAvailable, hasErrors, hasShellMetacharacters, impactOfFile, impactOfRequirement, indexMarkdown, initWorkspace, inline, isCommandAllowed, isDirectory, issueBody, issueLabels, laneOrDefault, lintDelta, lintMockupHtml, lintMockupManifest, lintPlan, lintRequirement, lintSpec, lintTasks, lintVerify, listChangeSlugs, listDir, listDirs, listRuns, livingRequirementsMap, loadActiveProfile, loadApprovals, loadChange, loadConfig, loadDetectedBest, loadProfileFile, loadProfilesFromDir, loadProjectPacks, loadSpecs, loadWorkspace, localCompact, localDate, localMonth, localOffset, localStamp, matchGlob, mockupManifestSchema, mockupsDir, mockupsReady, moveDirectory, packFindings, parseApprovals, parseChangeMeta, parseConfig, parseDelta, parseFrontmatter, parseGitHubRemote, parseGlossary, parseIssueUrl, parseRequirementBlocks, parseSpecFile, parseTasksFile, parseVerifyFile, patchChangeMeta, planBlock, planMockups, planWaves, profileSchema, readMockupManifest, readRun, readText, readTextIfExists, recordEvidence, regenerateIndex, renderMarkdown, renderRequirement, renderTemplate, requiresMockups, resolvePacks, runAnalyze, runCiGate, runDoctor, runProcess, setMockupRequirement, sha256, shortHash, signApproval, specHashOf, splitCommand, stateLabel, syncGithubIssue, templatesFor, toPosix, tokensFile, updateMockupScreenshots, updateRunStatus, verifyApproval, walkFiles, writeConfig, writeMockupManifest, writeMockupPlan, writeText };
|
package/dist/index.js
CHANGED
|
@@ -640,6 +640,150 @@ function findScenarioHeading(lines, blockLineIndex) {
|
|
|
640
640
|
return void 0;
|
|
641
641
|
}
|
|
642
642
|
|
|
643
|
+
// src/parse/glossary.ts
|
|
644
|
+
var HEADER_KEYS = /* @__PURE__ */ new Set(["t\xE9rmino", "termino", "term", "definici\xF3n", "definicion", "definition", "sin\xF3nimos", "sinonimos", "synonyms"]);
|
|
645
|
+
var SEPARATOR_RE = /^:?-{2,}:?$/;
|
|
646
|
+
function parseGlossary(md, filePath) {
|
|
647
|
+
const diagnostics = [];
|
|
648
|
+
const terms = [];
|
|
649
|
+
const lines = md.replace(/\r\n?/g, "\n").split("\n");
|
|
650
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
651
|
+
const raw = lines[i] ?? "";
|
|
652
|
+
if (!raw.trim().startsWith("|")) continue;
|
|
653
|
+
const inner = raw.trim().replace(/^\|/, "").replace(/\|$/, "");
|
|
654
|
+
const cells = inner.split("|").map((c) => c.trim());
|
|
655
|
+
if (cells.length < 2) {
|
|
656
|
+
diagnostics.push(diag("LINT-GLO-001", "warning", "Fila del glosario sin columnas suficientes", { path: filePath, line: i + 1 }));
|
|
657
|
+
continue;
|
|
658
|
+
}
|
|
659
|
+
const first = cells[0] ?? "";
|
|
660
|
+
if (HEADER_KEYS.has(first.toLowerCase()) || SEPARATOR_RE.test(first)) continue;
|
|
661
|
+
const term = first;
|
|
662
|
+
const definition = cells[1] ?? "";
|
|
663
|
+
if (term === "" || definition === "") {
|
|
664
|
+
diagnostics.push(diag("LINT-GLO-002", "warning", "T\xE9rmino o definici\xF3n vac\xEDos en el glosario", { path: filePath, line: i + 1 }));
|
|
665
|
+
continue;
|
|
666
|
+
}
|
|
667
|
+
const synonyms = (cells[2] ?? "").split(",").map((s) => s.trim()).filter((s) => s.length > 0);
|
|
668
|
+
terms.push({ term, definition, synonyms });
|
|
669
|
+
}
|
|
670
|
+
return { terms, diagnostics };
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
// src/impact.ts
|
|
674
|
+
function normalizePath(p) {
|
|
675
|
+
return toPosix(p.trim()).replace(/^\.\//, "").replace(/\/+$/, "").toLowerCase();
|
|
676
|
+
}
|
|
677
|
+
function fileMatches(query, candidate) {
|
|
678
|
+
if (query === candidate) return true;
|
|
679
|
+
return candidate.endsWith(`/${query}`);
|
|
680
|
+
}
|
|
681
|
+
function scenarioToReq(workspace) {
|
|
682
|
+
const map = /* @__PURE__ */ new Map();
|
|
683
|
+
for (const spec of workspace.specs) {
|
|
684
|
+
for (const req of spec.spec.requirements) {
|
|
685
|
+
for (const sc of req.scenarios) map.set(sc.id, req.id);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
for (const change of workspace.changes) {
|
|
689
|
+
for (const req of [...change.delta?.added ?? [], ...change.delta?.modified ?? []]) {
|
|
690
|
+
for (const sc of req.scenarios) map.set(sc.id, req.id);
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
return map;
|
|
694
|
+
}
|
|
695
|
+
function emptyReport(target, kind) {
|
|
696
|
+
return { target, kind, exists: false, scenarios: [], tasks: [], requirements: [], changes: [], files: [], evidence: [] };
|
|
697
|
+
}
|
|
698
|
+
function collect(workspace, report, covers, reqOf) {
|
|
699
|
+
const requirements = /* @__PURE__ */ new Set();
|
|
700
|
+
for (const change of workspace.changes) {
|
|
701
|
+
let changeMatches = false;
|
|
702
|
+
for (const block of change.tasks?.blocks ?? []) {
|
|
703
|
+
for (const task of block.tasks) {
|
|
704
|
+
const hit = task.covers.some((c) => covers.has(c.toUpperCase()));
|
|
705
|
+
if (!hit) continue;
|
|
706
|
+
changeMatches = true;
|
|
707
|
+
report.tasks.push({ id: task.id, change: change.slug, text: task.text, files: task.files, covers: task.covers });
|
|
708
|
+
for (const c of task.covers) {
|
|
709
|
+
const upper = c.toUpperCase();
|
|
710
|
+
if (covers.has(upper)) {
|
|
711
|
+
const req = reqOf.get(upper) ?? upper;
|
|
712
|
+
requirements.add(req);
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
for (const f of task.files) report.files.push(f);
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
if (changeMatches) report.changes.push(change.slug);
|
|
719
|
+
for (const ev of change.verify?.evidence ?? []) {
|
|
720
|
+
if (covers.has(ev.scenario.toUpperCase())) {
|
|
721
|
+
report.evidence.push({ scenario: ev.scenario, result: ev.result, change: change.slug });
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
report.requirements = [...requirements].sort();
|
|
726
|
+
report.changes = [...new Set(report.changes)].sort();
|
|
727
|
+
report.files = [...new Set(report.files)].sort();
|
|
728
|
+
report.evidence.sort((a, b) => a.scenario.localeCompare(b.scenario));
|
|
729
|
+
}
|
|
730
|
+
function impactOfRequirement(workspace, reqId) {
|
|
731
|
+
const id = reqId.toUpperCase();
|
|
732
|
+
const scenarios = /* @__PURE__ */ new Set();
|
|
733
|
+
let exists2 = false;
|
|
734
|
+
for (const spec of workspace.specs) {
|
|
735
|
+
for (const req of spec.spec.requirements) {
|
|
736
|
+
if (req.id !== id) continue;
|
|
737
|
+
exists2 = true;
|
|
738
|
+
for (const sc of req.scenarios) scenarios.add(sc.id);
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
for (const change of workspace.changes) {
|
|
742
|
+
for (const req of [...change.delta?.added ?? [], ...change.delta?.modified ?? []]) {
|
|
743
|
+
if (req.id !== id) continue;
|
|
744
|
+
exists2 = true;
|
|
745
|
+
for (const sc of req.scenarios) scenarios.add(sc.id);
|
|
746
|
+
}
|
|
747
|
+
if ((change.delta?.removed ?? []).some((r) => r.id === id)) exists2 = true;
|
|
748
|
+
if ((change.delta?.renamed ?? []).some((r) => r.from.id === id || r.to.id === id)) exists2 = true;
|
|
749
|
+
}
|
|
750
|
+
const report = emptyReport(id, "requirement");
|
|
751
|
+
if (!exists2) return report;
|
|
752
|
+
report.exists = true;
|
|
753
|
+
report.scenarios = [...scenarios].sort();
|
|
754
|
+
const reqOf = scenarioToReq(workspace);
|
|
755
|
+
collect(workspace, report, /* @__PURE__ */ new Set([id, ...scenarios]), reqOf);
|
|
756
|
+
if (!report.requirements.includes(id)) report.requirements.unshift(id);
|
|
757
|
+
return report;
|
|
758
|
+
}
|
|
759
|
+
function impactOfFile(workspace, file) {
|
|
760
|
+
const query = normalizePath(file);
|
|
761
|
+
const report = emptyReport(file, "file");
|
|
762
|
+
const covers = /* @__PURE__ */ new Set();
|
|
763
|
+
const matched = /* @__PURE__ */ new Set();
|
|
764
|
+
const changes = /* @__PURE__ */ new Set();
|
|
765
|
+
for (const change of workspace.changes) {
|
|
766
|
+
for (const block of change.tasks?.blocks ?? []) {
|
|
767
|
+
for (const task of block.tasks) {
|
|
768
|
+
if (!task.files.some((f) => fileMatches(query, normalizePath(f)))) continue;
|
|
769
|
+
changes.add(change.slug);
|
|
770
|
+
for (const f of task.files) matched.add(f);
|
|
771
|
+
for (const c of task.covers) covers.add(c.toUpperCase());
|
|
772
|
+
report.tasks.push({ id: task.id, change: change.slug, text: task.text, files: task.files, covers: task.covers });
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
if (matched.size === 0) return report;
|
|
777
|
+
report.exists = true;
|
|
778
|
+
report.files = [...matched].sort();
|
|
779
|
+
report.changes = [...changes].sort();
|
|
780
|
+
const reqOf = scenarioToReq(workspace);
|
|
781
|
+
const requirements = /* @__PURE__ */ new Set();
|
|
782
|
+
for (const c of covers) requirements.add(reqOf.get(c) ?? c);
|
|
783
|
+
report.requirements = [...requirements].sort();
|
|
784
|
+
return report;
|
|
785
|
+
}
|
|
786
|
+
|
|
643
787
|
// src/lint.ts
|
|
644
788
|
var VAGUE_ES = ["r\xE1pido", "r\xE1pida", "r\xE1pidos", "r\xE1pidas", "f\xE1cil", "f\xE1ciles", "varios", "varias", "\xF3ptimo", "\xF3ptima", "robusto", "robusta", "adecuado", "adecuada", "eficiente", "amigable", "moderno", "moderna", "mejor", "mejores", "simple", "sencillo", "intuitivo", "intuitiva", "apropiado", "apropiada", "suficiente", "razonable"];
|
|
645
789
|
var VAGUE_EN = ["fast", "quick", "easy", "several", "optimal", "robust", "adequate", "efficient", "friendly", "modern", "better", "best", "simple", "intuitive", "appropriate", "sufficient", "reasonable", "nice", "clean"];
|
|
@@ -1116,6 +1260,17 @@ function deriveState(input) {
|
|
|
1116
1260
|
}
|
|
1117
1261
|
if (blockingFindings > 0) {
|
|
1118
1262
|
blockedBy.push(`${blockingFindings} hallazgo(s) bloqueante(s)`);
|
|
1263
|
+
if (tasksTotal > 0 && tasksDone < tasksTotal) {
|
|
1264
|
+
return {
|
|
1265
|
+
state: "building",
|
|
1266
|
+
blockedBy,
|
|
1267
|
+
nextAction: next(`/satlas.build ${change.slug}`, `Construir en olas (${tasksDone}/${tasksTotal} tareas) \xB7 ${blockingFindings} hallazgo(s) pendientes`, true),
|
|
1268
|
+
progress
|
|
1269
|
+
};
|
|
1270
|
+
}
|
|
1271
|
+
if (tasksTotal > 0) {
|
|
1272
|
+
return { state: "built", blockedBy, nextAction: next(`satlas verify ${change.slug}`, "Registrar evidencia por escenario"), progress };
|
|
1273
|
+
}
|
|
1119
1274
|
return { state: "spec_draft", blockedBy, nextAction: next(`satlas validate --change ${change.slug}`, "Corregir los hallazgos de la especificaci\xF3n"), progress };
|
|
1120
1275
|
}
|
|
1121
1276
|
if ((approval.status === "missing" || approval.status === "stale") && requiresMockups(change.meta, cfg) && input.mockupsReady !== true && !mockupOverride(change)) {
|
|
@@ -4189,6 +4344,8 @@ export {
|
|
|
4189
4344
|
ghAvailable,
|
|
4190
4345
|
hasErrors,
|
|
4191
4346
|
hasShellMetacharacters,
|
|
4347
|
+
impactOfFile,
|
|
4348
|
+
impactOfRequirement,
|
|
4192
4349
|
indexMarkdown,
|
|
4193
4350
|
initWorkspace,
|
|
4194
4351
|
inline,
|
|
@@ -4237,6 +4394,7 @@ export {
|
|
|
4237
4394
|
parseDelta,
|
|
4238
4395
|
parseFrontmatter,
|
|
4239
4396
|
parseGitHubRemote,
|
|
4397
|
+
parseGlossary,
|
|
4240
4398
|
parseIssueUrl,
|
|
4241
4399
|
parseRequirementBlocks,
|
|
4242
4400
|
parseSpecFile,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@specatlas/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.22",
|
|
4
4
|
"description": "Kernel determinista de SpecAtlas: parsing, validación, trazabilidad, olas y ciclo de vida",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@specatlas/render": "0.1.
|
|
37
|
+
"@specatlas/render": "0.1.10",
|
|
38
38
|
"yaml": "^2.6.1",
|
|
39
39
|
"zod": "^3.24.1"
|
|
40
40
|
},
|