Skip to content

Conversation

@TabishB
Copy link
Contributor

@TabishB TabishB commented Dec 23, 2025

Summary

  • Add internal documentation for the artifact-based approach to OpenSpec core
  • Remove docs/ from .gitignore to allow documentation to be tracked
  • Document design decisions, terminology, and philosophy behind artifact tracking with dependency awareness

Test plan

  • Documentation renders correctly in markdown
  • Review content accuracy

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Introduced comprehensive POC documentation detailing artifact-tracking system design and architecture, including design philosophy and terminology, architecture components, dependency graph semantics with DAG modeling and build-order logic, filesystem-based state management, two-level template resolution mechanisms, CLI command specifications, expected behaviors, and implementation roadmap with integration layers.

✏️ Tip: You can customize this high-level summary in your review settings.

Add internal documentation for the artifact-based approach to OpenSpec
core. This document outlines design decisions, terminology, and the
philosophy behind treating dependencies as enablers rather than gates.
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 23, 2025

Walkthrough

Removed docs/ from .gitignore to allow documentation tracking. Added comprehensive artifact_poc.md documentation that outlines the design, architecture, and implementation approach for a filesystem-based artifact-tracking system with dependency awareness using the POC-OpenSpec-Core methodology.

Changes

Cohort / File(s) Summary
Configuration
.gitignore
Removed ignore entries for the internal docs directory (# Internal Docs and docs/ entries deleted), enabling Git tracking of documentation files.
Documentation
docs/artifact_poc.md
New comprehensive design document introducing the POC-OpenSpec-Core approach. Covers core concepts (Change, Schema, Artifact, Template), dependency graph semantics, state management using filesystem as primary store, two-level template resolution, artifact pipeline workflows, implementation focus areas, and key design principles emphasizing deterministic CLI and stateless operations.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~15 minutes

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title 'docs: add artifact POC analysis document' directly and concisely summarizes the main change—adding documentation for an artifact POC approach. It is specific, clear, and accurately reflects the primary objective of the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch artifact-poc

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
docs/artifact_poc.md (2)

31-31: Add language specifications to all fenced code blocks.

All code/pseudocode blocks should declare a language identifier for proper syntax highlighting. The markdown linter flags 11 violations (MD040). Examples:

  • Line 31 (tree structure): use ```text or ```sh
  • Line 106 (type definitions): use ```typescript or ```javascript
  • Line 290 (pseudocode): use ```javascript or ```typescript
  • Line 383 (JSON output example): use ```json
🔎 Example fixes for key blocks
- Line 31 - Change:
-   ```
+   ```text
    .openspec/
    ├── templates/...

- Line 106 - Change:
-   ```
+   ```typescript
    Artifact {
      id: string
      ...

- Line 383 - Change:
-   ```
+   ```json
    Input:  schema YAML path + change directory
    Output: {
      completed: ['proposal'],
      ...

Apply similar fixes to all flagged lines (52, 145, 176, 242, 290, 301, 315, 327, 346, 439).

Also applies to: 52-52, 106-106, 145-145, 176-176, 242-242, 290-290, 301-301, 315-315, 327-327, 346-346, 383-383, 439-439


172-172: Minor: Capitalize "Markdown" as proper noun.

Line 172: "Formatted markdown" should be "Formatted Markdown" (proper noun).

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c08a53c and 8b428f1.

📒 Files selected for processing (2)
  • .gitignore
  • docs/artifact_poc.md
💤 Files with no reviewable changes (1)
  • .gitignore
🧰 Additional context used
🧠 Learnings (6)
📓 Common learnings
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: openspec/AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:19.004Z
Learning: Create `design.md` only when needed: cross-cutting changes, new external dependencies, significant data model changes, security/performance complexity, or pre-coding ambiguity
📚 Learning: 2025-11-25T01:08:19.004Z
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: openspec/AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:19.004Z
Learning: Create `design.md` only when needed: cross-cutting changes, new external dependencies, significant data model changes, security/performance complexity, or pre-coding ambiguity

Applied to files:

  • docs/artifact_poc.md
📚 Learning: 2025-11-25T01:08:19.004Z
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: openspec/AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:19.004Z
Learning: Applies to openspec/changes/**/*.md : Scaffold proposal using `proposal.md`, `tasks.md`, optional `design.md`, and delta specs under `openspec/changes/<id>/`

Applied to files:

  • docs/artifact_poc.md
📚 Learning: 2025-11-25T01:08:02.839Z
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:02.839Z
Learning: Use `@/openspec/AGENTS.md` to learn how to create and apply change proposals, spec format and conventions, and project structure and guidelines

Applied to files:

  • docs/artifact_poc.md
📚 Learning: 2025-11-25T01:08:19.004Z
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: openspec/AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:19.004Z
Learning: Applies to openspec/changes/*/proposal.md : Ensure `proposal.md` includes sections: Why (1-2 sentences), What Changes (bullet list with breaking change markers), and Impact (affected specs and code)

Applied to files:

  • docs/artifact_poc.md
📚 Learning: 2025-11-25T01:08:02.839Z
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:02.839Z
Learning: Always open `@/openspec/AGENTS.md` when the request mentions planning or proposals (words like proposal, spec, change, plan), introduces new capabilities, breaking changes, architecture shifts, or performance/security work, or sounds ambiguous and needs the authoritative spec before coding

Applied to files:

  • docs/artifact_poc.md
🪛 LanguageTool
docs/artifact_poc.md

[uncategorized] ~172-~172: Did you mean the formatting language “Markdown” (= proper noun)?
Context: ...| | Generate status reports | Formatted markdown with progress | **Key Class - ChangeSt...

(MARKDOWN_NNP)

🪛 markdownlint-cli2 (0.18.1)
docs/artifact_poc.md

31-31: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


52-52: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


106-106: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


145-145: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


176-176: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


242-242: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


290-290: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


301-301: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


315-315: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


327-327: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


346-346: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


383-383: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


439-439: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (2)
docs/artifact_poc.md (2)

80-530: Validate content accuracy before finalizing design.

The document is AI-generated and comprehensive, but the test plan shows "Review content accuracy" is still unchecked. Before this design guide is finalized and used for implementation, the following should be verified:

  1. Component APIs - Ensure method signatures and responsibilities (lines 93-158) align with actual implementation intent
  2. Dependency semantics - Verify topological sort, ready-artifact detection, and DAG validation logic (lines 99-131)
  3. Template fallback - Confirm 2-level inheritance behavior and glob pattern handling (lines 313-334)
  4. CLI design - Validate determinism guarantees and explicit --change parameter approach (lines 199-211)
  5. Directory structure - Ensure paths and naming conventions are correct (lines 437-471)
  6. YAML schema - Review artifact definition format and validation rules (lines 475-511)

This is critical because the document will guide implementation and establish contracts between components.

Consider:

  • Reviewing the document against any existing prototype or design discussions
  • Having domain experts (architecture/maintainers) sign off on the component APIs
  • Validating examples (dependency graphs, schema format) are internally consistent
  • Confirming this matches any preliminary implementation work or discussions

1-40: Add language specifications to all code blocks for clarity and proper syntax highlighting.

The document placement in docs/artifact_poc.md is appropriate—AGENTS.md's structured proposal/task/design scaffolding applies specifically to formal change proposals awaiting implementation, not exploratory POC documentation. This is internal analysis that will inform future proposals, so its current location is correct.

However, 27 code blocks lack language specifications (lines 31, 33, 52, 64, 106, 124, 145, 149, 176, 188, 242, 280, 290, 295, 301, 304, 315, 321, 327, 334, 346, 367, 383, 391, 439, 471, 511). Add language tags (e.g., bash, yaml, json, markdown) to all code blocks for readability and syntax highlighting.

⛔ Skipped due to learnings
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:02.839Z
Learning: Use `@/openspec/AGENTS.md` to learn how to create and apply change proposals, spec format and conventions, and project structure and guidelines
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: openspec/AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:19.004Z
Learning: Create `design.md` only when needed: cross-cutting changes, new external dependencies, significant data model changes, security/performance complexity, or pre-coding ambiguity
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:02.839Z
Learning: Always open `@/openspec/AGENTS.md` when the request mentions planning or proposals (words like proposal, spec, change, plan), introduces new capabilities, breaking changes, architecture shifts, or performance/security work, or sounds ambiguous and needs the authoritative spec before coding
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: openspec/AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:19.004Z
Learning: Applies to openspec/changes/*/proposal.md : Ensure `proposal.md` includes sections: Why (1-2 sentences), What Changes (bullet list with breaking change markers), and Impact (affected specs and code)
Learnt from: CR
Repo: Fission-AI/OpenSpec PR: 0
File: openspec/AGENTS.md:0-0
Timestamp: 2025-11-25T01:08:19.004Z
Learning: Applies to openspec/changes/**/*.md : Scaffold proposal using `proposal.md`, `tasks.md`, optional `design.md`, and delta specs under `openspec/changes/<id>/`

@TabishB TabishB merged commit 2c2599b into main Dec 23, 2025
7 checks passed
appboypov added a commit to appboypov/OpenSplx that referenced this pull request Dec 24, 2025
* feat(cli): add openspec config command for global configuration management (Fission-AI#382)

* feat(cli): add openspec config command for global configuration management

Implements the `openspec config` command with subcommands:
- `path`: Show config file location
- `list [--json]`: Show all current settings
- `get <key>`: Get a specific value (raw output for scripting)
- `set <key> <value> [--string]`: Set a value with auto type coercion
- `unset <key>`: Remove a key (revert to default)
- `reset --all [-y]`: Reset configuration to defaults
- `edit`: Open config in $EDITOR/$VISUAL

Key features:
- Dot notation for nested key access (e.g., featureFlags.someFlag)
- Auto type coercion (true/false → boolean, numbers → number)
- --string flag to force string storage
- Zod schema validation with unknown field passthrough
- Reserved --scope flag for future project-local config
- Windows-compatible editor spawning with proper path quoting
- Shell completion registry integration

* test(config): add additional unit tests for validation and coercion

- Add tests for unknown fields with various types
- Add test to verify error message path for featureFlags
- Add test for number values rejection in featureFlags
- Add config set simulation tests to verify full coerce → set → validate flow

* fix(config): avoid shell parsing in config edit to handle paths with spaces

Use spawn with shell: false and pass configPath as an argument instead
of building a shell command string. This correctly handles spaces in
both the EDITOR path and config file path on all platforms.

* chore(openspec): archive add-config-command and create cli-config spec

Move completed change to archive and apply spec deltas to create
the cli-config specification documenting the config command interface.

* Validate config keys on set

* Add changeset for config command and shell completions (Fission-AI#388)

* chore(release): version packages (Fission-AI#389)

* Version Packages

* chore: trigger CI

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Tabish Bidiwale <tabishbidiwale@gmail.com>

* feat(ci): migrate to npm OIDC trusted publishing (Fission-AI#390)

Replace classic npm token authentication with OIDC trusted publishing:

- Add `id-token: write` permission for OIDC token generation
- Upgrade to Node 24 (includes npm 11.5.1+ required for OIDC)
- Remove NPM_TOKEN/NODE_AUTH_TOKEN env vars (OIDC replaces them)

This eliminates the need for rotating npm access tokens and provides
cryptographically verified publisher identity with automatic provenance
attestation.

Requires configuring trusted publisher on npmjs.com:
- Organization: Fission-AI
- Repository: OpenSpec
- Workflow: release-prepare.yml

* fix(cli): use dynamic import for @inquirer/prompts in config command (Fission-AI#392)

* fix(cli): use dynamic import for @inquirer/prompts in config command

The config command (added in Fission-AI#382) reintroduced the pre-commit hook hang
issue that was fixed in Fission-AI#380. The static import of @inquirer/prompts at
module load time causes stdin event listeners to be registered even when
running non-interactive commands, preventing clean process exit when
stdin is piped (as pre-commit does).

Convert the static import to a dynamic import that only loads inquirer
when the `config reset` command is actually used interactively.

Fixes Fission-AI#367

* chore: add ESLint with no-restricted-imports rule for @InQuirer

Add ESLint configuration that prevents static imports of @inquirer/*
modules. This prevents future regressions of the pre-commit hook hang
issue fixed in this PR.

The rule shows a helpful error message pointing to issue Fission-AI#367 for context.
init.ts is exempted since it's already dynamically imported from the CLI.

* ci: add ESLint step to lint job

Run `pnpm lint` in CI to enforce the no-restricted-imports rule
that prevents static @InQuirer imports.

* Add changeset for config command dynamic import fix (Fission-AI#393)

* chore(release): version packages (Fission-AI#394)

* Version Packages

* chore: trigger CI

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Tabish Bidiwale <tabishbidiwale@gmail.com>

* fix(cli): respect --no-interactive flag in validate command (Fission-AI#395)

* fix(cli): respect --no-interactive flag in validate command

The validate command's spinner was starting regardless of the
--no-interactive flag, causing hangs in pre-commit hooks.

Changes:
- Pass noInteractive option to runBulkValidation
- Handle Commander.js --no-* flag syntax (sets interactive=false)
- Only start ora spinner when in interactive mode
- Add CI environment variable check to isInteractive() for industry
  standard compliance

* test: add unit tests for interactive utilities and CLI flag

- Export resolveNoInteractive() helper for reuse
- Add InteractiveOptions type export for testing
- Refactor validate.ts to use resolveNoInteractive()
- Add 17 unit tests for isInteractive() and resolveNoInteractive()
- Add CLI integration test for --no-interactive flag

This prevents future regressions where Commander.js --no-* flag
parsing is not properly handled.

* Add changeset for --no-interactive flag fix (Fission-AI#396)

* chore(release): version packages (Fission-AI#397)

* Version Packages

* chore: trigger CI

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Tabish Bidiwale <tabishbidiwale@gmail.com>

* docs: add artifact POC analysis document (Fission-AI#398)

Add internal documentation for the artifact-based approach to OpenSpec
core. This document outlines design decisions, terminology, and the
philosophy behind treating dependencies as enablers rather than gates.

* fix(archive): allow REMOVED requirements when creating new spec files (Fission-AI#403) (Fission-AI#404)

When creating a new spec file, REMOVED requirements are now ignored
with a warning instead of causing archive to fail. This enables
refactoring scenarios where old fields are removed while documenting
a capability for the first time.

Fixes Fission-AI#403

---------

Co-authored-by: Tabish Bidiwale <30385142+TabishB@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Tabish Bidiwale <tabishbidiwale@gmail.com>
Co-authored-by: Eunsong-Park <111448985+smileeunsong@users.noreply.github.com>
appboypov pushed a commit to appboypov/OpenSplx that referenced this pull request Dec 24, 2025
Add internal documentation for the artifact-based approach to OpenSpec
core. This document outlines design decisions, terminology, and the
philosophy behind treating dependencies as enablers rather than gates.
appboypov pushed a commit to appboypov/OpenSplx that referenced this pull request Dec 24, 2025
Add internal documentation for the artifact-based approach to OpenSpec
core. This document outlines design decisions, terminology, and the
philosophy behind treating dependencies as enablers rather than gates.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants