diff --git a/docs-cms/adr/adr-001-pydantic-schema-validation.md b/docs-cms/adr/adr-001-pydantic-schema-validation.md index d7bd9d6..5e3a44a 100644 --- a/docs-cms/adr/adr-001-pydantic-schema-validation.md +++ b/docs-cms/adr/adr-001-pydantic-schema-validation.md @@ -1,5 +1,5 @@ --- -created: '2025-10-26' +created: 2025-10-26T02:35:12Z deciders: Engineering Team doc_uuid: a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d id: adr-001 @@ -11,7 +11,6 @@ tags: - schema - validation title: Use Pydantic for Frontmatter Schema Validation -updated: 2026-01-26 --- # ADR-001: Use Pydantic for Frontmatter Schema Validation @@ -31,9 +30,7 @@ Different doc types (ADR, RFC, Memo) need different required fields. Pydantic gi ```python class ADRFrontmatter(BaseModel): status: Literal["Proposed", "Accepted", "Deprecated", "Superseded"] -created: 2025-10-26 -updated: 2026-01-26 - date: datetime.date + created: datetime.datetime # ISO 8601 format deciders: str = Field(min_length=1) @field_validator("id") diff --git a/docs-cms/adr/adr-002-click-cli-framework.md b/docs-cms/adr/adr-002-click-cli-framework.md index f09d641..769d081 100644 --- a/docs-cms/adr/adr-002-click-cli-framework.md +++ b/docs-cms/adr/adr-002-click-cli-framework.md @@ -1,5 +1,5 @@ --- -created: '2025-10-26' +created: 2025-10-26T02:35:12Z deciders: Engineering Team doc_uuid: b2c3d4e5-f6a7-4b6c-9d0e-1f2a3b4c5d6e id: adr-002 @@ -11,7 +11,6 @@ tags: - click - command-line title: Use Click for CLI Framework -updated: 2026-01-26 --- # ADR-002: Use Click for CLI Framework diff --git a/docs-cms/adr/adr-003-pytest-tmp-path-testing.md b/docs-cms/adr/adr-003-pytest-tmp-path-testing.md index bc14546..316f7aa 100644 --- a/docs-cms/adr/adr-003-pytest-tmp-path-testing.md +++ b/docs-cms/adr/adr-003-pytest-tmp-path-testing.md @@ -1,5 +1,5 @@ --- -created: '2025-10-26' +created: 2025-10-26T02:35:12Z deciders: Engineering Team doc_uuid: a04e65be-7296-4051-8a64-98cca8abcdb0 id: adr-003 @@ -11,7 +11,6 @@ tags: - testing - tmp-path title: Use pytest with tmp_path for Testing -updated: 2026-01-26 --- # ADR-003: Use pytest with tmp_path for Testing diff --git a/docs-cms/prd/prd-001-validation-framework.md b/docs-cms/prd/prd-001-validation-framework.md index f309d4f..48d9cd5 100644 --- a/docs-cms/prd/prd-001-validation-framework.md +++ b/docs-cms/prd/prd-001-validation-framework.md @@ -1,6 +1,6 @@ --- author: Engineering Team -created: '2025-10-26' +created: 2025-10-26T02:35:12Z doc_uuid: e5f6a7b8-c9d0-4e9f-2a3b-4c5d6e7f8a9b id: prd-001 project_id: docuchango @@ -11,7 +11,6 @@ tags: - product - validation title: 'Docuchango: Documentation Validation Tool' -updated: 2026-01-26 --- # PRD-001: Docuchango diff --git a/docs-cms/rfcs/rfc-001-document-template-system.md b/docs-cms/rfcs/rfc-001-document-template-system.md index ff39a9b..2b9e7ae 100644 --- a/docs-cms/rfcs/rfc-001-document-template-system.md +++ b/docs-cms/rfcs/rfc-001-document-template-system.md @@ -10,7 +10,6 @@ tags: - standards - templates title: Document Template System -updated: 2025-01-26 --- # RFC-001: Document Template System diff --git a/docuchango/schemas.py b/docuchango/schemas.py index a404db9..87c936e 100644 --- a/docuchango/schemas.py +++ b/docuchango/schemas.py @@ -191,11 +191,9 @@ class ADRFrontmatter(BaseModel): - project_id: Project identifier from docs-project.yaml (e.g., "my-project") - doc_uuid: Unique identifier for backend tracking (UUID v4 format) - DERIVED FIELDS (computed from git history): - - updated: Last modification date, derived from git commit history - DEPRECATED FIELDS (supported for backwards compatibility): - date: Legacy field, use 'created' instead. Will be auto-migrated. + - updated: No longer stored. Derive from git history with: git log -1 --format=%aI """ title: str = Field( @@ -283,8 +281,7 @@ class RFCFrontmatter(BaseModel): - project_id: Project identifier from docs-project.yaml (e.g., "my-project") - doc_uuid: Unique identifier for backend tracking (UUID v4 format) - DERIVED FIELDS (computed from git history): - - updated: Last modification date, derived from git commit history + NOTE: The 'updated' field is no longer stored. Derive from git: git log -1 --format=%aI """ title: str = Field( @@ -369,8 +366,7 @@ class MemoFrontmatter(BaseModel): - project_id: Project identifier from docs-project.yaml (e.g., "my-project") - doc_uuid: Unique identifier for backend tracking (UUID v4 format) - DERIVED FIELDS (computed from git history): - - updated: Last modification date, derived from git commit history + NOTE: The 'updated' field is no longer stored. Derive from git: git log -1 --format=%aI """ title: str = Field( @@ -453,8 +449,7 @@ class PRDFrontmatter(BaseModel): - project_id: Project identifier from docs-project.yaml (e.g., "my-project") - doc_uuid: Unique identifier for backend tracking (UUID v4 format) - DERIVED FIELDS (computed from git history): - - updated: Last modification date, derived from git commit history + NOTE: The 'updated' field is no longer stored. Derive from git: git log -1 --format=%aI """ title: str = Field( diff --git a/docuchango/templates/adr-000-template.md b/docuchango/templates/adr-000-template.md index 0ad94ce..70c3019 100644 --- a/docuchango/templates/adr-000-template.md +++ b/docuchango/templates/adr-000-template.md @@ -2,7 +2,6 @@ title: Title Goes Here status: Proposed created: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))" -updated: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))" deciders: Engineering Team # team or person who made the decision tags: [architecture, design] id: adr-000 # lowercase adr-XXX format matching filename diff --git a/docuchango/templates/memo-000-template.md b/docuchango/templates/memo-000-template.md index d6cb590..06cd0b6 100644 --- a/docuchango/templates/memo-000-template.md +++ b/docuchango/templates/memo-000-template.md @@ -2,7 +2,6 @@ title: Title Goes Here author: Engineering Team # git config user.name created: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))" -updated: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))" tags: [memo, technical] id: memo-000 # lowercase memo-XXX format matching filename project_id: my-project # from docs-project.yaml diff --git a/docuchango/templates/prd-000-template.md b/docuchango/templates/prd-000-template.md index 6e7915c..d87e6ad 100644 --- a/docuchango/templates/prd-000-template.md +++ b/docuchango/templates/prd-000-template.md @@ -3,7 +3,6 @@ title: Title Goes Here status: Draft author: Product Team # git config user.name created: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))" -updated: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))" target_release: v1.0.0 tags: [feature, product] id: prd-000 # lowercase prd-XXX format matching filename diff --git a/docuchango/templates/rfc-000-template.md b/docuchango/templates/rfc-000-template.md index 4fd62fa..ea108fa 100644 --- a/docuchango/templates/rfc-000-template.md +++ b/docuchango/templates/rfc-000-template.md @@ -3,7 +3,6 @@ title: Title Goes Here status: Draft author: Engineering Team # git config user.name created: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))" -updated: YYYY-MM-DDTHH:MM:SSZ # python -c "from datetime import datetime, timezone; print(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))" tags: [rfc, design] id: rfc-000 # lowercase rfc-XXX format matching filename project_id: my-project # from docs-project.yaml diff --git a/examples/docs-cms/fix_frontmatter.sh b/examples/docs-cms/fix_frontmatter.sh index bde2f00..19e0e16 100755 --- a/examples/docs-cms/fix_frontmatter.sh +++ b/examples/docs-cms/fix_frontmatter.sh @@ -42,7 +42,6 @@ title: Automated Documentation Generation from Code status: Draft author: Claude Code Agent created: 2025-10-27 -updated: 2025-10-27 tags: [rfc, automation, documentation, tooling] project_id: example-project doc_uuid: 4a5b6c7d-8e9f-4012-8345-6789abcdef01 @@ -56,7 +55,6 @@ id: memo-001 title: docs-cms System Launch Status author: Project Team created: 2025-10-27 -updated: 2025-10-27 tags: [memo, status-update, launch] project_id: example-project doc_uuid: 4b5c6d7e-8f90-4123-8456-789abcdef012 diff --git a/examples/docs-cms/memos/memo-001-docs-cms-launch.md b/examples/docs-cms/memos/memo-001-docs-cms-launch.md index fda236d..ec7a941 100644 --- a/examples/docs-cms/memos/memo-001-docs-cms-launch.md +++ b/examples/docs-cms/memos/memo-001-docs-cms-launch.md @@ -1,10 +1,12 @@ --- -id: memo-001 -title: docs-cms System Launch Status author: Project Team created: 2025-10-27 -updated: 2025-10-27 -tags: [memo, status-update, launch] -project_id: example-project doc_uuid: 4b5c6d7e-8f90-4123-8456-789abcdef012 ---- +id: memo-001 +project_id: example-project +tags: +- memo +- status-update +- launch +title: docs-cms System Launch Status +--- \ No newline at end of file diff --git a/examples/docs-cms/rfcs/rfc-001-automated-doc-generation.md b/examples/docs-cms/rfcs/rfc-001-automated-doc-generation.md index 251a60c..9c76abc 100644 --- a/examples/docs-cms/rfcs/rfc-001-automated-doc-generation.md +++ b/examples/docs-cms/rfcs/rfc-001-automated-doc-generation.md @@ -1,11 +1,14 @@ --- -id: rfc-001 -title: Automated Documentation Generation from Code -status: Draft author: Claude Code Agent created: 2025-10-27 -updated: 2025-10-27 -tags: [rfc, automation, documentation, tooling] -project_id: example-project doc_uuid: 4a5b6c7d-8e9f-4012-8345-6789abcdef01 ---- +id: rfc-001 +project_id: example-project +status: Draft +tags: +- rfc +- automation +- documentation +- tooling +title: Automated Documentation Generation from Code +--- \ No newline at end of file diff --git a/examples/docs-cms/templates/adr-template.md b/examples/docs-cms/templates/adr-template.md index 97de332..88ddc9f 100644 --- a/examples/docs-cms/templates/adr-template.md +++ b/examples/docs-cms/templates/adr-template.md @@ -3,7 +3,6 @@ id: adr-NNN title: Brief decision title status: Proposed created: YYYY-MM-DD -updated: YYYY-MM-DD deciders: Engineering Team tags: [architecture, decision] project_id: your-project-id diff --git a/examples/docs-cms/templates/memo-template.md b/examples/docs-cms/templates/memo-template.md index 14aae78..5ec450d 100644 --- a/examples/docs-cms/templates/memo-template.md +++ b/examples/docs-cms/templates/memo-template.md @@ -2,7 +2,6 @@ id: memo-NNN title: Memo title created: YYYY-MM-DD -updated: YYYY-MM-DD author: Your Name tags: [memo] project_id: your-project-id diff --git a/examples/docs-cms/templates/rfc-template.md b/examples/docs-cms/templates/rfc-template.md index fa611cf..7d0c1fb 100644 --- a/examples/docs-cms/templates/rfc-template.md +++ b/examples/docs-cms/templates/rfc-template.md @@ -3,7 +3,6 @@ id: rfc-NNN title: Proposal title status: Draft created: YYYY-MM-DD -updated: YYYY-MM-DD author: Your Name tags: [rfc, proposal] project_id: your-project-id diff --git a/templates/adr-template.md b/templates/adr-template.md index c076b0d..5d0d070 100644 --- a/templates/adr-template.md +++ b/templates/adr-template.md @@ -5,9 +5,7 @@ slug: adr-XXX-brief-description # URL-friendly slug (lowercase-with-dashes) title: "ADR-XXX: Decision Title" # Must start with "ADR-XXX:" where XXX is 3-digit number status: Proposed # Valid values: Proposed, Accepted, Deprecated, Superseded, Implemented created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date ADR was first created, DO NOT CHANGE after initial creation - # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps -updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes - # Auto-updated with: docuchango fix timestamps + # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps author: Your Name # Person or team who wrote this ADR (e.g., "Jacob Repp", "Platform Team") # Generate: git config user.name deciders: Your Name # Team or person who made the decision (e.g., "Core Team", "Platform Team", "John Smith") diff --git a/templates/frd-template.md b/templates/frd-template.md index da231c5..8239c15 100644 --- a/templates/frd-template.md +++ b/templates/frd-template.md @@ -5,9 +5,7 @@ slug: frd-XXX-feature-name # URL-friendly slug (lowercase-with-dashes) title: "FRD-XXX: Feature Name" # Must start with "FRD-XXX:" where XXX is 3-digit number status: Draft # Valid values: Draft, In Review, Approved, In Progress, Completed, Cancelled created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date FRD was first created, DO NOT CHANGE after initial creation - # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps -updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes - # Auto-updated with: docuchango fix timestamps + # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps author: Product Manager Name # Person or team who wrote this FRD (e.g., "Jane Smith", "Product Team") # Generate: git config user.name tags: ["feature", "requirements"] # List of lowercase-with-dashes tags (e.g., ["user-interface", "backend"]) diff --git a/templates/memo-template.md b/templates/memo-template.md index 2457168..9942c9f 100644 --- a/templates/memo-template.md +++ b/templates/memo-template.md @@ -5,9 +5,7 @@ slug: memo-XXX-brief-description # URL-friendly slug (lowercase-with-dashes) title: "Memo: Subject Title" # Clear, descriptive subject line status: Draft # Valid values: Draft, Published, Archived created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date memo was first created, DO NOT CHANGE after initial creation - # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps -updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes - # Auto-updated with: docuchango fix timestamps + # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps author: Your Name # Person who wrote this memo (e.g., "Jacob Repp", "Product Team") # Generate: git config user.name tags: ["memo", "communication"] # List of lowercase-with-dashes tags (e.g., ["quarterly-review", "announcement"]) diff --git a/templates/prd-template.md b/templates/prd-template.md index da551bf..dc5567b 100644 --- a/templates/prd-template.md +++ b/templates/prd-template.md @@ -5,9 +5,7 @@ slug: prd-XXX-product-name # URL-friendly slug (lowercase-with-dashes) title: "PRD-XXX: Product Name" # Must start with "PRD-XXX:" where XXX is 3-digit number status: Draft # Valid values: Draft, In Review, Approved, In Progress, Completed, Cancelled created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date PRD was first created, DO NOT CHANGE after initial creation - # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps -updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes - # Auto-updated with: docuchango fix timestamps + # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps author: Product Manager Name # Person or team who wrote this PRD (e.g., "Jane Smith", "Product Team") # Generate: git config user.name tags: ["product", "requirements", "feature"] # List of lowercase-with-dashes tags (e.g., ["user-experience", "mobile"]) diff --git a/templates/prdfaq-template.md b/templates/prdfaq-template.md index a414b97..da98c7c 100644 --- a/templates/prdfaq-template.md +++ b/templates/prdfaq-template.md @@ -5,9 +5,7 @@ slug: prdfaq-XXX-product-name # URL-friendly slug (lowercase-with-dashes) title: "PRDFAQ-XXX: Product Name" # Must start with "PRDFAQ-XXX:" where XXX is 3-digit number status: Draft # Valid values: Draft, In Review, Approved, In Progress, Completed, Cancelled created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date PRDFAQ was first created, DO NOT CHANGE after initial creation - # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps -updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes - # Auto-updated with: docuchango fix timestamps + # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps author: Product Manager Name # Person or team who wrote this PRDFAQ (e.g., "Jane Smith", "Product Team") # Generate: git config user.name tags: ["product", "launch", "prdfaq"] # List of lowercase-with-dashes tags (e.g., ["customer-facing", "strategic"]) diff --git a/templates/rfc-template.md b/templates/rfc-template.md index c15dd05..bab2274 100644 --- a/templates/rfc-template.md +++ b/templates/rfc-template.md @@ -5,9 +5,7 @@ slug: rfc-XXX-brief-description # URL-friendly slug (lowercase-with-dashes) title: "RFC-XXX: Technical Proposal Title" # Must start with "RFC-XXX:" where XXX is 3-digit number status: Draft # Valid values: Draft, In Review, Accepted, Rejected, Implemented created: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date RFC was first created, DO NOT CHANGE after initial creation - # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango fix timestamps -updated: YYYY-MM-DD # ISO 8601 format (YYYY-MM-DD) - date of last modification, UPDATE whenever content changes - # Auto-updated with: docuchango fix timestamps + # Generate: date +%Y-%m-%d OR python -c "from datetime import date; print(date.today())" OR auto-set with: docuchango bulk timestamps author: Your Name # Person or team who wrote this RFC (e.g., "Jacob Repp", "Platform Team") # Generate: git config user.name tags: ["architecture", "api", "backend"] # List of lowercase-with-dashes tags (e.g., ["performance", "security"])