@varveai/adit-plans 0.3.0 → 0.3.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 (33) hide show
  1. package/dist/index.d.ts +7 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +8 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/templates/doc-api-reference.d.ts +6 -0
  6. package/dist/templates/doc-api-reference.d.ts.map +1 -0
  7. package/dist/templates/doc-api-reference.js +50 -0
  8. package/dist/templates/doc-api-reference.js.map +1 -0
  9. package/dist/templates/doc-architecture.d.ts +6 -0
  10. package/dist/templates/doc-architecture.d.ts.map +1 -0
  11. package/dist/templates/doc-architecture.js +51 -0
  12. package/dist/templates/doc-architecture.js.map +1 -0
  13. package/dist/templates/doc-business-context.d.ts +6 -0
  14. package/dist/templates/doc-business-context.d.ts.map +1 -0
  15. package/dist/templates/doc-business-context.js +51 -0
  16. package/dist/templates/doc-business-context.js.map +1 -0
  17. package/dist/templates/doc-conventions.d.ts +6 -0
  18. package/dist/templates/doc-conventions.d.ts.map +1 -0
  19. package/dist/templates/doc-conventions.js +60 -0
  20. package/dist/templates/doc-conventions.js.map +1 -0
  21. package/dist/templates/doc-data-model.d.ts +6 -0
  22. package/dist/templates/doc-data-model.d.ts.map +1 -0
  23. package/dist/templates/doc-data-model.js +57 -0
  24. package/dist/templates/doc-data-model.js.map +1 -0
  25. package/dist/templates/doc-project-overview.d.ts +6 -0
  26. package/dist/templates/doc-project-overview.d.ts.map +1 -0
  27. package/dist/templates/doc-project-overview.js +48 -0
  28. package/dist/templates/doc-project-overview.js.map +1 -0
  29. package/dist/templates/doc-spec.d.ts +45 -0
  30. package/dist/templates/doc-spec.d.ts.map +1 -0
  31. package/dist/templates/doc-spec.js +228 -0
  32. package/dist/templates/doc-spec.js.map +1 -0
  33. package/package.json +2 -2
package/dist/index.d.ts CHANGED
@@ -5,4 +5,11 @@ export { renderIntentTemplate } from "./templates/intent.js";
5
5
  export { renderRoadmapTemplate } from "./templates/roadmap.js";
6
6
  export { renderTaskTemplate } from "./templates/task.js";
7
7
  export { createPlanManager, type PlanManager, } from "./generator/plan-manager.js";
8
+ export { DOC_TYPES, DOC_TYPE_IDS, extractH2Headings, extractSectionContents, classifyDocument, validateDocument, type DocTypeSpec, type DocValidationResult, } from "./templates/doc-spec.js";
9
+ export { renderProjectOverviewTemplate } from "./templates/doc-project-overview.js";
10
+ export { renderArchitectureTemplate } from "./templates/doc-architecture.js";
11
+ export { renderApiReferenceTemplate } from "./templates/doc-api-reference.js";
12
+ export { renderDataModelTemplate } from "./templates/doc-data-model.js";
13
+ export { renderBusinessContextTemplate } from "./templates/doc-business-context.js";
14
+ export { renderConventionsTemplate } from "./templates/doc-conventions.js";
8
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,GACjB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,GACjB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -5,4 +5,12 @@ export { renderIntentTemplate } from "./templates/intent.js";
5
5
  export { renderRoadmapTemplate } from "./templates/roadmap.js";
6
6
  export { renderTaskTemplate } from "./templates/task.js";
7
7
  export { createPlanManager, } from "./generator/plan-manager.js";
8
+ // Document spec and templates
9
+ export { DOC_TYPES, DOC_TYPE_IDS, extractH2Headings, extractSectionContents, classifyDocument, validateDocument, } from "./templates/doc-spec.js";
10
+ export { renderProjectOverviewTemplate } from "./templates/doc-project-overview.js";
11
+ export { renderArchitectureTemplate } from "./templates/doc-architecture.js";
12
+ export { renderApiReferenceTemplate } from "./templates/doc-api-reference.js";
13
+ export { renderDataModelTemplate } from "./templates/doc-data-model.js";
14
+ export { renderBusinessContextTemplate } from "./templates/doc-business-context.js";
15
+ export { renderConventionsTemplate } from "./templates/doc-conventions.js";
8
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,iBAAiB,GAElB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,iBAAiB,GAElB,MAAM,6BAA6B,CAAC;AAErC,8BAA8B;AAC9B,OAAO,EACL,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * API Reference template — endpoint documentation.
3
+ */
4
+ export declare const DOC_API_REFERENCE_TEMPLATE = "# API Reference: {{title}}\n\n## Endpoints\n<!-- Document each API endpoint group. -->\n\n### [Method] /api/path\n- **Description**:\n- **Auth required**: Yes/No\n- **Request body**:\n- **Response**:\n- **Status codes**: 200, 400, 401, 404, 500\n\n## Authentication\n<!-- How API authentication works. Token types, header format. -->\n\n\n## Error Codes\n<!-- Standard error response format and error code table. -->\n\n| Code | Meaning | When it occurs |\n|------|---------|---------------|\n| | | |\n\n## Rate Limiting\n<!-- Rate limiting policy, headers, and quotas. -->\n\n\n## Pagination\n<!-- How paginated endpoints work. Query params, response format. -->\n\n\n## Versioning\n<!-- API versioning strategy. Current version, deprecation policy. -->\n\n\n## Webhooks\n<!-- Outgoing webhook events, payload format, retry policy. -->\n\n\n---\n*Created: {{date}}*\n*Document type: api-reference*\n";
5
+ export declare function renderApiReferenceTemplate(title: string): string;
6
+ //# sourceMappingURL=doc-api-reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-api-reference.d.ts","sourceRoot":"","sources":["../../src/templates/doc-api-reference.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,0BAA0B,y4BA0CtC,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhE"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * API Reference template — endpoint documentation.
3
+ */
4
+ export const DOC_API_REFERENCE_TEMPLATE = `# API Reference: {{title}}
5
+
6
+ ## Endpoints
7
+ <!-- Document each API endpoint group. -->
8
+
9
+ ### [Method] /api/path
10
+ - **Description**:
11
+ - **Auth required**: Yes/No
12
+ - **Request body**:
13
+ - **Response**:
14
+ - **Status codes**: 200, 400, 401, 404, 500
15
+
16
+ ## Authentication
17
+ <!-- How API authentication works. Token types, header format. -->
18
+
19
+
20
+ ## Error Codes
21
+ <!-- Standard error response format and error code table. -->
22
+
23
+ | Code | Meaning | When it occurs |
24
+ |------|---------|---------------|
25
+ | | | |
26
+
27
+ ## Rate Limiting
28
+ <!-- Rate limiting policy, headers, and quotas. -->
29
+
30
+
31
+ ## Pagination
32
+ <!-- How paginated endpoints work. Query params, response format. -->
33
+
34
+
35
+ ## Versioning
36
+ <!-- API versioning strategy. Current version, deprecation policy. -->
37
+
38
+
39
+ ## Webhooks
40
+ <!-- Outgoing webhook events, payload format, retry policy. -->
41
+
42
+
43
+ ---
44
+ *Created: {{date}}*
45
+ *Document type: api-reference*
46
+ `;
47
+ export function renderApiReferenceTemplate(title) {
48
+ return DOC_API_REFERENCE_TEMPLATE.replace(/\{\{title\}\}/g, title).replace(/\{\{date\}\}/g, new Date().toISOString().substring(0, 10));
49
+ }
50
+ //# sourceMappingURL=doc-api-reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-api-reference.js","sourceRoot":"","sources":["../../src/templates/doc-api-reference.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CzC,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,OAAO,0BAA0B,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,OAAO,CACxE,eAAe,EACf,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Architecture template — system design and component relationships.
3
+ */
4
+ export declare const DOC_ARCHITECTURE_TEMPLATE = "# Architecture: {{title}}\n\n## Components\n<!-- List each major component/module with its responsibility. -->\n\n### Component 1\n<!-- Responsibility, key files, public API surface. -->\n\n\n## Data Flow\n<!-- How does data move through the system? Key pipelines and transformations. -->\n\n\n## Dependencies\n<!-- External services, libraries, and infrastructure this system depends on. -->\n\n| Dependency | Purpose | Critical? |\n|-----------|---------|-----------|\n| | | |\n\n## Design Decisions\n<!-- Key architectural decisions and their rationale (ADR format). -->\n\n### Decision 1\n- **Context**: Why was this decision needed?\n- **Options considered**:\n- **Outcome**: What was chosen and why.\n\n## Security\n<!-- Authentication, authorization, data protection approach. -->\n\n\n## Performance\n<!-- Performance characteristics, bottlenecks, caching strategy. -->\n\n\n## Scalability\n<!-- How the system scales. Known limits. -->\n\n\n---\n*Created: {{date}}*\n*Document type: architecture*\n";
5
+ export declare function renderArchitectureTemplate(title: string): string;
6
+ //# sourceMappingURL=doc-architecture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-architecture.d.ts","sourceRoot":"","sources":["../../src/templates/doc-architecture.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,yBAAyB,o/BA2CrC,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhE"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Architecture template — system design and component relationships.
3
+ */
4
+ export const DOC_ARCHITECTURE_TEMPLATE = `# Architecture: {{title}}
5
+
6
+ ## Components
7
+ <!-- List each major component/module with its responsibility. -->
8
+
9
+ ### Component 1
10
+ <!-- Responsibility, key files, public API surface. -->
11
+
12
+
13
+ ## Data Flow
14
+ <!-- How does data move through the system? Key pipelines and transformations. -->
15
+
16
+
17
+ ## Dependencies
18
+ <!-- External services, libraries, and infrastructure this system depends on. -->
19
+
20
+ | Dependency | Purpose | Critical? |
21
+ |-----------|---------|-----------|
22
+ | | | |
23
+
24
+ ## Design Decisions
25
+ <!-- Key architectural decisions and their rationale (ADR format). -->
26
+
27
+ ### Decision 1
28
+ - **Context**: Why was this decision needed?
29
+ - **Options considered**:
30
+ - **Outcome**: What was chosen and why.
31
+
32
+ ## Security
33
+ <!-- Authentication, authorization, data protection approach. -->
34
+
35
+
36
+ ## Performance
37
+ <!-- Performance characteristics, bottlenecks, caching strategy. -->
38
+
39
+
40
+ ## Scalability
41
+ <!-- How the system scales. Known limits. -->
42
+
43
+
44
+ ---
45
+ *Created: {{date}}*
46
+ *Document type: architecture*
47
+ `;
48
+ export function renderArchitectureTemplate(title) {
49
+ return DOC_ARCHITECTURE_TEMPLATE.replace(/\{\{title\}\}/g, title).replace(/\{\{date\}\}/g, new Date().toISOString().substring(0, 10));
50
+ }
51
+ //# sourceMappingURL=doc-architecture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-architecture.js","sourceRoot":"","sources":["../../src/templates/doc-architecture.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CxC,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,OAAO,yBAAyB,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,OAAO,CACvE,eAAe,EACf,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Business Context template — goals, users, and success criteria.
3
+ */
4
+ export declare const DOC_BUSINESS_CONTEXT_TEMPLATE = "# Business Context: {{title}}\n\n## Goals\n<!-- What business objectives does this project serve? -->\n\n1.\n2.\n3.\n\n## Users\n<!-- Target user personas and their needs. -->\n\n### Persona 1\n<!-- Role, technical level, primary use case, pain points. -->\n\n## Success Criteria\n<!-- How will you measure success? Specific, quantifiable. -->\n\n- [ ]\n- [ ]\n- [ ]\n\n## User Stories\n<!-- Key user stories in \"As a ... I want ... So that ...\" format. -->\n\n## Constraints\n<!-- Business or technical constraints that bound the solution. -->\n\n\n## Metrics\n<!-- Key metrics that indicate the system is working as intended. -->\n\n| Metric | Target | How measured |\n|--------|--------|-------------|\n| | | |\n\n## Competitors\n<!-- Existing solutions in this space. What they do well, gaps. -->\n\n\n---\n*Created: {{date}}*\n*Document type: business-context*\n";
5
+ export declare function renderBusinessContextTemplate(title: string): string;
6
+ //# sourceMappingURL=doc-business-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-business-context.d.ts","sourceRoot":"","sources":["../../src/templates/doc-business-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,6BAA6B,02BA2CzC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnE"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Business Context template — goals, users, and success criteria.
3
+ */
4
+ export const DOC_BUSINESS_CONTEXT_TEMPLATE = `# Business Context: {{title}}
5
+
6
+ ## Goals
7
+ <!-- What business objectives does this project serve? -->
8
+
9
+ 1.
10
+ 2.
11
+ 3.
12
+
13
+ ## Users
14
+ <!-- Target user personas and their needs. -->
15
+
16
+ ### Persona 1
17
+ <!-- Role, technical level, primary use case, pain points. -->
18
+
19
+ ## Success Criteria
20
+ <!-- How will you measure success? Specific, quantifiable. -->
21
+
22
+ - [ ]
23
+ - [ ]
24
+ - [ ]
25
+
26
+ ## User Stories
27
+ <!-- Key user stories in "As a ... I want ... So that ..." format. -->
28
+
29
+ ## Constraints
30
+ <!-- Business or technical constraints that bound the solution. -->
31
+
32
+
33
+ ## Metrics
34
+ <!-- Key metrics that indicate the system is working as intended. -->
35
+
36
+ | Metric | Target | How measured |
37
+ |--------|--------|-------------|
38
+ | | | |
39
+
40
+ ## Competitors
41
+ <!-- Existing solutions in this space. What they do well, gaps. -->
42
+
43
+
44
+ ---
45
+ *Created: {{date}}*
46
+ *Document type: business-context*
47
+ `;
48
+ export function renderBusinessContextTemplate(title) {
49
+ return DOC_BUSINESS_CONTEXT_TEMPLATE.replace(/\{\{title\}\}/g, title).replace(/\{\{date\}\}/g, new Date().toISOString().substring(0, 10));
50
+ }
51
+ //# sourceMappingURL=doc-business-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-business-context.js","sourceRoot":"","sources":["../../src/templates/doc-business-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C5C,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,OAAO,6BAA6B,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,OAAO,CAC3E,eAAe,EACf,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Conventions template — coding standards and file organization.
3
+ */
4
+ export declare const DOC_CONVENTIONS_TEMPLATE = "# Conventions: {{title}}\n\n## Style Guide\n<!-- Language-specific style rules. Linter/formatter config. -->\n\n### General\n<!-- Rules that apply across all files. -->\n\n### TypeScript / JavaScript\n<!-- TS-specific rules: strict mode, import style, etc. -->\n\n## Naming\n<!-- Naming conventions for variables, functions, classes, files. -->\n\n| Element | Convention | Example |\n|---------|-----------|---------|\n| Variables | camelCase | userName |\n| Constants | UPPER_SNAKE | MAX_SIZE |\n| Functions | camelCase | getUser() |\n| Classes | PascalCase | UserService |\n| Files | kebab-case | user-service.ts |\n\n## File Organization\n<!-- Directory structure and file placement rules. -->\n\n```\nsrc/\n\u251C\u2500\u2500 components/ <!-- UI components -->\n\u251C\u2500\u2500 lib/ <!-- Shared utilities -->\n\u251C\u2500\u2500 pages/ <!-- Route handlers -->\n\u2514\u2500\u2500 types/ <!-- Type definitions -->\n```\n\n## Testing\n<!-- Testing patterns: framework, file naming, what to test. -->\n\n\n## Git Workflow\n<!-- Branch naming, commit message format, PR process. -->\n\n\n## Error Handling\n<!-- How errors are handled, logged, and surfaced. -->\n\n\n## Logging\n<!-- Logging levels, format, and where logs go. -->\n\n\n---\n*Created: {{date}}*\n*Document type: conventions*\n";
5
+ export declare function renderConventionsTemplate(title: string): string;
6
+ //# sourceMappingURL=doc-conventions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-conventions.d.ts","sourceRoot":"","sources":["../../src/templates/doc-conventions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,wBAAwB,6yCAoDpC,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK/D"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Conventions template — coding standards and file organization.
3
+ */
4
+ export const DOC_CONVENTIONS_TEMPLATE = `# Conventions: {{title}}
5
+
6
+ ## Style Guide
7
+ <!-- Language-specific style rules. Linter/formatter config. -->
8
+
9
+ ### General
10
+ <!-- Rules that apply across all files. -->
11
+
12
+ ### TypeScript / JavaScript
13
+ <!-- TS-specific rules: strict mode, import style, etc. -->
14
+
15
+ ## Naming
16
+ <!-- Naming conventions for variables, functions, classes, files. -->
17
+
18
+ | Element | Convention | Example |
19
+ |---------|-----------|---------|
20
+ | Variables | camelCase | userName |
21
+ | Constants | UPPER_SNAKE | MAX_SIZE |
22
+ | Functions | camelCase | getUser() |
23
+ | Classes | PascalCase | UserService |
24
+ | Files | kebab-case | user-service.ts |
25
+
26
+ ## File Organization
27
+ <!-- Directory structure and file placement rules. -->
28
+
29
+ \`\`\`
30
+ src/
31
+ ├── components/ <!-- UI components -->
32
+ ├── lib/ <!-- Shared utilities -->
33
+ ├── pages/ <!-- Route handlers -->
34
+ └── types/ <!-- Type definitions -->
35
+ \`\`\`
36
+
37
+ ## Testing
38
+ <!-- Testing patterns: framework, file naming, what to test. -->
39
+
40
+
41
+ ## Git Workflow
42
+ <!-- Branch naming, commit message format, PR process. -->
43
+
44
+
45
+ ## Error Handling
46
+ <!-- How errors are handled, logged, and surfaced. -->
47
+
48
+
49
+ ## Logging
50
+ <!-- Logging levels, format, and where logs go. -->
51
+
52
+
53
+ ---
54
+ *Created: {{date}}*
55
+ *Document type: conventions*
56
+ `;
57
+ export function renderConventionsTemplate(title) {
58
+ return DOC_CONVENTIONS_TEMPLATE.replace(/\{\{title\}\}/g, title).replace(/\{\{date\}\}/g, new Date().toISOString().substring(0, 10));
59
+ }
60
+ //# sourceMappingURL=doc-conventions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-conventions.js","sourceRoot":"","sources":["../../src/templates/doc-conventions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDvC,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,OAAO,wBAAwB,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,OAAO,CACtE,eAAe,EACf,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Data Model template — database schemas and entity relationships.
3
+ */
4
+ export declare const DOC_DATA_MODEL_TEMPLATE = "# Data Model: {{title}}\n\n## Models\n<!-- List each database model/entity and its purpose. -->\n\n### ModelName\n<!-- Purpose of this model. Key behaviors. -->\n\n## Fields\n<!-- Document fields for each model. -->\n\n### ModelName\n\n| Field | Type | Required | Default | Description |\n|-------|------|----------|---------|-------------|\n| id | UUID | auto | generated | Primary key |\n\n## Relationships\n<!-- Entity relationships with cardinality. -->\n\n| From | Relationship | To | Description |\n|------|-------------|-----|------------|\n| | has many / belongs to | | |\n\n## Indexes\n<!-- Performance-critical indexes. -->\n\n| Table | Fields | Type | Reason |\n|-------|--------|------|--------|\n| | | unique / btree / gin | |\n\n## Migrations\n<!-- Migration tool and naming convention. How to create and run migrations. -->\n\n\n## Constraints\n<!-- Unique constraints, check constraints, foreign key rules. -->\n\n\n## Enums\n<!-- Enum types used across models. -->\n\n| Enum | Values | Used in |\n|------|--------|---------|\n| | | |\n\n---\n*Created: {{date}}*\n*Document type: data-model*\n";
5
+ export declare function renderDataModelTemplate(title: string): string;
6
+ //# sourceMappingURL=doc-data-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-data-model.d.ts","sourceRoot":"","sources":["../../src/templates/doc-data-model.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,uBAAuB,0lCAiDnC,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7D"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Data Model template — database schemas and entity relationships.
3
+ */
4
+ export const DOC_DATA_MODEL_TEMPLATE = `# Data Model: {{title}}
5
+
6
+ ## Models
7
+ <!-- List each database model/entity and its purpose. -->
8
+
9
+ ### ModelName
10
+ <!-- Purpose of this model. Key behaviors. -->
11
+
12
+ ## Fields
13
+ <!-- Document fields for each model. -->
14
+
15
+ ### ModelName
16
+
17
+ | Field | Type | Required | Default | Description |
18
+ |-------|------|----------|---------|-------------|
19
+ | id | UUID | auto | generated | Primary key |
20
+
21
+ ## Relationships
22
+ <!-- Entity relationships with cardinality. -->
23
+
24
+ | From | Relationship | To | Description |
25
+ |------|-------------|-----|------------|
26
+ | | has many / belongs to | | |
27
+
28
+ ## Indexes
29
+ <!-- Performance-critical indexes. -->
30
+
31
+ | Table | Fields | Type | Reason |
32
+ |-------|--------|------|--------|
33
+ | | | unique / btree / gin | |
34
+
35
+ ## Migrations
36
+ <!-- Migration tool and naming convention. How to create and run migrations. -->
37
+
38
+
39
+ ## Constraints
40
+ <!-- Unique constraints, check constraints, foreign key rules. -->
41
+
42
+
43
+ ## Enums
44
+ <!-- Enum types used across models. -->
45
+
46
+ | Enum | Values | Used in |
47
+ |------|--------|---------|
48
+ | | | |
49
+
50
+ ---
51
+ *Created: {{date}}*
52
+ *Document type: data-model*
53
+ `;
54
+ export function renderDataModelTemplate(title) {
55
+ return DOC_DATA_MODEL_TEMPLATE.replace(/\{\{title\}\}/g, title).replace(/\{\{date\}\}/g, new Date().toISOString().substring(0, 10));
56
+ }
57
+ //# sourceMappingURL=doc-data-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-data-model.js","sourceRoot":"","sources":["../../src/templates/doc-data-model.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDtC,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,uBAAuB,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,OAAO,CACrE,eAAe,EACf,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Project Overview template — README-level project description.
3
+ */
4
+ export declare const DOC_PROJECT_OVERVIEW_TEMPLATE = "# {{title}} \u2014 Project Overview\n\n## Purpose\n<!-- What does this project do? Who is it for? One or two paragraphs. -->\n\n\n## Architecture\n<!-- High-level system design. Main modules, how they interact. -->\n\n\n## Tech Stack\n<!-- Languages, frameworks, databases, infrastructure. -->\n\n| Layer | Technology | Version |\n|-------|-----------|---------|\n| Frontend | | |\n| Backend | | |\n| Database | | |\n| Infra | | |\n\n## Getting Started\n<!-- How to set up and run the project locally. -->\n\n### Prerequisites\n\n### Installation\n\n### Running\n\n## Deployment\n<!-- How this project is deployed. Environments, CI/CD. -->\n\n\n## Contributing\n<!-- How to contribute. Branch naming, PR process, code review. -->\n\n\n---\n*Created: {{date}}*\n*Document type: project-overview*\n";
5
+ export declare function renderProjectOverviewTemplate(title: string): string;
6
+ //# sourceMappingURL=doc-project-overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-project-overview.d.ts","sourceRoot":"","sources":["../../src/templates/doc-project-overview.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,6BAA6B,iyBAwCzC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnE"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Project Overview template — README-level project description.
3
+ */
4
+ export const DOC_PROJECT_OVERVIEW_TEMPLATE = `# {{title}} — Project Overview
5
+
6
+ ## Purpose
7
+ <!-- What does this project do? Who is it for? One or two paragraphs. -->
8
+
9
+
10
+ ## Architecture
11
+ <!-- High-level system design. Main modules, how they interact. -->
12
+
13
+
14
+ ## Tech Stack
15
+ <!-- Languages, frameworks, databases, infrastructure. -->
16
+
17
+ | Layer | Technology | Version |
18
+ |-------|-----------|---------|
19
+ | Frontend | | |
20
+ | Backend | | |
21
+ | Database | | |
22
+ | Infra | | |
23
+
24
+ ## Getting Started
25
+ <!-- How to set up and run the project locally. -->
26
+
27
+ ### Prerequisites
28
+
29
+ ### Installation
30
+
31
+ ### Running
32
+
33
+ ## Deployment
34
+ <!-- How this project is deployed. Environments, CI/CD. -->
35
+
36
+
37
+ ## Contributing
38
+ <!-- How to contribute. Branch naming, PR process, code review. -->
39
+
40
+
41
+ ---
42
+ *Created: {{date}}*
43
+ *Document type: project-overview*
44
+ `;
45
+ export function renderProjectOverviewTemplate(title) {
46
+ return DOC_PROJECT_OVERVIEW_TEMPLATE.replace(/\{\{title\}\}/g, title).replace(/\{\{date\}\}/g, new Date().toISOString().substring(0, 10));
47
+ }
48
+ //# sourceMappingURL=doc-project-overview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-project-overview.js","sourceRoot":"","sources":["../../src/templates/doc-project-overview.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC5C,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,OAAO,6BAA6B,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,OAAO,CAC3E,eAAe,EACf,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Document type specification — defines structural expectations for
3
+ * project documents used as AI pipeline context.
4
+ *
5
+ * Each doc type specifies required and recommended H2 sections.
6
+ * Validation checks section presence and content density.
7
+ */
8
+ /** Specification for a single document type */
9
+ export interface DocTypeSpec {
10
+ id: string;
11
+ label: string;
12
+ description: string;
13
+ requiredSections: string[];
14
+ recommendedSections: string[];
15
+ minContentLength: number;
16
+ }
17
+ /** Validation result for a single document */
18
+ export interface DocValidationResult {
19
+ score: number;
20
+ detectedType: string;
21
+ presentSections: string[];
22
+ missingRequired: string[];
23
+ missingRecommended: string[];
24
+ stubSections: string[];
25
+ suggestions: string[];
26
+ }
27
+ /** All supported document types */
28
+ export declare const DOC_TYPES: Record<string, DocTypeSpec>;
29
+ /** Ordered list of doc type IDs for display */
30
+ export declare const DOC_TYPE_IDS: string[];
31
+ /** Extract H2 headings (## Title) from markdown content */
32
+ export declare function extractH2Headings(content: string): string[];
33
+ /** Extract section content between H2 headings */
34
+ export declare function extractSectionContents(content: string): Map<string, string>;
35
+ /**
36
+ * Auto-detect document type by matching H2 headings against known section names.
37
+ * Returns the best-matching type ID, or "general" if no match is confident.
38
+ */
39
+ export declare function classifyDocument(content: string): string;
40
+ /**
41
+ * Validate a document's structural quality against its spec.
42
+ * If docType is not provided, it will be auto-detected.
43
+ */
44
+ export declare function validateDocument(content: string, docType?: string): DocValidationResult;
45
+ //# sourceMappingURL=doc-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-spec.d.ts","sourceRoot":"","sources":["../../src/templates/doc-spec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,mCAAmC;AACnC,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAyDjD,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,YAAY,UAAyB,CAAC;AAInD,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAS3D;AAED,kDAAkD;AAClD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuB3E;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA4BxD;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,mBAAmB,CA4FrB"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Document type specification — defines structural expectations for
3
+ * project documents used as AI pipeline context.
4
+ *
5
+ * Each doc type specifies required and recommended H2 sections.
6
+ * Validation checks section presence and content density.
7
+ */
8
+ /** All supported document types */
9
+ export const DOC_TYPES = {
10
+ "project-overview": {
11
+ id: "project-overview",
12
+ label: "Project Overview",
13
+ description: "README-level project description: purpose, architecture, tech stack",
14
+ requiredSections: ["Purpose", "Architecture", "Tech Stack"],
15
+ recommendedSections: ["Getting Started", "Deployment", "Contributing"],
16
+ minContentLength: 50,
17
+ },
18
+ architecture: {
19
+ id: "architecture",
20
+ label: "Architecture",
21
+ description: "System design, component relationships, and data flow",
22
+ requiredSections: ["Components", "Data Flow", "Dependencies"],
23
+ recommendedSections: ["Design Decisions", "Security", "Performance", "Scalability"],
24
+ minContentLength: 80,
25
+ },
26
+ "api-reference": {
27
+ id: "api-reference",
28
+ label: "API Reference",
29
+ description: "API endpoint documentation, authentication, and error codes",
30
+ requiredSections: ["Endpoints", "Authentication", "Error Codes"],
31
+ recommendedSections: ["Rate Limiting", "Pagination", "Versioning", "Webhooks"],
32
+ minContentLength: 60,
33
+ },
34
+ "data-model": {
35
+ id: "data-model",
36
+ label: "Data Model",
37
+ description: "Database schemas, fields, and entity relationships",
38
+ requiredSections: ["Models", "Fields", "Relationships"],
39
+ recommendedSections: ["Indexes", "Migrations", "Constraints", "Enums"],
40
+ minContentLength: 60,
41
+ },
42
+ "business-context": {
43
+ id: "business-context",
44
+ label: "Business Context",
45
+ description: "Business goals, user stories, and success criteria",
46
+ requiredSections: ["Goals", "Users", "Success Criteria"],
47
+ recommendedSections: ["User Stories", "Constraints", "Metrics", "Competitors"],
48
+ minContentLength: 40,
49
+ },
50
+ conventions: {
51
+ id: "conventions",
52
+ label: "Conventions",
53
+ description: "Coding standards, naming conventions, and file organization",
54
+ requiredSections: ["Style Guide", "Naming", "File Organization"],
55
+ recommendedSections: ["Testing", "Git Workflow", "Error Handling", "Logging"],
56
+ minContentLength: 40,
57
+ },
58
+ general: {
59
+ id: "general",
60
+ label: "General",
61
+ description: "General-purpose documentation with no required sections",
62
+ requiredSections: [],
63
+ recommendedSections: [],
64
+ minContentLength: 30,
65
+ },
66
+ };
67
+ /** Ordered list of doc type IDs for display */
68
+ export const DOC_TYPE_IDS = Object.keys(DOC_TYPES);
69
+ // ─── H2 Heading Extraction ────────────────────────────────────────
70
+ /** Extract H2 headings (## Title) from markdown content */
71
+ export function extractH2Headings(content) {
72
+ const headings = [];
73
+ for (const line of content.split("\n")) {
74
+ const match = line.match(/^##\s+(.+)/);
75
+ if (match) {
76
+ headings.push(match[1].trim());
77
+ }
78
+ }
79
+ return headings;
80
+ }
81
+ /** Extract section content between H2 headings */
82
+ export function extractSectionContents(content) {
83
+ const sections = new Map();
84
+ let currentHeading = "";
85
+ let currentContent = [];
86
+ for (const line of content.split("\n")) {
87
+ const match = line.match(/^##\s+(.+)/);
88
+ if (match) {
89
+ if (currentHeading) {
90
+ sections.set(currentHeading, currentContent.join("\n").trim());
91
+ }
92
+ currentHeading = match[1].trim();
93
+ currentContent = [];
94
+ }
95
+ else {
96
+ currentContent.push(line);
97
+ }
98
+ }
99
+ // Don't forget the last section
100
+ if (currentHeading) {
101
+ sections.set(currentHeading, currentContent.join("\n").trim());
102
+ }
103
+ return sections;
104
+ }
105
+ // ─── Document Classification ──────────────────────────────────────
106
+ /**
107
+ * Auto-detect document type by matching H2 headings against known section names.
108
+ * Returns the best-matching type ID, or "general" if no match is confident.
109
+ */
110
+ export function classifyDocument(content) {
111
+ const headings = extractH2Headings(content);
112
+ if (headings.length === 0)
113
+ return "general";
114
+ const headingLower = headings.map((h) => h.toLowerCase());
115
+ let bestType = "general";
116
+ let bestScore = 0;
117
+ for (const [typeId, spec] of Object.entries(DOC_TYPES)) {
118
+ if (typeId === "general")
119
+ continue;
120
+ const allSections = [...spec.requiredSections, ...spec.recommendedSections];
121
+ let matched = 0;
122
+ for (const section of allSections) {
123
+ if (headingLower.some((h) => h.includes(section.toLowerCase()))) {
124
+ matched++;
125
+ }
126
+ }
127
+ const score = allSections.length > 0 ? matched / allSections.length : 0;
128
+ if (score > bestScore) {
129
+ bestScore = score;
130
+ bestType = typeId;
131
+ }
132
+ }
133
+ // Need at least 30% match to classify; otherwise it's general
134
+ return bestScore >= 0.3 ? bestType : "general";
135
+ }
136
+ // ─── Document Validation ──────────────────────────────────────────
137
+ /**
138
+ * Validate a document's structural quality against its spec.
139
+ * If docType is not provided, it will be auto-detected.
140
+ */
141
+ export function validateDocument(content, docType) {
142
+ const detectedType = docType || classifyDocument(content);
143
+ const spec = DOC_TYPES[detectedType] || DOC_TYPES.general;
144
+ const headings = extractH2Headings(content);
145
+ const sectionContents = extractSectionContents(content);
146
+ const headingLower = headings.map((h) => h.toLowerCase());
147
+ // Check required sections
148
+ const presentSections = [];
149
+ const missingRequired = [];
150
+ for (const section of spec.requiredSections) {
151
+ const found = headingLower.some((h) => h.includes(section.toLowerCase()));
152
+ if (found) {
153
+ presentSections.push(section);
154
+ }
155
+ else {
156
+ missingRequired.push(section);
157
+ }
158
+ }
159
+ // Check recommended sections
160
+ const missingRecommended = [];
161
+ for (const section of spec.recommendedSections) {
162
+ const found = headingLower.some((h) => h.includes(section.toLowerCase()));
163
+ if (found) {
164
+ presentSections.push(section);
165
+ }
166
+ else {
167
+ missingRecommended.push(section);
168
+ }
169
+ }
170
+ // Detect stub sections (placeholder-only content)
171
+ const stubSections = [];
172
+ for (const heading of headings) {
173
+ const sectionContent = sectionContents.get(heading) || "";
174
+ const strippedContent = sectionContent
175
+ .replace(/<!--[\s\S]*?-->/g, "") // remove HTML comments
176
+ .replace(/- \[ \]/g, "") // remove empty checkboxes
177
+ .replace(/^\|.*\|$/gm, "") // remove markdown table rows (skeleton scaffolding)
178
+ .replace(/^###\s+.*$/gm, "") // remove H3 sub-headings (template labels)
179
+ .trim();
180
+ if (strippedContent.length < spec.minContentLength) {
181
+ stubSections.push(heading);
182
+ }
183
+ }
184
+ // Compute score
185
+ const totalRequired = spec.requiredSections.length;
186
+ const totalRecommended = spec.recommendedSections.length;
187
+ const totalPossible = totalRequired + totalRecommended;
188
+ let score;
189
+ if (totalPossible === 0) {
190
+ // "general" type — score based on having any H2 sections with content
191
+ const nonStubCount = headings.length - stubSections.length;
192
+ score = headings.length > 0 ? Math.min(nonStubCount / Math.max(headings.length, 1), 1) : 0;
193
+ }
194
+ else {
195
+ const requiredScore = totalRequired > 0 ? presentSections.filter((s) => spec.requiredSections.includes(s)).length / totalRequired : 1;
196
+ const recommendedScore = totalRecommended > 0 ? presentSections.filter((s) => spec.recommendedSections.includes(s)).length / totalRecommended : 0;
197
+ const stubRatio = headings.length > 0 ? stubSections.length / headings.length : 0;
198
+ // Weight: structure (presence of headings) 20%, content density 80%
199
+ const structureScore = requiredScore * 0.12 + recommendedScore * 0.08;
200
+ const contentScore = (1 - stubRatio) * 0.80;
201
+ score = Math.max(0, structureScore + contentScore);
202
+ // If most sections (>=80%) are stubs, cap at 0.30
203
+ if (stubSections.length >= headings.length * 0.8 && headings.length > 0) {
204
+ score = Math.min(score, 0.30);
205
+ }
206
+ }
207
+ // Generate suggestions
208
+ const suggestions = [];
209
+ for (const section of missingRequired) {
210
+ suggestions.push(`Add required section "## ${section}"`);
211
+ }
212
+ for (const section of missingRecommended) {
213
+ suggestions.push(`Consider adding recommended section "## ${section}"`);
214
+ }
215
+ for (const section of stubSections) {
216
+ suggestions.push(`Section "## ${section}" has little content — expand it`);
217
+ }
218
+ return {
219
+ score,
220
+ detectedType,
221
+ presentSections,
222
+ missingRequired,
223
+ missingRecommended,
224
+ stubSections,
225
+ suggestions,
226
+ };
227
+ }
228
+ //# sourceMappingURL=doc-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-spec.js","sourceRoot":"","sources":["../../src/templates/doc-spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@varveai/adit-plans",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "SpecFlow-inspired plan artifact generator for ADIT",
5
5
  "type": "module",
6
6
  "files": [
@@ -15,7 +15,7 @@
15
15
  }
16
16
  },
17
17
  "dependencies": {
18
- "@varveai/adit-core": "0.3.0"
18
+ "@varveai/adit-core": "0.3.1"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@types/better-sqlite3": "^7.6.13",