create-quiver 0.16.0 → 0.17.1

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.
Files changed (53) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +7 -1
  3. package/README_FOR_AI.md +4 -1
  4. package/docs/CLI_UX_GUIDE.md +11 -0
  5. package/docs/INDEX.md +5 -1
  6. package/docs/reference/commands.md +34 -0
  7. package/package.json +1 -1
  8. package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +31 -1
  9. package/specs/quiver-v46-deep-project-analysis/EVIDENCE_REPORT.md +94 -0
  10. package/specs/quiver-v46-deep-project-analysis/EXECUTION_PLAN.md +26 -0
  11. package/specs/quiver-v46-deep-project-analysis/SPEC.md +157 -0
  12. package/specs/quiver-v46-deep-project-analysis/STATUS.md +26 -0
  13. package/specs/quiver-v46-deep-project-analysis/pr.md +131 -0
  14. package/specs/quiver-v46-deep-project-analysis/slices/slice-00-analysis-contract-foundation/CLOSURE_BRIEF.md +14 -0
  15. package/specs/quiver-v46-deep-project-analysis/slices/slice-00-analysis-contract-foundation/EXECUTION_BRIEF.md +41 -0
  16. package/specs/quiver-v46-deep-project-analysis/slices/slice-00-analysis-contract-foundation/slice.json +61 -0
  17. package/specs/quiver-v46-deep-project-analysis/slices/slice-01-stack-agnostic-discovery-sampling/CLOSURE_BRIEF.md +22 -0
  18. package/specs/quiver-v46-deep-project-analysis/slices/slice-01-stack-agnostic-discovery-sampling/EXECUTION_BRIEF.md +33 -0
  19. package/specs/quiver-v46-deep-project-analysis/slices/slice-01-stack-agnostic-discovery-sampling/slice.json +80 -0
  20. package/specs/quiver-v46-deep-project-analysis/slices/slice-02-provider-analysis-json-contract/CLOSURE_BRIEF.md +21 -0
  21. package/specs/quiver-v46-deep-project-analysis/slices/slice-02-provider-analysis-json-contract/EXECUTION_BRIEF.md +34 -0
  22. package/specs/quiver-v46-deep-project-analysis/slices/slice-02-provider-analysis-json-contract/slice.json +79 -0
  23. package/specs/quiver-v46-deep-project-analysis/slices/slice-03-doc-proposal-review-safe-writes/CLOSURE_BRIEF.md +19 -0
  24. package/specs/quiver-v46-deep-project-analysis/slices/slice-03-doc-proposal-review-safe-writes/EXECUTION_BRIEF.md +33 -0
  25. package/specs/quiver-v46-deep-project-analysis/slices/slice-03-doc-proposal-review-safe-writes/slice.json +79 -0
  26. package/specs/quiver-v46-deep-project-analysis/slices/slice-04-validation-docs-release-readiness/CLOSURE_BRIEF.md +20 -0
  27. package/specs/quiver-v46-deep-project-analysis/slices/slice-04-validation-docs-release-readiness/EXECUTION_BRIEF.md +32 -0
  28. package/specs/quiver-v46-deep-project-analysis/slices/slice-04-validation-docs-release-readiness/slice.json +85 -0
  29. package/src/create-quiver/commands/ai.js +587 -0
  30. package/src/create-quiver/index.js +113 -3
  31. package/src/create-quiver/lib/ai/analyze-project-discovery.js +387 -0
  32. package/src/create-quiver/lib/ai/analyze-project-docs.js +364 -0
  33. package/src/create-quiver/lib/ai/analyze-project-parser.js +277 -0
  34. package/src/create-quiver/lib/ai/analyze-project-prompts.js +214 -0
  35. package/src/create-quiver/lib/ai/analyze-project-review.js +99 -0
  36. package/src/create-quiver/lib/ai/analyze-project-sampling.js +402 -0
  37. package/src/create-quiver/lib/ai/analyze-project-schema.js +92 -0
  38. package/src/create-quiver/lib/ai/analyze-project-validation.js +309 -0
  39. package/src/create-quiver/lib/ai/artifacts.js +4 -1
  40. package/src/create-quiver/lib/cli/command-registry.js +1 -0
  41. package/src/create-quiver/lib/i18n/messages/en.js +1 -0
  42. package/src/create-quiver/lib/i18n/messages/es.js +1 -0
  43. package/.quiver/runs/run-2026-06-09t19-14-39z/approvals.json +0 -5
  44. package/.quiver/runs/run-2026-06-09t19-14-39z/decisions.md +0 -2
  45. package/.quiver/runs/run-2026-06-09t19-14-39z/requirement.md +0 -0
  46. package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/docs/INDEX.md +0 -97
  47. package/.quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/manifest.json +0 -61
  48. package/.quiver/runs/run-2026-06-09t19-14-39z/state.json +0 -28
  49. package/ACTIVE_SLICES.md +0 -43
  50. package/auditoria-ux-ui-performance-documentacion.md +0 -705
  51. package/copys-landing-page.md +0 -244
  52. package/docs/ai/ACTIVE_SLICE.md +0 -61
  53. package/pr.md +0 -154
@@ -0,0 +1,92 @@
1
+ const { z } = require('zod');
2
+
3
+ const ANALYZE_PROJECT_SCHEMA_VERSION = 1;
4
+ const ANALYZE_PROJECT_KIND = 'quiver-project-analysis';
5
+ const MAX_ANALYZE_DOC_UPDATE_LENGTH = 400_000;
6
+ const CONFIDENCE_LEVELS = ['confirmed', 'inferred', 'unknown', 'conflict'];
7
+ const ALLOWED_ANALYZE_DOC_UPDATE_PATHS = [
8
+ 'docs/CONTEXTO.md',
9
+ 'docs/AI_CONTEXT.md',
10
+ 'docs/ARCHITECTURE.md',
11
+ 'docs/STATUS.md',
12
+ 'docs/DECISIONS.md',
13
+ 'docs/PROJECT_MAP.md',
14
+ ];
15
+
16
+ const confidenceSchema = z.enum(CONFIDENCE_LEVELS);
17
+ const evidencePathSchema = z.string().trim().min(1, 'evidence path is required');
18
+
19
+ const evidenceClaimSchema = z.object({
20
+ claim: z.string().trim().min(1, 'claim is required').max(4_000),
21
+ confidence: confidenceSchema,
22
+ evidence: z.array(evidencePathSchema).default([]),
23
+ notes: z.string().trim().max(2_000).default(''),
24
+ }).strict();
25
+
26
+ const namedFindingSchema = z.object({
27
+ name: z.string().trim().min(1, 'name is required').max(500),
28
+ summary: z.string().trim().max(4_000).default(''),
29
+ confidence: confidenceSchema.default('unknown'),
30
+ evidence: z.array(evidencePathSchema).default([]),
31
+ }).strict();
32
+
33
+ const productSchema = z.object({
34
+ name: namedFindingSchema.optional(),
35
+ type: namedFindingSchema.optional(),
36
+ summary: z.string().trim().max(4_000).default(''),
37
+ claims: z.array(evidenceClaimSchema).default([]),
38
+ }).strict().default({});
39
+
40
+ const domainSchema = z.object({
41
+ roles: z.array(namedFindingSchema).default([]),
42
+ entities: z.array(namedFindingSchema).default([]),
43
+ actions: z.array(namedFindingSchema).default([]),
44
+ flows: z.array(namedFindingSchema).default([]),
45
+ incomplete_or_suspicious: z.array(namedFindingSchema).default([]),
46
+ claims: z.array(evidenceClaimSchema).default([]),
47
+ }).strict().default({});
48
+
49
+ const architectureSchema = z.object({
50
+ frontend: z.array(namedFindingSchema).default([]),
51
+ backend: z.array(namedFindingSchema).default([]),
52
+ auth: z.array(namedFindingSchema).default([]),
53
+ persistence: z.array(namedFindingSchema).default([]),
54
+ integrations: z.array(namedFindingSchema).default([]),
55
+ state: z.array(namedFindingSchema).default([]),
56
+ api: z.array(namedFindingSchema).default([]),
57
+ testing: z.array(namedFindingSchema).default([]),
58
+ deploy: z.array(namedFindingSchema).default([]),
59
+ risks: z.array(namedFindingSchema).default([]),
60
+ claims: z.array(evidenceClaimSchema).default([]),
61
+ }).strict().default({});
62
+
63
+ const questionSchema = z.object({
64
+ question: z.string().trim().min(1, 'question is required').max(2_000),
65
+ reason: z.string().trim().max(2_000).default(''),
66
+ evidence: z.array(evidencePathSchema).default([]),
67
+ }).strict();
68
+
69
+ const analyzeProjectSchema = z.object({
70
+ schema_version: z.literal(ANALYZE_PROJECT_SCHEMA_VERSION).default(ANALYZE_PROJECT_SCHEMA_VERSION),
71
+ kind: z.literal(ANALYZE_PROJECT_KIND).default(ANALYZE_PROJECT_KIND),
72
+ product: productSchema,
73
+ domain: domainSchema,
74
+ architecture: architectureSchema,
75
+ features: z.array(namedFindingSchema).default([]),
76
+ risks: z.array(namedFindingSchema).default([]),
77
+ questions: z.array(questionSchema).default([]),
78
+ claims: z.array(evidenceClaimSchema).default([]),
79
+ doc_updates: z.record(z.string().trim().min(1), z.string().max(MAX_ANALYZE_DOC_UPDATE_LENGTH)).default({}),
80
+ }).strict();
81
+
82
+ module.exports = {
83
+ ALLOWED_ANALYZE_DOC_UPDATE_PATHS,
84
+ ANALYZE_PROJECT_KIND,
85
+ ANALYZE_PROJECT_SCHEMA_VERSION,
86
+ CONFIDENCE_LEVELS,
87
+ MAX_ANALYZE_DOC_UPDATE_LENGTH,
88
+ analyzeProjectSchema,
89
+ confidenceSchema,
90
+ evidenceClaimSchema,
91
+ namedFindingSchema,
92
+ };
@@ -0,0 +1,309 @@
1
+ const fs = require('node:fs');
2
+ const path = require('node:path');
3
+
4
+ const {
5
+ ANALYZE_MANAGED_END,
6
+ ANALYZE_MANAGED_START,
7
+ normalizeAnalyzeProjectDocProposal,
8
+ } = require('./analyze-project-docs');
9
+ const { normalizeAnalyzeProjectAnalysis } = require('./analyze-project-parser');
10
+
11
+ const VALIDATION_KIND = 'quiver-analyze-project-post-write-validation';
12
+
13
+ const PLACEHOLDER_PATTERNS = [
14
+ { issue: 'placeholder-todo', pattern: /\bTODO\b/i },
15
+ { issue: 'placeholder-fixme', pattern: /\bFIXME\b/i },
16
+ { issue: 'placeholder-tbd', pattern: /\bTBD\b/i },
17
+ { issue: 'placeholder-template-token', pattern: /\{\{[^}\n]+\}\}/ },
18
+ { issue: 'placeholder-bracket-token', pattern: /\[(?:TODO|TBD|PLACEHOLDER|REPLACE|INSERT)[^\]\n]*\]/i },
19
+ { issue: 'placeholder-angle-token', pattern: /<(?:TODO|TBD|PLACEHOLDER|REPLACE|INSERT)[^>\n]*>/i },
20
+ { issue: 'placeholder-unfinished', pattern: /to be completed after implementation/i },
21
+ ];
22
+
23
+ const FACT_KEY_ALIASES = new Map([
24
+ ['app', 'product'],
25
+ ['application', 'product'],
26
+ ['auth', 'auth'],
27
+ ['authentication', 'auth'],
28
+ ['backend', 'backend'],
29
+ ['database', 'database'],
30
+ ['db', 'database'],
31
+ ['frontend', 'frontend'],
32
+ ['framework', 'framework'],
33
+ ['package manager', 'package_manager'],
34
+ ['package_manager', 'package_manager'],
35
+ ['persistence', 'database'],
36
+ ['product', 'product'],
37
+ ['stack', 'stack'],
38
+ ]);
39
+
40
+ function toPosix(filePath) {
41
+ return String(filePath || '').replace(/\\/g, '/');
42
+ }
43
+
44
+ function makeIssue(pathName, issue, message, extra = {}) {
45
+ return {
46
+ path: pathName || null,
47
+ issue,
48
+ message,
49
+ ...extra,
50
+ };
51
+ }
52
+
53
+ function extractManagedBlock(content) {
54
+ const text = String(content || '');
55
+ const start = text.indexOf(ANALYZE_MANAGED_START);
56
+ const end = text.indexOf(ANALYZE_MANAGED_END);
57
+ if (start < 0 || end <= start) {
58
+ return {
59
+ ok: false,
60
+ content: '',
61
+ issue: start < 0 && end < 0 ? 'managed-block-missing' : 'managed-block-unbalanced',
62
+ };
63
+ }
64
+ return {
65
+ ok: true,
66
+ content: text.slice(start + ANALYZE_MANAGED_START.length, end),
67
+ issue: '',
68
+ };
69
+ }
70
+
71
+ function readRelativeFile(repoRoot, relativePath) {
72
+ const normalized = toPosix(relativePath);
73
+ const absolute = path.resolve(repoRoot, normalized);
74
+ const repo = path.resolve(repoRoot);
75
+ const relative = path.relative(repo, absolute);
76
+ if (relative.startsWith('..') || path.isAbsolute(relative)) {
77
+ return {
78
+ ok: false,
79
+ path: normalized,
80
+ content: '',
81
+ issue: 'path-outside-repo',
82
+ message: `path is outside repository: ${normalized}`,
83
+ };
84
+ }
85
+ if (!fs.existsSync(absolute)) {
86
+ return {
87
+ ok: false,
88
+ path: normalized,
89
+ content: '',
90
+ issue: 'missing-written-doc',
91
+ message: `written doc is missing: ${normalized}`,
92
+ };
93
+ }
94
+ return {
95
+ ok: true,
96
+ path: normalized,
97
+ content: fs.readFileSync(absolute, 'utf8'),
98
+ };
99
+ }
100
+
101
+ function collectChangedDocPaths(report) {
102
+ const fromWritten = Array.isArray(report?.written_docs) ? report.written_docs : [];
103
+ const fromPlan = Array.isArray(report?.write_plan)
104
+ ? report.write_plan.filter((item) => item.action && item.action !== 'skip').map((item) => item.path)
105
+ : [];
106
+ return [...new Set([...fromWritten, ...fromPlan].map(toPosix).filter(Boolean))].sort();
107
+ }
108
+
109
+ function addSchemaValidation(report, errors) {
110
+ try {
111
+ normalizeAnalyzeProjectAnalysis(report.analysis, {
112
+ selectedFiles: report.selected_files || [],
113
+ promptFiles: report.prompt?.files || [],
114
+ });
115
+ } catch (error) {
116
+ for (const issue of error.issues || []) {
117
+ errors.push(makeIssue(issue.path, issue.issue || 'analysis-schema-invalid', issue.message || error.message));
118
+ }
119
+ }
120
+
121
+ try {
122
+ normalizeAnalyzeProjectDocProposal(report.doc_proposal);
123
+ } catch (error) {
124
+ for (const issue of error.issues || []) {
125
+ errors.push(makeIssue(issue.path || issue.pathName, issue.issue || 'doc-proposal-schema-invalid', issue.message || error.message));
126
+ }
127
+ }
128
+ }
129
+
130
+ function addManifestValidation(repoRoot, report, errors) {
131
+ if (!report?.snapshot?.manifestPath) {
132
+ errors.push(makeIssue('snapshot.manifestPath', 'snapshot-manifest-missing', 'snapshot manifest path is missing from write report.'));
133
+ return;
134
+ }
135
+
136
+ const manifest = readRelativeFile(repoRoot, report.snapshot.manifestPath);
137
+ if (!manifest.ok) {
138
+ errors.push(makeIssue(manifest.path, manifest.issue, manifest.message));
139
+ return;
140
+ }
141
+
142
+ try {
143
+ const parsed = JSON.parse(manifest.content);
144
+ const expectedPaths = collectChangedDocPaths(report);
145
+ const manifestPaths = new Set((parsed.entries || []).map((entry) => toPosix(entry.path)));
146
+ for (const expectedPath of expectedPaths) {
147
+ if (!manifestPaths.has(expectedPath)) {
148
+ errors.push(makeIssue(expectedPath, 'snapshot-manifest-entry-missing', `snapshot manifest does not contain an entry for ${expectedPath}.`));
149
+ }
150
+ }
151
+ } catch (error) {
152
+ errors.push(makeIssue(report.snapshot.manifestPath, 'snapshot-manifest-invalid-json', error.message));
153
+ }
154
+ }
155
+
156
+ function addPlaceholderValidation(docPath, managedContent, errors) {
157
+ for (const { issue, pattern } of PLACEHOLDER_PATTERNS) {
158
+ if (pattern.test(managedContent)) {
159
+ errors.push(makeIssue(docPath, issue, `critical placeholder remains in generated managed block: ${issue}`));
160
+ }
161
+ }
162
+ }
163
+
164
+ function normalizeFactValue(value) {
165
+ return String(value || '')
166
+ .replace(/[`*_]/g, '')
167
+ .replace(/\s+/g, ' ')
168
+ .trim()
169
+ .replace(/[.;,]+$/g, '')
170
+ .toLowerCase();
171
+ }
172
+
173
+ function isUnknownFactValue(value) {
174
+ const normalized = normalizeFactValue(value);
175
+ return !normalized
176
+ || normalized === 'unknown'
177
+ || normalized === 'none'
178
+ || normalized === 'n/a'
179
+ || normalized === 'needs confirmation'
180
+ || normalized === 'needs_confirmation'
181
+ || normalized === 'to confirm'
182
+ || normalized === 'not confirmed';
183
+ }
184
+
185
+ function extractFactEntries(docPath, managedContent) {
186
+ const facts = new Map();
187
+ const lines = String(managedContent || '').split(/\r?\n/);
188
+
189
+ for (const [index, rawLine] of lines.entries()) {
190
+ const line = rawLine
191
+ .replace(/^#+\s*/, '')
192
+ .replace(/^[-*]\s*/, '')
193
+ .trim();
194
+ const match = line.match(/^([A-Za-z _-]{2,32})\s*:\s*(.+)$/);
195
+ if (!match) {
196
+ continue;
197
+ }
198
+
199
+ const rawKey = match[1].trim().toLowerCase().replace(/[-\s]+/g, ' ');
200
+ const key = FACT_KEY_ALIASES.get(rawKey);
201
+ if (!key) {
202
+ continue;
203
+ }
204
+
205
+ const value = match[2].trim();
206
+ if (isUnknownFactValue(value)) {
207
+ continue;
208
+ }
209
+
210
+ if (!facts.has(key)) {
211
+ facts.set(key, []);
212
+ }
213
+ facts.get(key).push({
214
+ path: docPath,
215
+ line: index + 1,
216
+ value,
217
+ normalized: normalizeFactValue(value),
218
+ });
219
+ }
220
+
221
+ return facts;
222
+ }
223
+
224
+ function addFactConflicts(docsByPath, warnings, errors, options = {}) {
225
+ const projectMap = docsByPath.get('docs/PROJECT_MAP.md');
226
+ if (!projectMap?.managedBlock?.ok) {
227
+ return;
228
+ }
229
+
230
+ const projectFacts = extractFactEntries('docs/PROJECT_MAP.md', projectMap.managedBlock.content);
231
+ const contextPaths = ['docs/CONTEXTO.md', 'docs/AI_CONTEXT.md'];
232
+
233
+ for (const contextPath of contextPaths) {
234
+ const contextDoc = docsByPath.get(contextPath);
235
+ if (!contextDoc?.managedBlock?.ok) {
236
+ continue;
237
+ }
238
+ const contextFacts = extractFactEntries(contextPath, contextDoc.managedBlock.content);
239
+ for (const [key, entries] of contextFacts.entries()) {
240
+ const mapEntries = projectFacts.get(key) || [];
241
+ for (const contextEntry of entries) {
242
+ for (const mapEntry of mapEntries) {
243
+ if (contextEntry.normalized === mapEntry.normalized) {
244
+ continue;
245
+ }
246
+ const issue = makeIssue(contextPath, 'deterministic-doc-conflict', `${contextPath} says ${key}=${contextEntry.value}, but docs/PROJECT_MAP.md says ${key}=${mapEntry.value}.`, {
247
+ key,
248
+ project_map_value: mapEntry.value,
249
+ context_value: contextEntry.value,
250
+ });
251
+ if (options.strict === true) {
252
+ errors.push(issue);
253
+ } else {
254
+ warnings.push(issue);
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ }
261
+
262
+ function validateAnalyzeProjectPostWrite(repoRoot, report, options = {}) {
263
+ const errors = [];
264
+ const warnings = [];
265
+ const checkedDocs = [];
266
+ const docsByPath = new Map();
267
+
268
+ addSchemaValidation(report || {}, errors);
269
+ addManifestValidation(repoRoot, report || {}, errors);
270
+
271
+ for (const docPath of collectChangedDocPaths(report || {})) {
272
+ const file = readRelativeFile(repoRoot, docPath);
273
+ checkedDocs.push(docPath);
274
+ if (!file.ok) {
275
+ errors.push(makeIssue(file.path, file.issue, file.message));
276
+ continue;
277
+ }
278
+
279
+ const managedBlock = extractManagedBlock(file.content);
280
+ docsByPath.set(docPath, {
281
+ content: file.content,
282
+ managedBlock,
283
+ });
284
+ if (!managedBlock.ok) {
285
+ errors.push(makeIssue(docPath, managedBlock.issue, `Quiver managed block is missing or unbalanced in ${docPath}.`));
286
+ continue;
287
+ }
288
+ addPlaceholderValidation(docPath, managedBlock.content, errors);
289
+ }
290
+
291
+ addFactConflicts(docsByPath, warnings, errors, { strict: options.strict === true });
292
+
293
+ return {
294
+ schema_version: 1,
295
+ kind: VALIDATION_KIND,
296
+ strict: options.strict === true,
297
+ ok: errors.length === 0,
298
+ checked_docs: checkedDocs,
299
+ errors,
300
+ warnings,
301
+ };
302
+ }
303
+
304
+ module.exports = {
305
+ VALIDATION_KIND,
306
+ extractFactEntries,
307
+ extractManagedBlock,
308
+ validateAnalyzeProjectPostWrite,
309
+ };
@@ -33,7 +33,10 @@ function escapeRegExp(value) {
33
33
  }
34
34
 
35
35
  function redactSensitiveLocalValues(text, options = {}) {
36
- let result = redactSecrets(text);
36
+ let result = redactSecrets(text)
37
+ .replace(/\bsk-[A-Za-z0-9_-]{16,}\b/g, '[REDACTED]')
38
+ .replace(/\bghp_[A-Za-z0-9_]{16,}\b/g, '[REDACTED]')
39
+ .replace(/\bgithub_pat_[A-Za-z0-9_]{16,}\b/g, '[REDACTED]');
37
40
  const replacements = [];
38
41
 
39
42
  if (options.projectRoot) {
@@ -31,6 +31,7 @@ const SUPPORTED_COMMAND_MODES = new Set([
31
31
  const SUPPORTED_AI_COMMANDS = new Set([
32
32
  'active-slice',
33
33
  'agent',
34
+ 'analyze-project',
34
35
  'approve',
35
36
  'approval-status',
36
37
  'approvals',
@@ -272,6 +272,7 @@ module.exports = {
272
272
  'ai.plan.with_planner_already_active': 'Planner mode: already active for ai plan; --with-planner is accepted for UX consistency.',
273
273
  'ai.planner.progress.agent_failed': 'Agent failed',
274
274
  'ai.planner.progress.agent_finished': 'Agent finished',
275
+ 'ai.planner.progress.analyze_project': 'Analyzing project',
275
276
  'ai.planner.progress.detecting_structure': 'Detecting structure',
276
277
  'ai.planner.progress.onboarding': 'Running onboarding',
277
278
  'ai.planner.progress.plan': 'Running plan {phase}',
@@ -387,6 +387,7 @@ module.exports = {
387
387
  'ai.plan.with_planner_already_active': 'Modo planner: ya esta activo para ai plan; --with-planner se acepta por consistencia de UX.',
388
388
  'ai.planner.progress.agent_failed': 'Fallo el agente',
389
389
  'ai.planner.progress.agent_finished': 'Agente finalizado',
390
+ 'ai.planner.progress.analyze_project': 'Analizando proyecto',
390
391
  'ai.planner.progress.detecting_structure': 'Detectando estructura',
391
392
  'ai.planner.progress.onboarding': 'Ejecutando onboarding',
392
393
  'ai.planner.progress.plan': 'Ejecutando plan {phase}',
@@ -1,5 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "run_id": "run-2026-06-09t19-14-39z",
4
- "approvals": []
5
- }
@@ -1,2 +0,0 @@
1
- # Decisions
2
-
@@ -1,97 +0,0 @@
1
- # Quiver Documentation Index
2
-
3
- **Last updated:** 2026-05-29
4
-
5
- Use this file as the first documentation map before planning, implementing, reviewing, or opening PRs in this repository. Prefer the smallest set of linked documents that fits the task.
6
-
7
- ## Start Here
8
-
9
- - **Public overview:** [`../README.md`](../README.md)
10
- - **AI guide:** [`../README_FOR_AI.md`](../README_FOR_AI.md)
11
- - **CLI UX standards:** [`./CLI_UX_GUIDE.md`](./CLI_UX_GUIDE.md)
12
- - **Command reference:** [`./reference/commands.md`](./reference/commands.md)
13
- - **Slice JSON schema:** [`./reference/slice-schema.md`](./reference/slice-schema.md)
14
- - **Troubleshooting:** [`./TROUBLESHOOTING.md`](./TROUBLESHOOTING.md)
15
- - **Git and PR workflow:** [`./GITFLOW_PR_GUIDE.md`](./GITFLOW_PR_GUIDE.md)
16
-
17
- ## Getting Started
18
-
19
- - **Install and npx behavior:** [`./getting-started/installation.md`](./getting-started/installation.md)
20
- - **macOS setup:** [`./getting-started/macos.md`](./getting-started/macos.md)
21
- - **Linux setup:** [`./getting-started/linux.md`](./getting-started/linux.md)
22
- - **Windows PowerShell setup:** [`./getting-started/windows-powershell.md`](./getting-started/windows-powershell.md)
23
- - **Windows Git Bash / WSL setup:** [`./getting-started/windows-git-bash-wsl.md`](./getting-started/windows-git-bash-wsl.md)
24
-
25
- ## Workflows
26
-
27
- - **New project:** [`./workflows/new-project.md`](./workflows/new-project.md)
28
- - **Existing project:** [`./workflows/existing-project.md`](./workflows/existing-project.md)
29
- - **Legacy Quiver project:** [`./workflows/legacy-quiver-project.md`](./workflows/legacy-quiver-project.md)
30
- - **Full AI spec-to-PR flow:** [`./workflows/full-ai-spec-to-pr.md`](./workflows/full-ai-spec-to-pr.md)
31
-
32
- ## AI Configuration
33
-
34
- - **AI principles:** [`./ai/PRINCIPLES.md`](./ai/PRINCIPLES.md)
35
- - **AI rules:** [`./ai/RULES.yaml`](./ai/RULES.yaml)
36
-
37
- ## Specs
38
-
39
- Canonical specs live outside `docs/` in [`../specs/`](../specs/).
40
-
41
- Recent specs:
42
-
43
- - [`../specs/quiver-v45-ci-actions-node24-readiness/SPEC.md`](../specs/quiver-v45-ci-actions-node24-readiness/SPEC.md)
44
- - [`../specs/quiver-v44-provider-live-output-tui-lite/SPEC.md`](../specs/quiver-v44-provider-live-output-tui-lite/SPEC.md)
45
- - [`../specs/quiver-v43-cli-i18n-audit-release-readiness/SPEC.md`](../specs/quiver-v43-cli-i18n-audit-release-readiness/SPEC.md)
46
- - [`../specs/quiver-v42-cli-i18n-generated-docs/SPEC.md`](../specs/quiver-v42-cli-i18n-generated-docs/SPEC.md)
47
- - [`../specs/quiver-v41-cli-i18n-ai-lifecycle/SPEC.md`](../specs/quiver-v41-cli-i18n-ai-lifecycle/SPEC.md)
48
- - [`../specs/quiver-v40-cli-i18n-spec-slice-workflows/SPEC.md`](../specs/quiver-v40-cli-i18n-spec-slice-workflows/SPEC.md)
49
- - [`../specs/quiver-v39-cli-i18n-setup-onboarding/SPEC.md`](../specs/quiver-v39-cli-i18n-setup-onboarding/SPEC.md)
50
- - [`../specs/quiver-v38-cli-i18n-read-only-commands/SPEC.md`](../specs/quiver-v38-cli-i18n-read-only-commands/SPEC.md)
51
- - [`../specs/quiver-v37-cli-i18n-foundation/SPEC.md`](../specs/quiver-v37-cli-i18n-foundation/SPEC.md)
52
- - [`../specs/quiver-v36-ai-run-watch-portable/SPEC.md`](../specs/quiver-v36-ai-run-watch-portable/SPEC.md)
53
- - [`../specs/quiver-v35-compact-dashboard-version-ux/SPEC.md`](../specs/quiver-v35-compact-dashboard-version-ux/SPEC.md)
54
- - [`../specs/quiver-v34-cli-dashboard-status/SPEC.md`](../specs/quiver-v34-cli-dashboard-status/SPEC.md)
55
-
56
- For implementation work, read the target spec and the target slice's `slice.json`, `EXECUTION_BRIEF.md`, and `CLOSURE_BRIEF.md` only.
57
-
58
- ## Templates
59
-
60
- These files are templates for generated projects or optional profiles. Do not treat them as concrete project state unless the task is about templates or init output:
61
-
62
- - [`./AI_CONTEXT.md.template`](./AI_CONTEXT.md.template)
63
- - [`./AI_ONBOARDING_PROMPT.md.template`](./AI_ONBOARDING_PROMPT.md.template)
64
- - [`./COMMANDS.md.template`](./COMMANDS.md.template)
65
- - [`./CONTEXTO.md.template`](./CONTEXTO.md.template)
66
- - [`./DECISIONS.md.template`](./DECISIONS.md.template)
67
- - [`./DOCUMENTATION_GUIDE.md.template`](./DOCUMENTATION_GUIDE.md.template)
68
- - [`./STATUS.md.template`](./STATUS.md.template)
69
- - [`./SUPPORT_MATRIX.md.template`](./SUPPORT_MATRIX.md.template)
70
- - [`./TESTING_GUIDE_FOR_AI.md.template`](./TESTING_GUIDE_FOR_AI.md.template)
71
- - [`./WORKFLOW.md.template`](./WORKFLOW.md.template)
72
- - [`./ai/LESSONS.md.template`](./ai/LESSONS.md.template)
73
-
74
- ## Task Routing
75
-
76
- - **Documentation/index work:** read this index, then the affected docs only.
77
- - **CLI UX, output, dashboard, or version work:** read [`./CLI_UX_GUIDE.md`](./CLI_UX_GUIDE.md), [`./reference/commands.md`](./reference/commands.md), and the relevant spec.
78
- - **Spec or slice execution:** read the relevant [`../specs/`](../specs/) package, especially the target slice files.
79
- - **PR creation:** read [`./GITFLOW_PR_GUIDE.md`](./GITFLOW_PR_GUIDE.md) and the relevant `pr.md`.
80
- - **Troubleshooting or install issues:** read [`./TROUBLESHOOTING.md`](./TROUBLESHOOTING.md) and the matching getting-started guide.
81
- - **AI agent behavior:** read [`../README_FOR_AI.md`](../README_FOR_AI.md), [`./ai/PRINCIPLES.md`](./ai/PRINCIPLES.md), and [`./ai/RULES.yaml`](./ai/RULES.yaml).
82
-
83
- ## Known Documentation Debt
84
-
85
- The following concrete docs are referenced by templates or generated-project guidance but do not currently exist as repository docs:
86
-
87
- - `docs/CONTEXTO.md`
88
- - `docs/WORKFLOW.md`
89
- - `docs/STATUS.md`
90
- - `docs/SUPPORT_MATRIX.md`
91
- - `docs/TESTING_GUIDE_FOR_AI.md`
92
- - `docs/AI_CONTEXT.md`
93
- - `docs/AI_ONBOARDING_PROMPT.md`
94
- - `docs/DECISIONS.md`
95
- - `docs/ai/LESSONS.md`
96
-
97
- Use the `.template` files only when the task is about generated project output or template maintenance.
@@ -1,61 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "run_id": "run-2026-06-09t19-14-39z",
4
- "created_at": "2026-06-09T19:14:39.889Z",
5
- "entries": [
6
- {
7
- "path": "docs/INDEX.md",
8
- "action": "update",
9
- "existed": true,
10
- "snapshot_path": ".quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/docs/INDEX.md"
11
- },
12
- {
13
- "path": "docs/PROJECT_MAP.md",
14
- "action": "create",
15
- "existed": false,
16
- "snapshot_path": null
17
- },
18
- {
19
- "path": "docs/AI_CONTEXT.md",
20
- "action": "create",
21
- "existed": false,
22
- "snapshot_path": null
23
- },
24
- {
25
- "path": "docs/AI_ONBOARDING_PROMPT.md",
26
- "action": "create",
27
- "existed": false,
28
- "snapshot_path": null
29
- },
30
- {
31
- "path": "docs/CONTEXTO.md",
32
- "action": "create",
33
- "existed": false,
34
- "snapshot_path": null
35
- },
36
- {
37
- "path": "docs/WORKFLOW.md",
38
- "action": "create",
39
- "existed": false,
40
- "snapshot_path": null
41
- },
42
- {
43
- "path": "docs/ARCHITECTURE.md",
44
- "action": "create",
45
- "existed": false,
46
- "snapshot_path": null
47
- },
48
- {
49
- "path": "docs/STATUS.md",
50
- "action": "create",
51
- "existed": false,
52
- "snapshot_path": null
53
- },
54
- {
55
- "path": "docs/DECISIONS.md",
56
- "action": "create",
57
- "existed": false,
58
- "snapshot_path": null
59
- }
60
- ]
61
- }
@@ -1,28 +0,0 @@
1
- {
2
- "schema_version": 1,
3
- "run_id": "run-2026-06-09t19-14-39z",
4
- "status": "active",
5
- "phase": "onboarding-ready",
6
- "spec_slug": null,
7
- "created_at": "2026-06-09T19:14:39.888Z",
8
- "updated_at": "2026-06-09T19:14:39.894Z",
9
- "requirement": {
10
- "source_file": null,
11
- "path": ".quiver/runs/run-2026-06-09t19-14-39z/requirement.md"
12
- },
13
- "approvals_path": ".quiver/runs/run-2026-06-09t19-14-39z/approvals.json",
14
- "decisions_path": ".quiver/runs/run-2026-06-09t19-14-39z/decisions.md",
15
- "history": [
16
- {
17
- "phase": "created",
18
- "command": "ai prepare-context",
19
- "at": "2026-06-09T19:14:39.888Z"
20
- },
21
- {
22
- "phase": "onboarding-ready",
23
- "command": "ai prepare-context",
24
- "artifact": ".quiver/runs/run-2026-06-09t19-14-39z/snapshots/20260609T191439Z/manifest.json",
25
- "at": "2026-06-09T19:14:39.894Z"
26
- }
27
- ]
28
- }
package/ACTIVE_SLICES.md DELETED
@@ -1,43 +0,0 @@
1
- # Active Slices
2
-
3
- > Archivo local generado por `tools/scripts/refresh-active-slices.sh`.
4
- > No se trackea en git.
5
-
6
- **Actualizado:** 2026-06-09T19:15:40.959Z
7
-
8
- ## Convencion
9
-
10
- - `Alias`: identificador corto para hablar del slice sin ambiguedad
11
- - `Spec`: directorio del spec
12
- - `slice-00`: baseline congelado, solo referencia
13
- - `slice-01+`: implementacion o revalidacion
14
-
15
- ## Checkout Principal
16
-
17
- | Branch | Path |
18
- |--------|------|
19
- | release/create-quiver-0.16.0 | /Users/fabrijk/Documents/Work/Proyectos Personales/nika/frameworks/quiver |
20
-
21
- ## Implementacion Activa
22
-
23
- | Alias | Spec | Slice | Branch | Estado | Path |
24
- |-------|------|-------|--------|--------|------|
25
- | QUI-01 | quiver-v52-schema-docs-release-hygiene | slice-01-json-schema-for-slice-json | feature/QUIVER-52-01-v52-slice-json-schema | completed | /Users/fabrijk/Documents/Work/Proyectos Personales/nika/frameworks/.worktrees/quiver/feature-QUIVER-52-01-v52-slice-json-schema |
26
-
27
- ## Baselines Congelados
28
-
29
- | Alias | Spec | Slice | Branch | Estado | Path |
30
- |-------|------|-------|--------|--------|------|
31
- | - | - | - | - | - | - |
32
-
33
- ## Worktrees Auxiliares
34
-
35
- | Branch | Path |
36
- |--------|------|
37
- | - | - |
38
-
39
- ## Recomendacion Operativa
40
-
41
- - En VS Code, dejar visibles solo `develop` y la tabla de `Implementacion Activa`.
42
- - Tratar la tabla de `Baselines Congelados` como solo lectura.
43
- - Cerrar visualmente los `Worktrees Auxiliares` salvo cuando estes trabajando ese PR o esa tarea de proceso.