syntagmax 2026.7.6__tar.gz
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.
- syntagmax-2026.7.6/.gemini/commands/sc.critique.spec.md +142 -0
- syntagmax-2026.7.6/.gitignore +182 -0
- syntagmax-2026.7.6/.kiro/prompts/sc.document.md +4 -0
- syntagmax-2026.7.6/.kiro/prompts/sc.save.spec.md +1 -0
- syntagmax-2026.7.6/.kiro/prompts/sc.split.tasks.md +2 -0
- syntagmax-2026.7.6/.pin/ruff.md +1 -0
- syntagmax-2026.7.6/.pin/specs-location.md +2 -0
- syntagmax-2026.7.6/.pin/tests.md +1 -0
- syntagmax-2026.7.6/.pin/versioning.md +1 -0
- syntagmax-2026.7.6/.pin/workflow.md +43 -0
- syntagmax-2026.7.6/.python-version +1 -0
- syntagmax-2026.7.6/AGENTS.md +14 -0
- syntagmax-2026.7.6/CHANGELOG.md +34 -0
- syntagmax-2026.7.6/LICENSE +21 -0
- syntagmax-2026.7.6/PKG-INFO +735 -0
- syntagmax-2026.7.6/README.md +698 -0
- syntagmax-2026.7.6/assets/images/syntagmax_800x800.png +0 -0
- syntagmax-2026.7.6/assets/notepadplusplus/syntagmax.xml +38 -0
- syntagmax-2026.7.6/babel.cfg +3 -0
- syntagmax-2026.7.6/docs/critiques/bulk-attribute-manipulation-critique.md +119 -0
- syntagmax-2026.7.6/docs/critiques/export-tracing.critique.md +163 -0
- syntagmax-2026.7.6/docs/critiques/obsidian-marked-fragments-critique.md +149 -0
- syntagmax-2026.7.6/docs/critiques/plugin-system-critique.md +70 -0
- syntagmax-2026.7.6/docs/critiques/publish-config-critique.md +200 -0
- syntagmax-2026.7.6/docs/critiques/publishing-critique.md +9 -0
- syntagmax-2026.7.6/docs/executive-summary.md +21 -0
- syntagmax-2026.7.6/docs/internal.md +48 -0
- syntagmax-2026.7.6/docs/schemas/config.schema.json +334 -0
- syntagmax-2026.7.6/docs/schemas/publish-config.schema.json +153 -0
- syntagmax-2026.7.6/docs/seed/bulk-attribute-manipulation.md +31 -0
- syntagmax-2026.7.6/docs/seed/export-tracing.md +64 -0
- syntagmax-2026.7.6/docs/seed/obsidian-marked-fragments.md +39 -0
- syntagmax-2026.7.6/docs/seed/publishing-basic.md +26 -0
- syntagmax-2026.7.6/docs/seed/publishing-config.md +160 -0
- syntagmax-2026.7.6/docs/seed/publishing-doors.md +21 -0
- syntagmax-2026.7.6/docs/seed/publishing-word.md +18 -0
- syntagmax-2026.7.6/docs/seed/united-report.md +5 -0
- syntagmax-2026.7.6/docs/specs/2026-03-17-porting-pyparsing-to-lark-design.md +51 -0
- syntagmax-2026.7.6/docs/specs/2026-03-18-mcp-overhaul-design.md +59 -0
- syntagmax-2026.7.6/docs/specs/2026-03-18-readme-update-metamodel-dsl-design.md +41 -0
- syntagmax-2026.7.6/docs/specs/2026-03-19-introduce-reference-attribute-type-design.md +45 -0
- syntagmax-2026.7.6/docs/specs/2026-03-19-introduce-reference-to-parent-modifier-design.md +105 -0
- syntagmax-2026.7.6/docs/specs/2026-03-22-enhance-example-with-src-test-design.md +64 -0
- syntagmax-2026.7.6/docs/specs/2026-03-22-markdown-extractor-base-design.md +57 -0
- syntagmax-2026.7.6/docs/specs/2026-03-23-schema-validation-design.md +80 -0
- syntagmax-2026.7.6/docs/specs/bulk-attribute-manipulation.md +342 -0
- syntagmax-2026.7.6/docs/specs/comma-separated-yaml-attrs.md +54 -0
- syntagmax-2026.7.6/docs/specs/export-tracing.spec.md +312 -0
- syntagmax-2026.7.6/docs/specs/obsidian-marked-fragments.md +137 -0
- syntagmax-2026.7.6/docs/specs/plugin-system.md +246 -0
- syntagmax-2026.7.6/docs/specs/publish-block-tree.spec.md +110 -0
- syntagmax-2026.7.6/docs/specs/publish-config.spec.md +261 -0
- syntagmax-2026.7.6/docs/specs/publishing-word.md +118 -0
- syntagmax-2026.7.6/docs/specs/united-report.spec.md +126 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-17-porting-pyparsing-to-lark.md +127 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-18-mcp-overhaul.md +205 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-18-readme-update-metamodel-dsl.md +144 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-19-introduce-reference-attribute-type.md +193 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-19-introduce-reference-to-parent-modifier.md +252 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-19-multiple-attribute-modifier.md +171 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-19-multiple-attribute-modifier.todo.md +1 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-21-rename-via-git-to-via-commit.md +100 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-21-revision-descriptor.md +192 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-22-enhance-example-with-src-test.md +232 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-22-markdown-extractor-base-refactoring.md +239 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-22-update-ipynb-extractor.md +139 -0
- syntagmax-2026.7.6/docs/tasks/2026-03-23-schema-validation.md +214 -0
- syntagmax-2026.7.6/docs/tasks/unified-report/2026-06-20-unified-report-01-report-class.md +182 -0
- syntagmax-2026.7.6/docs/tasks/unified-report/2026-06-20-unified-report-02-params-cli.md +67 -0
- syntagmax-2026.7.6/docs/tasks/unified-report/2026-06-20-unified-report-03-config-cleanup.md +53 -0
- syntagmax-2026.7.6/docs/tasks/unified-report/2026-06-20-unified-report-04-metrics-refactor.md +49 -0
- syntagmax-2026.7.6/docs/tasks/unified-report/2026-06-20-unified-report-05-impact-refactor.md +43 -0
- syntagmax-2026.7.6/docs/tasks/unified-report/2026-06-20-unified-report-06-ai-refactor.md +49 -0
- syntagmax-2026.7.6/docs/tasks/unified-report/2026-06-20-unified-report-07-tree-markdown.md +68 -0
- syntagmax-2026.7.6/docs/tasks/unified-report/2026-06-20-unified-report-08-wiring.md +146 -0
- syntagmax-2026.7.6/docs/tasks/unified-report/2026-06-20-unified-report-09-docs.md +61 -0
- syntagmax-2026.7.6/docs/technical-summary.md +47 -0
- syntagmax-2026.7.6/example/error-handling/.syntagmax/.gitignore +1 -0
- syntagmax-2026.7.6/example/error-handling/.syntagmax/config.toml +10 -0
- syntagmax-2026.7.6/example/error-handling/.syntagmax/project.syntagmax +5 -0
- syntagmax-2026.7.6/example/error-handling/REQ/REQ-001.md +10 -0
- syntagmax-2026.7.6/example/error-handling/REQ/REQ-002-nbsp.md +10 -0
- syntagmax-2026.7.6/example/error-handling/REQ/REQ-003-open-yaml.md +9 -0
- syntagmax-2026.7.6/example/obsidian-driver/.syntagmax/.gitignore +1 -0
- syntagmax-2026.7.6/example/obsidian-driver/.syntagmax/config.toml +47 -0
- syntagmax-2026.7.6/example/obsidian-driver/.syntagmax/project.syntagmax +41 -0
- syntagmax-2026.7.6/example/obsidian-driver/.syntagmax/reports/published.docx +0 -0
- syntagmax-2026.7.6/example/obsidian-driver/.syntagmax/reports/published.md +292 -0
- syntagmax-2026.7.6/example/obsidian-driver/.syntagmax/reports/published.pdf +0 -0
- syntagmax-2026.7.6/example/obsidian-driver/.syntagmax/reports/report.md +21 -0
- syntagmax-2026.7.6/example/obsidian-driver/.syntagmax/reports/trace.csv +6 -0
- syntagmax-2026.7.6/example/obsidian-driver/REQ/REQ-001.md +29 -0
- syntagmax-2026.7.6/example/obsidian-driver/REQ/REQ-002.md +20 -0
- syntagmax-2026.7.6/example/obsidian-driver/REQ/REQ-003.md +30 -0
- syntagmax-2026.7.6/example/obsidian-driver/REQ/REQ-004.md +17 -0
- syntagmax-2026.7.6/example/obsidian-driver/REQ/REQ-005.md +18 -0
- syntagmax-2026.7.6/example/obsidian-driver/SYS/SYS-001.md +21 -0
- syntagmax-2026.7.6/example/obsidian-driver/SYS/SYS-002.md +13 -0
- syntagmax-2026.7.6/example/obsidian-driver/SYS/SYS-003.md +12 -0
- syntagmax-2026.7.6/example/obsidian-driver/SYS/diagram.png +0 -0
- syntagmax-2026.7.6/example/obsidian-driver/SYS/diagram.png.stmx +6 -0
- syntagmax-2026.7.6/example/obsidian-driver/src/contingency.py +7 -0
- syntagmax-2026.7.6/example/obsidian-driver/src/failsafe.py +7 -0
- syntagmax-2026.7.6/example/obsidian-driver/src/mavlink.py +8 -0
- syntagmax-2026.7.6/example/obsidian-driver/src/telemetry.py +11 -0
- syntagmax-2026.7.6/example/obsidian-driver/tests/test_contingency.py +7 -0
- syntagmax-2026.7.6/example/obsidian-driver/tests/test_failsafe.py +7 -0
- syntagmax-2026.7.6/example/obsidian-driver/tests/test_mavlink.py +7 -0
- syntagmax-2026.7.6/example/obsidian-driver/tests/test_telemetry.py +7 -0
- syntagmax-2026.7.6/example/plugin-demo/.syntagmax/.gitignore +1 -0
- syntagmax-2026.7.6/example/plugin-demo/.syntagmax/config.toml +23 -0
- syntagmax-2026.7.6/example/plugin-demo/.syntagmax/plugins/add-header.py +17 -0
- syntagmax-2026.7.6/example/plugin-demo/.syntagmax/plugins/strip-marker.py +29 -0
- syntagmax-2026.7.6/example/plugin-demo/.syntagmax/reports/published.md +22 -0
- syntagmax-2026.7.6/example/plugin-demo/requirements/system.md +17 -0
- syntagmax-2026.7.6/example/publishing/.gitignore +1 -0
- syntagmax-2026.7.6/example/publishing/.syntagmax/config.toml +23 -0
- syntagmax-2026.7.6/example/publishing/.syntagmax/project.syntagmax +13 -0
- syntagmax-2026.7.6/example/publishing/.syntagmax/publish.yaml +39 -0
- syntagmax-2026.7.6/example/publishing/.syntagmax/reports/Personal Scheduler App.md +292 -0
- syntagmax-2026.7.6/example/publishing/.syntagmax/reports/report.md +98 -0
- syntagmax-2026.7.6/example/publishing/Personal Scheduler App/1 Description/1.1 Overview/1.1.1 Purpose and Scope.md +14 -0
- syntagmax-2026.7.6/example/publishing/Personal Scheduler App/1 Description/1.1 Overview/1.1.2 Target Users.md +15 -0
- syntagmax-2026.7.6/example/publishing/Personal Scheduler App/1 Description/1.2 App Functions/1.2.1 Function List.md +26 -0
- syntagmax-2026.7.6/example/publishing/Personal Scheduler App/1 Description/1.2 App Functions/1.2.2 User Interface Overview.md +17 -0
- syntagmax-2026.7.6/example/publishing/Personal Scheduler App/2 Requirements/2.1 Functional Requirements/2.1.1 Calendar and Event Management.md +53 -0
- syntagmax-2026.7.6/example/publishing/Personal Scheduler App/2 Requirements/2.1 Functional Requirements/2.1.2 Task Management.md +45 -0
- syntagmax-2026.7.6/example/publishing/Personal Scheduler App/2 Requirements/2.1 Functional Requirements/2.1.3 Reminders and Notifications.md +41 -0
- syntagmax-2026.7.6/example/publishing/Personal Scheduler App/2 Requirements/2.2 Non-Functional Requirements/2.2.1 Performance and Usability.md +29 -0
- syntagmax-2026.7.6/example/publishing/Personal Scheduler App/2 Requirements/2.2 Non-Functional Requirements/2.2.2 Data and Security.md +47 -0
- syntagmax-2026.7.6/example/publishing/attachments/pics/scheduler-architecture.png +0 -0
- syntagmax-2026.7.6/example/publishing/attachments/pics/scheduler-architecture.svg +62 -0
- syntagmax-2026.7.6/example/renumber-demo/.syntagmax/config.toml +10 -0
- syntagmax-2026.7.6/example/renumber-demo/.syntagmax/project.syntagmax +4 -0
- syntagmax-2026.7.6/example/renumber-demo/reqs/existing-body.md +7 -0
- syntagmax-2026.7.6/example/renumber-demo/reqs/existing-yaml.md +7 -0
- syntagmax-2026.7.6/example/renumber-demo/reqs/non-existing.md +6 -0
- syntagmax-2026.7.6/example/renumber-demo/reqs/with-schema-body.md +7 -0
- syntagmax-2026.7.6/example/renumber-demo/reqs/with-schema-yaml.md +7 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/.syntagmax/.gitignore +1 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/.syntagmax/config.toml +23 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/.syntagmax/plugins/tsv-export.py +42 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/.syntagmax/project.syntagmax +19 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/.syntagmax/reports/trace.csv +4 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/.syntagmax/reports/trace.tsv +4 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/README.md +76 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/REQ/REQ-001.md +12 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/REQ/REQ-002.md +12 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/REQ/REQ-003.md +11 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/SYS/SYS-001.md +10 -0
- syntagmax-2026.7.6/example/trace-tsv-plugin/SYS/SYS-002.md +10 -0
- syntagmax-2026.7.6/openwiki/.last-update.json +6 -0
- syntagmax-2026.7.6/openwiki/architecture.md +74 -0
- syntagmax-2026.7.6/openwiki/domain.md +66 -0
- syntagmax-2026.7.6/openwiki/operations.md +69 -0
- syntagmax-2026.7.6/openwiki/quickstart.md +61 -0
- syntagmax-2026.7.6/openwiki/testing.md +48 -0
- syntagmax-2026.7.6/pyproject.toml +78 -0
- syntagmax-2026.7.6/scripts/update-translations.py +26 -0
- syntagmax-2026.7.6/src/syntagmax/ai.py +71 -0
- syntagmax-2026.7.6/src/syntagmax/ai_providers.py +455 -0
- syntagmax-2026.7.6/src/syntagmax/analyse.py +299 -0
- syntagmax-2026.7.6/src/syntagmax/artifact.py +224 -0
- syntagmax-2026.7.6/src/syntagmax/blocks.py +53 -0
- syntagmax-2026.7.6/src/syntagmax/cli.py +496 -0
- syntagmax-2026.7.6/src/syntagmax/config.py +280 -0
- syntagmax-2026.7.6/src/syntagmax/edit.py +110 -0
- syntagmax-2026.7.6/src/syntagmax/edit_attrs.py +335 -0
- syntagmax-2026.7.6/src/syntagmax/errors.py +22 -0
- syntagmax-2026.7.6/src/syntagmax/extract.py +66 -0
- syntagmax-2026.7.6/src/syntagmax/extractors/extractor.py +83 -0
- syntagmax-2026.7.6/src/syntagmax/extractors/ipynb.py +45 -0
- syntagmax-2026.7.6/src/syntagmax/extractors/markdown.lark +30 -0
- syntagmax-2026.7.6/src/syntagmax/extractors/markdown.py +629 -0
- syntagmax-2026.7.6/src/syntagmax/extractors/obsidian.py +12 -0
- syntagmax-2026.7.6/src/syntagmax/extractors/sidecar.py +108 -0
- syntagmax-2026.7.6/src/syntagmax/extractors/text.lark +25 -0
- syntagmax-2026.7.6/src/syntagmax/extractors/text.py +221 -0
- syntagmax-2026.7.6/src/syntagmax/git_utils.py +131 -0
- syntagmax-2026.7.6/src/syntagmax/impact.py +119 -0
- syntagmax-2026.7.6/src/syntagmax/init_cmd.py +122 -0
- syntagmax-2026.7.6/src/syntagmax/main.py +98 -0
- syntagmax-2026.7.6/src/syntagmax/mcp/server.py +172 -0
- syntagmax-2026.7.6/src/syntagmax/metamodel.lark +54 -0
- syntagmax-2026.7.6/src/syntagmax/metamodel.py +280 -0
- syntagmax-2026.7.6/src/syntagmax/metrics.py +63 -0
- syntagmax-2026.7.6/src/syntagmax/pandoc.py +59 -0
- syntagmax-2026.7.6/src/syntagmax/params.py +19 -0
- syntagmax-2026.7.6/src/syntagmax/plugin.py +311 -0
- syntagmax-2026.7.6/src/syntagmax/publish.py +231 -0
- syntagmax-2026.7.6/src/syntagmax/publish_config.py +80 -0
- syntagmax-2026.7.6/src/syntagmax/render.py +139 -0
- syntagmax-2026.7.6/src/syntagmax/report.py +29 -0
- syntagmax-2026.7.6/src/syntagmax/resources/locales/en/LC_MESSAGES/messages.po +85 -0
- syntagmax-2026.7.6/src/syntagmax/resources/locales/ru/LC_MESSAGES/messages.po +86 -0
- syntagmax-2026.7.6/src/syntagmax/resources/report.j2 +65 -0
- syntagmax-2026.7.6/src/syntagmax/trace.py +207 -0
- syntagmax-2026.7.6/src/syntagmax/tree.py +142 -0
- syntagmax-2026.7.6/src/syntagmax/utils.py +37 -0
- syntagmax-2026.7.6/tests/test_artifact_validation.py +76 -0
- syntagmax-2026.7.6/tests/test_custom_boolean.py +116 -0
- syntagmax-2026.7.6/tests/test_dag.py +15 -0
- syntagmax-2026.7.6/tests/test_edit_attrs.py +754 -0
- syntagmax-2026.7.6/tests/test_enum_multiple.py +148 -0
- syntagmax-2026.7.6/tests/test_extractors.py +175 -0
- syntagmax-2026.7.6/tests/test_git_revisions.py +156 -0
- syntagmax-2026.7.6/tests/test_git_utils.py +143 -0
- syntagmax-2026.7.6/tests/test_hyphen_support.py +171 -0
- syntagmax-2026.7.6/tests/test_id_validation.py +104 -0
- syntagmax-2026.7.6/tests/test_impact.py +144 -0
- syntagmax-2026.7.6/tests/test_independent_atype_marker.py +64 -0
- syntagmax-2026.7.6/tests/test_init.py +52 -0
- syntagmax-2026.7.6/tests/test_init_cmd.py +49 -0
- syntagmax-2026.7.6/tests/test_ipynb_extractor.py +92 -0
- syntagmax-2026.7.6/tests/test_marked_fragments.py +272 -0
- syntagmax-2026.7.6/tests/test_mcp.py +88 -0
- syntagmax-2026.7.6/tests/test_metamodel.py +101 -0
- syntagmax-2026.7.6/tests/test_metamodel_pids.py +55 -0
- syntagmax-2026.7.6/tests/test_metamodel_schema_validation.py +59 -0
- syntagmax-2026.7.6/tests/test_multiple_attributes_e2e.py +358 -0
- syntagmax-2026.7.6/tests/test_multiple_records_same_driver.py +74 -0
- syntagmax-2026.7.6/tests/test_multiplicity_validation.py +107 -0
- syntagmax-2026.7.6/tests/test_pandoc.py +240 -0
- syntagmax-2026.7.6/tests/test_plugin.py +421 -0
- syntagmax-2026.7.6/tests/test_publish.py +295 -0
- syntagmax-2026.7.6/tests/test_publish_config.py +146 -0
- syntagmax-2026.7.6/tests/test_reference_validation.py +61 -0
- syntagmax-2026.7.6/tests/test_report.py +66 -0
- syntagmax-2026.7.6/tests/test_suspicious_tree_marks.py +70 -0
- syntagmax-2026.7.6/tests/test_trace_export.py +376 -0
- syntagmax-2026.7.6/tests/test_traces.py +168 -0
- syntagmax-2026.7.6/uv.lock +1472 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sc.critique.spec.md
|
|
3
|
+
description: Challenge the specification and implementation plan through two distinct expert lenses.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Goal
|
|
7
|
+
|
|
8
|
+
Challenge the specification and implementation plan through two distinct expert lenses BEFORE committing to implementation. The **Product Lens** evaluates whether the right problem is being solved in the right way for users. The **Engineering Lens** evaluates whether the technical approach is sound, scalable, and free of hidden risks. This dual review prevents costly mid-implementation pivots and catches strategic and technical blind spots early.
|
|
9
|
+
|
|
10
|
+
## Operating Constraints
|
|
11
|
+
|
|
12
|
+
**CONSTRUCTIVE CHALLENGE**: The goal is to strengthen the spec and plan, not to block progress. Every critique item must include a constructive suggestion for improvement.
|
|
13
|
+
|
|
14
|
+
1. **Product Lens Review** (CEO/Product Lead Perspective):
|
|
15
|
+
|
|
16
|
+
Adopt the mindset of an experienced product leader who cares deeply about user value, market fit, and business impact. Evaluate:
|
|
17
|
+
|
|
18
|
+
#### 1a. Problem Validation
|
|
19
|
+
- Is the problem statement clear and well-defined?
|
|
20
|
+
- Is this solving a real user pain point, or is it a solution looking for a problem?
|
|
21
|
+
- What evidence supports the need for this feature? (user research, data, customer requests)
|
|
22
|
+
- Is the scope appropriate — not too broad (trying to do everything) or too narrow (missing the core value)?
|
|
23
|
+
|
|
24
|
+
#### 1b. User Value Assessment
|
|
25
|
+
- Does every user story deliver tangible user value?
|
|
26
|
+
- Are the acceptance criteria written from the user's perspective (outcomes, not implementation)?
|
|
27
|
+
- Is the user journey complete — or are there gaps where users would get stuck?
|
|
28
|
+
- What's the simplest version that would deliver 80% of the value? (MVP analysis)
|
|
29
|
+
- Are there unnecessary features that add complexity without proportional value?
|
|
30
|
+
|
|
31
|
+
#### 1c. Alternative Approaches
|
|
32
|
+
- Could a simpler solution achieve the same outcome?
|
|
33
|
+
- Are there existing tools, libraries, or services that could replace custom implementation?
|
|
34
|
+
- What would a competitor's approach look like?
|
|
35
|
+
- What would happen if this feature were NOT built? What's the cost of inaction?
|
|
36
|
+
|
|
37
|
+
#### 1d. Edge Cases & User Experience
|
|
38
|
+
- What happens when things go wrong? (error states, empty states, loading states)
|
|
39
|
+
- How does this feature interact with existing functionality?
|
|
40
|
+
- Are accessibility considerations addressed?
|
|
41
|
+
- Is the feature discoverable and intuitive?
|
|
42
|
+
- What are the onboarding/migration implications for existing users?
|
|
43
|
+
|
|
44
|
+
#### 1e. Success Measurement
|
|
45
|
+
- Are the success criteria measurable and time-bound?
|
|
46
|
+
- How will you know if this feature is successful after launch?
|
|
47
|
+
- What metrics should be tracked?
|
|
48
|
+
- What would trigger a rollback decision?
|
|
49
|
+
|
|
50
|
+
2. **Engineering Lens Review** (Staff Engineer Perspective):
|
|
51
|
+
|
|
52
|
+
Adopt the mindset of a senior staff engineer who has seen projects fail due to hidden technical risks. Evaluate:
|
|
53
|
+
|
|
54
|
+
#### 2a. Architecture Soundness
|
|
55
|
+
- Does the architecture follow established patterns for this type of system?
|
|
56
|
+
- Are boundaries and interfaces well-defined (separation of concerns)?
|
|
57
|
+
- Is the architecture testable at each layer?
|
|
58
|
+
- Are there circular dependencies or tight coupling risks?
|
|
59
|
+
- Does the architecture support future evolution without major refactoring?
|
|
60
|
+
|
|
61
|
+
#### 2b. Failure Mode Analysis
|
|
62
|
+
- What are the most likely failure modes? (network failures, data corruption, resource exhaustion)
|
|
63
|
+
- How does the system degrade gracefully under each failure mode?
|
|
64
|
+
- What happens under peak load? Is there a scaling bottleneck?
|
|
65
|
+
- What are the blast radius implications — can a failure in this feature affect other parts of the system?
|
|
66
|
+
- Are retry, timeout, and circuit-breaker strategies defined?
|
|
67
|
+
|
|
68
|
+
#### 2c. Security & Privacy Review
|
|
69
|
+
- What is the threat model? What attack vectors does this feature introduce?
|
|
70
|
+
- Are trust boundaries clearly defined (user input, API responses, third-party data)?
|
|
71
|
+
- Is sensitive data handled appropriately (encryption, access control, retention)?
|
|
72
|
+
- Are there compliance implications (GDPR, SOC2, HIPAA)?
|
|
73
|
+
- Is the principle of least privilege followed?
|
|
74
|
+
|
|
75
|
+
#### 2d. Performance & Scalability
|
|
76
|
+
- Are there potential bottlenecks in the data flow?
|
|
77
|
+
- What are the expected data volumes? Will the design handle 10x growth?
|
|
78
|
+
- Are caching strategies appropriate and cache invalidation well-defined?
|
|
79
|
+
- Are database queries optimized (indexing, pagination, query complexity)?
|
|
80
|
+
- Are there resource-intensive operations that should be async or batched?
|
|
81
|
+
|
|
82
|
+
#### 2e. Testing Strategy
|
|
83
|
+
- Is the testing plan comprehensive (unit, integration, E2E)?
|
|
84
|
+
- Are the critical paths identified for priority testing?
|
|
85
|
+
- Is the test data strategy realistic?
|
|
86
|
+
- Are there testability concerns (hard-to-mock dependencies, race conditions)?
|
|
87
|
+
- Is the test coverage target appropriate for the risk level?
|
|
88
|
+
|
|
89
|
+
#### 2f. Operational Readiness
|
|
90
|
+
- Is observability planned (logging, metrics, tracing)?
|
|
91
|
+
- Are alerting thresholds defined?
|
|
92
|
+
- Is there a rollback strategy?
|
|
93
|
+
- Are database migrations reversible?
|
|
94
|
+
- Is the deployment strategy clear (blue-green, canary, feature flags)?
|
|
95
|
+
|
|
96
|
+
#### 2g. Dependencies & Integration Risks
|
|
97
|
+
- Are third-party dependencies well-understood (stability, licensing, maintenance)?
|
|
98
|
+
- Are integration points with existing systems well-defined?
|
|
99
|
+
- What happens if an external service is unavailable?
|
|
100
|
+
- Are API versioning and backward compatibility considered?
|
|
101
|
+
|
|
102
|
+
3. **Cross-Lens Synthesis**:
|
|
103
|
+
Identify items where both lenses converge (these are highest priority):
|
|
104
|
+
- Product simplification that also reduces engineering risk
|
|
105
|
+
- Engineering constraints that affect user experience
|
|
106
|
+
- Scope adjustments that improve both value delivery and technical feasibility
|
|
107
|
+
|
|
108
|
+
4. **Severity Classification**:
|
|
109
|
+
Classify each finding:
|
|
110
|
+
|
|
111
|
+
- 🎯 **Must-Address**: Blocks proceeding to implementation. Critical product gap, security vulnerability, or architecture flaw.
|
|
112
|
+
- 💡 **Recommendation**: Strongly suggested improvement that would significantly improve quality, value, or risk profile. Should be addressed but won't block progress.
|
|
113
|
+
- 🤔 **Question**: Ambiguity or assumption that needs stakeholder input. Cannot be resolved by the development team alone.
|
|
114
|
+
|
|
115
|
+
7. **Generate Critique Report**:
|
|
116
|
+
Ensure the directory `docs/critiques/` exists (create it if necessary), then create the critique report. The report must include:
|
|
117
|
+
|
|
118
|
+
- **Executive Summary**: Overall assessment and readiness to proceed
|
|
119
|
+
- **Product Lens Findings**: Organized by subcategory
|
|
120
|
+
- **Engineering Lens Findings**: Organized by subcategory
|
|
121
|
+
- **Cross-Lens Insights**: Items where both perspectives converge
|
|
122
|
+
- **Findings Summary Table**: All items with ID, lens, severity, summary, suggestion
|
|
123
|
+
|
|
124
|
+
**Findings Table Format**:
|
|
125
|
+
| ID | Lens | Severity | Category | Finding | Suggestion |
|
|
126
|
+
|----|------|----------|----------|---------|------------|
|
|
127
|
+
| P1 | Product | 🎯 | Problem Validation | No evidence of user need | Conduct 5 user interviews or reference support tickets |
|
|
128
|
+
| E1 | Engineering | 💡 | Failure Modes | No retry strategy for API calls | Add exponential backoff with circuit breaker |
|
|
129
|
+
| X1 | Both | 🎯 | Scope × Risk | Feature X adds complexity with unclear value | Defer to v2; reduces both scope and technical risk |
|
|
130
|
+
|
|
131
|
+
8. **Provide Verdict**:
|
|
132
|
+
Based on findings, provide one of:
|
|
133
|
+
- ⚠️ **PROCEED WITH UPDATES**: Must-address items found but are resolvable.
|
|
134
|
+
- 🛑 **RETHINK**: Fundamental product or architecture concerns. Recommend revisiting the spec.
|
|
135
|
+
|
|
136
|
+
9. **Offer Remediation**:
|
|
137
|
+
For each must-address item and recommendation:
|
|
138
|
+
- Provide a specific suggested edit to the spec.
|
|
139
|
+
- Ask: "Would you like me to apply these changes? (all / select / none)"
|
|
140
|
+
- If user approves, apply changes to the relevant files
|
|
141
|
+
- After applying changes, recommend re-running critique` to verify.
|
|
142
|
+
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Custom
|
|
2
|
+
output
|
|
3
|
+
/tmp
|
|
4
|
+
|
|
5
|
+
# Other agents
|
|
6
|
+
.claude
|
|
7
|
+
|
|
8
|
+
# Byte-compiled / optimized / DLL files
|
|
9
|
+
__pycache__/
|
|
10
|
+
*.py[cod]
|
|
11
|
+
*$py.class
|
|
12
|
+
|
|
13
|
+
# C extensions
|
|
14
|
+
*.so
|
|
15
|
+
|
|
16
|
+
# Distribution / packaging
|
|
17
|
+
.Python
|
|
18
|
+
build/
|
|
19
|
+
develop-eggs/
|
|
20
|
+
dist/
|
|
21
|
+
downloads/
|
|
22
|
+
eggs/
|
|
23
|
+
.eggs/
|
|
24
|
+
lib/
|
|
25
|
+
lib64/
|
|
26
|
+
parts/
|
|
27
|
+
sdist/
|
|
28
|
+
var/
|
|
29
|
+
wheels/
|
|
30
|
+
share/python-wheels/
|
|
31
|
+
*.egg-info/
|
|
32
|
+
.installed.cfg
|
|
33
|
+
*.egg
|
|
34
|
+
MANIFEST
|
|
35
|
+
|
|
36
|
+
# PyInstaller
|
|
37
|
+
# Usually these files are written by a python script from a template
|
|
38
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
39
|
+
*.manifest
|
|
40
|
+
*.spec
|
|
41
|
+
|
|
42
|
+
# Installer logs
|
|
43
|
+
pip-log.txt
|
|
44
|
+
pip-delete-this-directory.txt
|
|
45
|
+
|
|
46
|
+
# Unit test / coverage reports
|
|
47
|
+
htmlcov/
|
|
48
|
+
.tox/
|
|
49
|
+
.nox/
|
|
50
|
+
.coverage
|
|
51
|
+
.coverage.*
|
|
52
|
+
.cache
|
|
53
|
+
nosetests.xml
|
|
54
|
+
coverage.xml
|
|
55
|
+
*.cover
|
|
56
|
+
*.py,cover
|
|
57
|
+
.hypothesis/
|
|
58
|
+
.pytest_cache/
|
|
59
|
+
cover/
|
|
60
|
+
|
|
61
|
+
# Translations
|
|
62
|
+
*.mo
|
|
63
|
+
*.pot
|
|
64
|
+
|
|
65
|
+
# Django stuff:
|
|
66
|
+
*.log
|
|
67
|
+
local_settings.py
|
|
68
|
+
db.sqlite3
|
|
69
|
+
db.sqlite3-journal
|
|
70
|
+
|
|
71
|
+
# Flask stuff:
|
|
72
|
+
instance/
|
|
73
|
+
.webassets-cache
|
|
74
|
+
|
|
75
|
+
# Scrapy stuff:
|
|
76
|
+
.scrapy
|
|
77
|
+
|
|
78
|
+
# Sphinx documentation
|
|
79
|
+
docs/_build/
|
|
80
|
+
|
|
81
|
+
# PyBuilder
|
|
82
|
+
.pybuilder/
|
|
83
|
+
target/
|
|
84
|
+
|
|
85
|
+
# Jupyter Notebook
|
|
86
|
+
.ipynb_checkpoints
|
|
87
|
+
|
|
88
|
+
# IPython
|
|
89
|
+
profile_default/
|
|
90
|
+
ipython_config.py
|
|
91
|
+
|
|
92
|
+
# pyenv
|
|
93
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
94
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
95
|
+
# .python-version
|
|
96
|
+
|
|
97
|
+
# pipenv
|
|
98
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
99
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
100
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
101
|
+
# install all needed dependencies.
|
|
102
|
+
#Pipfile.lock
|
|
103
|
+
|
|
104
|
+
# UV
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
106
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
107
|
+
# commonly ignored for libraries.
|
|
108
|
+
#uv.lock
|
|
109
|
+
|
|
110
|
+
# poetry
|
|
111
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
112
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
113
|
+
# commonly ignored for libraries.
|
|
114
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
115
|
+
#poetry.lock
|
|
116
|
+
|
|
117
|
+
# pdm
|
|
118
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
119
|
+
#pdm.lock
|
|
120
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
121
|
+
# in version control.
|
|
122
|
+
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
|
123
|
+
.pdm.toml
|
|
124
|
+
.pdm-python
|
|
125
|
+
.pdm-build/
|
|
126
|
+
|
|
127
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
128
|
+
__pypackages__/
|
|
129
|
+
|
|
130
|
+
# Celery stuff
|
|
131
|
+
celerybeat-schedule
|
|
132
|
+
celerybeat.pid
|
|
133
|
+
|
|
134
|
+
# SageMath parsed files
|
|
135
|
+
*.sage.py
|
|
136
|
+
|
|
137
|
+
# Environments
|
|
138
|
+
.env
|
|
139
|
+
.venv
|
|
140
|
+
env/
|
|
141
|
+
venv/
|
|
142
|
+
ENV/
|
|
143
|
+
env.bak/
|
|
144
|
+
venv.bak/
|
|
145
|
+
|
|
146
|
+
# Spyder project settings
|
|
147
|
+
.spyderproject
|
|
148
|
+
.spyproject
|
|
149
|
+
|
|
150
|
+
# Rope project settings
|
|
151
|
+
.ropeproject
|
|
152
|
+
|
|
153
|
+
# mkdocs documentation
|
|
154
|
+
/site
|
|
155
|
+
|
|
156
|
+
# mypy
|
|
157
|
+
.mypy_cache/
|
|
158
|
+
.dmypy.json
|
|
159
|
+
dmypy.json
|
|
160
|
+
|
|
161
|
+
# Pyre type checker
|
|
162
|
+
.pyre/
|
|
163
|
+
|
|
164
|
+
# pytype static type analyzer
|
|
165
|
+
.pytype/
|
|
166
|
+
|
|
167
|
+
# Cython debug symbols
|
|
168
|
+
cython_debug/
|
|
169
|
+
|
|
170
|
+
# PyCharm
|
|
171
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
172
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
173
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
174
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
175
|
+
#.idea/
|
|
176
|
+
|
|
177
|
+
# Ruff stuff:
|
|
178
|
+
.ruff_cache/
|
|
179
|
+
|
|
180
|
+
# PyPI configuration file
|
|
181
|
+
.pypirc
|
|
182
|
+
.aider*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Save the spec in `docs/specs`, but don't implement it yet.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Split the final spec into a set of detailed tasks that can be implemented in parallel. Place the results into a set of files in a new subdirectory. Files shall be named as `docs/tasks/<spec-name>/task-<task-number>-<task-name>.md`. Also, add a summary file in the same subdirectory. The summary shall provide guidance for orchestration and parallel execution.
|
|
2
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
After a backend task is completed, run the `ruff` linter and ensure that there are no errors or warnings.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
After a backend task is completed, run the `pytest tests` and ensure that there are no errors or warnings.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
This project uses Calendar Versioning (CalVer) with the scheme YYYY.M.D (e.g. 2026.7.6).
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
## Specification Workflow: Seed vs Full Specs
|
|
2
|
+
|
|
3
|
+
This project uses a two-stage specification process. Both live under `docs/`.
|
|
4
|
+
|
|
5
|
+
### Seed Specs (`docs/seed/`)
|
|
6
|
+
|
|
7
|
+
A seed spec is a **concise, human-written intent document**. It captures:
|
|
8
|
+
- What the user wants (feature intent, desired behavior)
|
|
9
|
+
- Key examples and expected output formats
|
|
10
|
+
- High-level CLI interface or config shape
|
|
11
|
+
- Follow-up tasks (amend README, add examples, etc.)
|
|
12
|
+
|
|
13
|
+
Seed specs are informal, written in the user's voice, and may contain typos or shorthand. They do **not** include:
|
|
14
|
+
- Detailed implementation guidance
|
|
15
|
+
- Internal data models or code structure
|
|
16
|
+
- Explicit task breakdowns with test requirements
|
|
17
|
+
- Mermaid diagrams or architecture decisions
|
|
18
|
+
- Background on existing codebase internals
|
|
19
|
+
|
|
20
|
+
A seed spec is the **input** to the design phase.
|
|
21
|
+
|
|
22
|
+
### Full Specs (`docs/specs/`)
|
|
23
|
+
|
|
24
|
+
A full spec is a **detailed implementation blueprint** derived from a seed spec. It includes:
|
|
25
|
+
- **Problem Statement**: Precise restatement of the requirement
|
|
26
|
+
- **Requirements**: Exhaustive list of acceptance criteria
|
|
27
|
+
- **Background**: Relevant codebase internals (existing patterns, modules, data structures)
|
|
28
|
+
- **Proposed Solution**: Architecture with Mermaid diagrams, data models, and code sketches
|
|
29
|
+
- **Task Breakdown**: Numbered implementation tasks, each with:
|
|
30
|
+
- Objective
|
|
31
|
+
- Implementation guidance (which files, which patterns to follow)
|
|
32
|
+
- Test requirements (what to assert, which fixtures to use)
|
|
33
|
+
- Demo command to verify
|
|
34
|
+
|
|
35
|
+
Full specs are written for an implementer (human or AI) to execute without further clarification.
|
|
36
|
+
|
|
37
|
+
### Workflow
|
|
38
|
+
|
|
39
|
+
1. User writes a seed spec in `docs/seed/` to capture intent.
|
|
40
|
+
2. A full spec is produced in `docs/specs/` (either by the user or with AI assistance) that expands the seed into an actionable plan.
|
|
41
|
+
3. Implementation follows the full spec's task breakdown.
|
|
42
|
+
|
|
43
|
+
When asked to implement a feature, look for both the seed (for intent) and the full spec (for implementation details). If only a seed exists, offer to produce a full spec first.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
## OpenWiki
|
|
2
|
+
|
|
3
|
+
This repository has documentation located in the /openwiki directory.
|
|
4
|
+
|
|
5
|
+
Start here:
|
|
6
|
+
- [OpenWiki quickstart](openwiki/quickstart.md)
|
|
7
|
+
|
|
8
|
+
OpenWiki includes repository overview, architecture notes, workflows, domain concepts, operations, integrations, testing guidance, and source maps.
|
|
9
|
+
|
|
10
|
+
When working in this repository, read the OpenWiki quickstart first, then follow its links to the relevant architecture, workflow, domain, operation, and testing notes.
|
|
11
|
+
|
|
12
|
+
<!-- pin mcp start -->
|
|
13
|
+
Before staring the first task, fetch all global and project factoids via Pin MCP and use them as **important** instructions. The Pin workspace for this project is `syntagmax`.
|
|
14
|
+
<!-- pin mcp stop -->
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project uses [Calendar Versioning](https://calver.org/) with the scheme `YYYY.M.D`.
|
|
7
|
+
|
|
8
|
+
## [2026.7.6] - 2026-07-06
|
|
9
|
+
|
|
10
|
+
Initial public release.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Core analysis pipeline with DAG-based execution (extract → tree → impact → metrics → AI)
|
|
15
|
+
- Obsidian, Markdown, Text, Sidecar, and Jupyter Notebook artifact extractors
|
|
16
|
+
- Metamodel DSL with attribute types: string, integer, boolean (with custom values), enum, and reference
|
|
17
|
+
- Support for multiple attributes, comma-separated enums, and multi-value parent references
|
|
18
|
+
- Hyphens and underscores in attribute identifiers
|
|
19
|
+
- Custom `atype`/`marker` decoupling for input sources
|
|
20
|
+
- Marked text fragments (Obsidian driver): `[COM]`, `[NOTE]`, etc.
|
|
21
|
+
- Git revision extraction via `git blame` for artifact change history
|
|
22
|
+
- Impact analysis: via-commit (revision pinning) and via-timestamp modes
|
|
23
|
+
- Traceability matrix export (CSV/TSV) with forward/reverse, flat mode, left outer join, and plugin hook
|
|
24
|
+
- Publishing pipeline: block-tree rendering to Markdown with Pandoc DOCX/PDF conversion
|
|
25
|
+
- Publishing configuration: per-record output, `--single` consolidated mode, `--date-suffix`
|
|
26
|
+
- Plugin system: local file and package entry-point plugins with `transform_blocks`, `transform_markdown`, and `export_trace` hooks
|
|
27
|
+
- Bulk attribute manipulation (`edit attrs`): add/del/replace with CSV import support
|
|
28
|
+
- Artifact renumbering (`edit renumber`) with configurable ID schemas
|
|
29
|
+
- Unified Markdown report output (errors, tree, metrics, impact, AI analysis)
|
|
30
|
+
- MCP server with `list_artifacts`, `search_artifacts`, and `get_artifact_content` tools
|
|
31
|
+
- `syntagmax init` command for project scaffolding
|
|
32
|
+
- Configurable AI providers: Ollama, Anthropic, OpenAI, Gemini, AWS Bedrock
|
|
33
|
+
- Localisation support (English, Russian) via Babel
|
|
34
|
+
- Project metrics: requirement coverage, TBD detection, status tracking
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-2026 Flyvercity
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|