From 461318a6562aa1e56d7f457d0768383b9fd55856 Mon Sep 17 00:00:00 2001 From: Alex Selimov Date: Sun, 5 Oct 2025 20:16:33 -0400 Subject: [PATCH] Initial vibecoded proof of concept --- .claude/commands/analyze.md | 101 ++++ .claude/commands/clarify.md | 158 +++++ .claude/commands/constitution.md | 73 +++ .claude/commands/implement.md | 56 ++ .claude/commands/plan.md | 43 ++ .claude/commands/specify.md | 21 + .claude/commands/tasks.md | 62 ++ .luacheckrc | 40 ++ Makefile | 5 + README.md | 382 +++++++++++++ lua/notex/database/init.lua | 151 +++++ lua/notex/database/migrations.lua | 210 +++++++ lua/notex/database/schema.lua | 264 +++++++++ lua/notex/document.lua | 28 + lua/notex/index/init.lua | 368 ++++++++++++ lua/notex/index/scanner.lua | 258 +++++++++ lua/notex/index/updater.lua | 317 ++++++++++ lua/notex/init.lua | 551 ++++++++++++++++++ lua/notex/parser/init.lua | 311 ++++++++++ lua/notex/parser/markdown.lua | 224 ++++++++ lua/notex/parser/yaml.lua | 192 +++++++ lua/notex/query.lua | 0 lua/notex/query/builder.lua | 370 ++++++++++++ lua/notex/query/executor.lua | 374 ++++++++++++ lua/notex/query/init.lua | 365 ++++++++++++ lua/notex/query/parser.lua | 412 +++++++++++++ lua/notex/schema.lua | 12 + lua/notex/ui/buffer.lua | 561 ++++++++++++++++++ lua/notex/ui/editor.lua | 572 +++++++++++++++++++ lua/notex/ui/init.lua | 480 ++++++++++++++++ lua/notex/ui/view.lua | 525 +++++++++++++++++ lua/notex/utils/cache.lua | 540 +++++++++++++++++ lua/notex/utils/date.lua | 398 +++++++++++++ lua/notex/utils/errors.lua | 402 +++++++++++++ lua/notex/utils/init.lua | 213 +++++++ lua/notex/utils/logging.lua | 382 +++++++++++++ lua/notex/utils/types.lua | 381 ++++++++++++ lua/notex/utils/validation.lua | 472 +++++++++++++++ lua/notex/view.lua | 0 rocks.toml | 20 + specs/002-notex-is-a/contracts/query-api.md | 172 ++++++ specs/002-notex-is-a/data-model.md | 108 ++++ specs/002-notex-is-a/plan.md | 237 ++++++++ specs/002-notex-is-a/quickstart.md | 192 +++++++ specs/002-notex-is-a/research.md | 43 ++ specs/002-notex-is-a/spec.md | 123 ++++ specs/002-notex-is-a/tasks.md | 205 +++++++ stylua.toml | 4 + tests/contract/test_query_api.lua | 117 ++++ tests/integration/main_spec.lua | 0 tests/integration/test_document_indexing.lua | 129 +++++ tests/integration/test_query_workflow.lua | 143 +++++ tests/integration/test_virtual_buffer.lua | 174 ++++++ tests/performance/test_query_performance.lua | 180 ++++++ tests/spec/document_spec.lua | 32 ++ tests/spec/query_spec.lua | 0 tests/spec/schema_spec.lua | 23 + tests/unit/utils/test_cache.lua | 324 +++++++++++ tests/unit/utils/test_date.lua | 277 +++++++++ tests/unit/utils/test_types.lua | 247 ++++++++ tests/unit/utils/test_validation.lua | 282 +++++++++ 61 files changed, 13306 insertions(+) create mode 100644 .claude/commands/analyze.md create mode 100644 .claude/commands/clarify.md create mode 100644 .claude/commands/constitution.md create mode 100644 .claude/commands/implement.md create mode 100644 .claude/commands/plan.md create mode 100644 .claude/commands/specify.md create mode 100644 .claude/commands/tasks.md create mode 100644 .luacheckrc create mode 100644 Makefile create mode 100644 README.md create mode 100644 lua/notex/database/init.lua create mode 100644 lua/notex/database/migrations.lua create mode 100644 lua/notex/database/schema.lua create mode 100644 lua/notex/document.lua create mode 100644 lua/notex/index/init.lua create mode 100644 lua/notex/index/scanner.lua create mode 100644 lua/notex/index/updater.lua create mode 100644 lua/notex/init.lua create mode 100644 lua/notex/parser/init.lua create mode 100644 lua/notex/parser/markdown.lua create mode 100644 lua/notex/parser/yaml.lua create mode 100644 lua/notex/query.lua create mode 100644 lua/notex/query/builder.lua create mode 100644 lua/notex/query/executor.lua create mode 100644 lua/notex/query/init.lua create mode 100644 lua/notex/query/parser.lua create mode 100644 lua/notex/schema.lua create mode 100644 lua/notex/ui/buffer.lua create mode 100644 lua/notex/ui/editor.lua create mode 100644 lua/notex/ui/init.lua create mode 100644 lua/notex/ui/view.lua create mode 100644 lua/notex/utils/cache.lua create mode 100644 lua/notex/utils/date.lua create mode 100644 lua/notex/utils/errors.lua create mode 100644 lua/notex/utils/init.lua create mode 100644 lua/notex/utils/logging.lua create mode 100644 lua/notex/utils/types.lua create mode 100644 lua/notex/utils/validation.lua create mode 100644 lua/notex/view.lua create mode 100644 rocks.toml create mode 100644 specs/002-notex-is-a/contracts/query-api.md create mode 100644 specs/002-notex-is-a/data-model.md create mode 100644 specs/002-notex-is-a/plan.md create mode 100644 specs/002-notex-is-a/quickstart.md create mode 100644 specs/002-notex-is-a/research.md create mode 100644 specs/002-notex-is-a/spec.md create mode 100644 specs/002-notex-is-a/tasks.md create mode 100644 stylua.toml create mode 100644 tests/contract/test_query_api.lua create mode 100644 tests/integration/main_spec.lua create mode 100644 tests/integration/test_document_indexing.lua create mode 100644 tests/integration/test_query_workflow.lua create mode 100644 tests/integration/test_virtual_buffer.lua create mode 100644 tests/performance/test_query_performance.lua create mode 100644 tests/spec/document_spec.lua create mode 100644 tests/spec/query_spec.lua create mode 100644 tests/spec/schema_spec.lua create mode 100644 tests/unit/utils/test_cache.lua create mode 100644 tests/unit/utils/test_date.lua create mode 100644 tests/unit/utils/test_types.lua create mode 100644 tests/unit/utils/test_validation.lua diff --git a/.claude/commands/analyze.md b/.claude/commands/analyze.md new file mode 100644 index 0000000..f4c1a7b --- /dev/null +++ b/.claude/commands/analyze.md @@ -0,0 +1,101 @@ +--- +description: Perform a non-destructive cross-artifact consistency and quality analysis across spec.md, plan.md, and tasks.md after task generation. +--- + +The user input to you can be provided directly by the agent or as a command argument - you **MUST** consider it before proceeding with the prompt (if not empty). + +User input: + +$ARGUMENTS + +Goal: Identify inconsistencies, duplications, ambiguities, and underspecified items across the three core artifacts (`spec.md`, `plan.md`, `tasks.md`) before implementation. This command MUST run only after `/tasks` has successfully produced a complete `tasks.md`. + +STRICTLY READ-ONLY: Do **not** modify any files. Output a structured analysis report. Offer an optional remediation plan (user must explicitly approve before any follow-up editing commands would be invoked manually). + +Constitution Authority: The project constitution (`.specify/memory/constitution.md`) is **non-negotiable** within this analysis scope. Constitution conflicts are automatically CRITICAL and require adjustment of the spec, plan, or tasks—not dilution, reinterpretation, or silent ignoring of the principle. If a principle itself needs to change, that must occur in a separate, explicit constitution update outside `/analyze`. + +Execution steps: + +1. Run `.specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks` once from repo root and parse JSON for FEATURE_DIR and AVAILABLE_DOCS. Derive absolute paths: + - SPEC = FEATURE_DIR/spec.md + - PLAN = FEATURE_DIR/plan.md + - TASKS = FEATURE_DIR/tasks.md + Abort with an error message if any required file is missing (instruct the user to run missing prerequisite command). + +2. Load artifacts: + - Parse spec.md sections: Overview/Context, Functional Requirements, Non-Functional Requirements, User Stories, Edge Cases (if present). + - Parse plan.md: Architecture/stack choices, Data Model references, Phases, Technical constraints. + - Parse tasks.md: Task IDs, descriptions, phase grouping, parallel markers [P], referenced file paths. + - Load constitution `.specify/memory/constitution.md` for principle validation. + +3. Build internal semantic models: + - Requirements inventory: Each functional + non-functional requirement with a stable key (derive slug based on imperative phrase; e.g., "User can upload file" -> `user-can-upload-file`). + - User story/action inventory. + - Task coverage mapping: Map each task to one or more requirements or stories (inference by keyword / explicit reference patterns like IDs or key phrases). + - Constitution rule set: Extract principle names and any MUST/SHOULD normative statements. + +4. Detection passes: + A. Duplication detection: + - Identify near-duplicate requirements. Mark lower-quality phrasing for consolidation. + B. Ambiguity detection: + - Flag vague adjectives (fast, scalable, secure, intuitive, robust) lacking measurable criteria. + - Flag unresolved placeholders (TODO, TKTK, ???, , etc.). + C. Underspecification: + - Requirements with verbs but missing object or measurable outcome. + - User stories missing acceptance criteria alignment. + - Tasks referencing files or components not defined in spec/plan. + D. Constitution alignment: + - Any requirement or plan element conflicting with a MUST principle. + - Missing mandated sections or quality gates from constitution. + E. Coverage gaps: + - Requirements with zero associated tasks. + - Tasks with no mapped requirement/story. + - Non-functional requirements not reflected in tasks (e.g., performance, security). + F. Inconsistency: + - Terminology drift (same concept named differently across files). + - Data entities referenced in plan but absent in spec (or vice versa). + - Task ordering contradictions (e.g., integration tasks before foundational setup tasks without dependency note). + - Conflicting requirements (e.g., one requires to use Next.js while other says to use Vue as the framework). + +5. Severity assignment heuristic: + - CRITICAL: Violates constitution MUST, missing core spec artifact, or requirement with zero coverage that blocks baseline functionality. + - HIGH: Duplicate or conflicting requirement, ambiguous security/performance attribute, untestable acceptance criterion. + - MEDIUM: Terminology drift, missing non-functional task coverage, underspecified edge case. + - LOW: Style/wording improvements, minor redundancy not affecting execution order. + +6. Produce a Markdown report (no file writes) with sections: + + ### Specification Analysis Report + | ID | Category | Severity | Location(s) | Summary | Recommendation | + |----|----------|----------|-------------|---------|----------------| + | A1 | Duplication | HIGH | spec.md:L120-134 | Two similar requirements ... | Merge phrasing; keep clearer version | + (Add one row per finding; generate stable IDs prefixed by category initial.) + + Additional subsections: + - Coverage Summary Table: + | Requirement Key | Has Task? | Task IDs | Notes | + - Constitution Alignment Issues (if any) + - Unmapped Tasks (if any) + - Metrics: + * Total Requirements + * Total Tasks + * Coverage % (requirements with >=1 task) + * Ambiguity Count + * Duplication Count + * Critical Issues Count + +7. At end of report, output a concise Next Actions block: + - If CRITICAL issues exist: Recommend resolving before `/implement`. + - If only LOW/MEDIUM: User may proceed, but provide improvement suggestions. + - Provide explicit command suggestions: e.g., "Run /specify with refinement", "Run /plan to adjust architecture", "Manually edit tasks.md to add coverage for 'performance-metrics'". + +8. Ask the user: "Would you like me to suggest concrete remediation edits for the top N issues?" (Do NOT apply them automatically.) + +Behavior rules: +- NEVER modify files. +- NEVER hallucinate missing sections—if absent, report them. +- KEEP findings deterministic: if rerun without changes, produce consistent IDs and counts. +- LIMIT total findings in the main table to 50; aggregate remainder in a summarized overflow note. +- If zero issues found, emit a success report with coverage statistics and proceed recommendation. + +Context: $ARGUMENTS diff --git a/.claude/commands/clarify.md b/.claude/commands/clarify.md new file mode 100644 index 0000000..26ff530 --- /dev/null +++ b/.claude/commands/clarify.md @@ -0,0 +1,158 @@ +--- +description: Identify underspecified areas in the current feature spec by asking up to 5 highly targeted clarification questions and encoding answers back into the spec. +--- + +The user input to you can be provided directly by the agent or as a command argument - you **MUST** consider it before proceeding with the prompt (if not empty). + +User input: + +$ARGUMENTS + +Goal: Detect and reduce ambiguity or missing decision points in the active feature specification and record the clarifications directly in the spec file. + +Note: This clarification workflow is expected to run (and be completed) BEFORE invoking `/plan`. If the user explicitly states they are skipping clarification (e.g., exploratory spike), you may proceed, but must warn that downstream rework risk increases. + +Execution steps: + +1. Run `.specify/scripts/bash/check-prerequisites.sh --json --paths-only` from repo root **once** (combined `--json --paths-only` mode / `-Json -PathsOnly`). Parse minimal JSON payload fields: + - `FEATURE_DIR` + - `FEATURE_SPEC` + - (Optionally capture `IMPL_PLAN`, `TASKS` for future chained flows.) + - If JSON parsing fails, abort and instruct user to re-run `/specify` or verify feature branch environment. + +2. Load the current spec file. Perform a structured ambiguity & coverage scan using this taxonomy. For each category, mark status: Clear / Partial / Missing. Produce an internal coverage map used for prioritization (do not output raw map unless no questions will be asked). + + Functional Scope & Behavior: + - Core user goals & success criteria + - Explicit out-of-scope declarations + - User roles / personas differentiation + + Domain & Data Model: + - Entities, attributes, relationships + - Identity & uniqueness rules + - Lifecycle/state transitions + - Data volume / scale assumptions + + Interaction & UX Flow: + - Critical user journeys / sequences + - Error/empty/loading states + - Accessibility or localization notes + + Non-Functional Quality Attributes: + - Performance (latency, throughput targets) + - Scalability (horizontal/vertical, limits) + - Reliability & availability (uptime, recovery expectations) + - Observability (logging, metrics, tracing signals) + - Security & privacy (authN/Z, data protection, threat assumptions) + - Compliance / regulatory constraints (if any) + + Integration & External Dependencies: + - External services/APIs and failure modes + - Data import/export formats + - Protocol/versioning assumptions + + Edge Cases & Failure Handling: + - Negative scenarios + - Rate limiting / throttling + - Conflict resolution (e.g., concurrent edits) + + Constraints & Tradeoffs: + - Technical constraints (language, storage, hosting) + - Explicit tradeoffs or rejected alternatives + + Terminology & Consistency: + - Canonical glossary terms + - Avoided synonyms / deprecated terms + + Completion Signals: + - Acceptance criteria testability + - Measurable Definition of Done style indicators + + Misc / Placeholders: + - TODO markers / unresolved decisions + - Ambiguous adjectives ("robust", "intuitive") lacking quantification + + For each category with Partial or Missing status, add a candidate question opportunity unless: + - Clarification would not materially change implementation or validation strategy + - Information is better deferred to planning phase (note internally) + +3. Generate (internally) a prioritized queue of candidate clarification questions (maximum 5). Do NOT output them all at once. Apply these constraints: + - Maximum of 5 total questions across the whole session. + - Each question must be answerable with EITHER: + * A short multiple‑choice selection (2–5 distinct, mutually exclusive options), OR + * A one-word / short‑phrase answer (explicitly constrain: "Answer in <=5 words"). + - Only include questions whose answers materially impact architecture, data modeling, task decomposition, test design, UX behavior, operational readiness, or compliance validation. + - Ensure category coverage balance: attempt to cover the highest impact unresolved categories first; avoid asking two low-impact questions when a single high-impact area (e.g., security posture) is unresolved. + - Exclude questions already answered, trivial stylistic preferences, or plan-level execution details (unless blocking correctness). + - Favor clarifications that reduce downstream rework risk or prevent misaligned acceptance tests. + - If more than 5 categories remain unresolved, select the top 5 by (Impact * Uncertainty) heuristic. + +4. Sequential questioning loop (interactive): + - Present EXACTLY ONE question at a time. + - For multiple‑choice questions render options as a Markdown table: + + | Option | Description | + |--------|-------------| + | A |