docassert 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. docassert/__init__.py +8 -0
  2. docassert/__main__.py +6 -0
  3. docassert/_data/consistency.yaml +51 -0
  4. docassert/_data/criteria/adr.criteria.yaml +36 -0
  5. docassert/_data/criteria/benefits-realization.criteria.yaml +30 -0
  6. docassert/_data/criteria/brd.criteria.yaml +30 -0
  7. docassert/_data/criteria/business-case.criteria.yaml +23 -0
  8. docassert/_data/criteria/charter.criteria.yaml +73 -0
  9. docassert/_data/criteria/data-migration-plan.criteria.yaml +28 -0
  10. docassert/_data/criteria/frnfr.criteria.yaml +31 -0
  11. docassert/_data/criteria/hypercare-plan.criteria.yaml +27 -0
  12. docassert/_data/criteria/post-implementation-review.criteria.yaml +24 -0
  13. docassert/_data/criteria/prd.criteria.yaml +31 -0
  14. docassert/_data/criteria/project.criteria.yaml +32 -0
  15. docassert/_data/criteria/qa-test-plan.criteria.yaml +27 -0
  16. docassert/_data/criteria/raci-stakeholder.criteria.yaml +24 -0
  17. docassert/_data/criteria/release-cutover-plan.criteria.yaml +30 -0
  18. docassert/_data/criteria/risk-register.criteria.yaml +32 -0
  19. docassert/_data/criteria/rollback-plan.criteria.yaml +29 -0
  20. docassert/_data/criteria/runbook.criteria.yaml +30 -0
  21. docassert/_data/criteria/status-report.criteria.yaml +26 -0
  22. docassert/_data/criteria/test-cases.criteria.yaml +28 -0
  23. docassert/_data/criteria/user-story.criteria.yaml +32 -0
  24. docassert/_data/profiles/agile-delivery.yaml +20 -0
  25. docassert/_data/profiles/lean-startup.yaml +19 -0
  26. docassert/_data/profiles/regulated-industry.yaml +31 -0
  27. docassert/_data/schema/adr.schema.json +45 -0
  28. docassert/_data/schema/benefits-realization.schema.json +45 -0
  29. docassert/_data/schema/brd.schema.json +45 -0
  30. docassert/_data/schema/business-case.schema.json +45 -0
  31. docassert/_data/schema/charter.schema.json +84 -0
  32. docassert/_data/schema/data-migration-plan.schema.json +45 -0
  33. docassert/_data/schema/frnfr.schema.json +45 -0
  34. docassert/_data/schema/hypercare-plan.schema.json +45 -0
  35. docassert/_data/schema/post-implementation-review.schema.json +45 -0
  36. docassert/_data/schema/prd.schema.json +45 -0
  37. docassert/_data/schema/project.schema.json +32 -0
  38. docassert/_data/schema/qa-test-plan.schema.json +45 -0
  39. docassert/_data/schema/raci-stakeholder.schema.json +45 -0
  40. docassert/_data/schema/release-cutover-plan.schema.json +45 -0
  41. docassert/_data/schema/risk-register.schema.json +45 -0
  42. docassert/_data/schema/rollback-plan.schema.json +45 -0
  43. docassert/_data/schema/runbook.schema.json +45 -0
  44. docassert/_data/schema/status-report.schema.json +58 -0
  45. docassert/_data/schema/test-cases.schema.json +45 -0
  46. docassert/_data/schema/user-story.schema.json +45 -0
  47. docassert/_data/templates/adr.template.md +17 -0
  48. docassert/_data/templates/benefits-realization.template.md +25 -0
  49. docassert/_data/templates/brd.template.md +22 -0
  50. docassert/_data/templates/business-case.template.md +27 -0
  51. docassert/_data/templates/charter.template.md +46 -0
  52. docassert/_data/templates/data-migration-plan.template.md +35 -0
  53. docassert/_data/templates/frnfr.template.md +19 -0
  54. docassert/_data/templates/hypercare-plan.template.md +29 -0
  55. docassert/_data/templates/post-implementation-review.template.md +31 -0
  56. docassert/_data/templates/prd.template.md +23 -0
  57. docassert/_data/templates/project.template.md +17 -0
  58. docassert/_data/templates/qa-test-plan.template.md +31 -0
  59. docassert/_data/templates/raci-stakeholder.template.md +21 -0
  60. docassert/_data/templates/release-cutover-plan.template.md +28 -0
  61. docassert/_data/templates/risk-register.template.md +18 -0
  62. docassert/_data/templates/rollback-plan.template.md +24 -0
  63. docassert/_data/templates/runbook.template.md +28 -0
  64. docassert/_data/templates/status-report.template.md +27 -0
  65. docassert/_data/templates/test-cases.template.md +17 -0
  66. docassert/_data/templates/user-story.template.md +17 -0
  67. docassert/cli.py +291 -0
  68. docassert/config.py +104 -0
  69. docassert/consistency.py +167 -0
  70. docassert/graph.py +68 -0
  71. docassert/loader.py +116 -0
  72. docassert/models.py +99 -0
  73. docassert/profiles.py +111 -0
  74. docassert/projects.py +49 -0
  75. docassert/report.py +83 -0
  76. docassert/rtm.py +70 -0
  77. docassert/semantic.py +124 -0
  78. docassert/status.py +538 -0
  79. docassert/structural.py +406 -0
  80. docassert-0.1.0.dist-info/METADATA +125 -0
  81. docassert-0.1.0.dist-info/RECORD +86 -0
  82. docassert-0.1.0.dist-info/WHEEL +5 -0
  83. docassert-0.1.0.dist-info/entry_points.txt +2 -0
  84. docassert-0.1.0.dist-info/licenses/LICENSE +201 -0
  85. docassert-0.1.0.dist-info/licenses/NOTICE +4 -0
  86. docassert-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,32 @@
1
+ # Audit criteria for the User Stories kind.
2
+ kind: user-story
3
+
4
+ required_sections:
5
+ - Overview
6
+ - User Stories
7
+
8
+ item_sections:
9
+ - section: User Stories
10
+ prefix: US
11
+
12
+ checks:
13
+ - id: frontmatter-schema
14
+ type: structural
15
+ blocking: true
16
+ description: Frontmatter is valid against schema/user-story.schema.json.
17
+ - id: required-sections
18
+ type: structural
19
+ blocking: true
20
+ description: Every required section is present and non-empty.
21
+ - id: items-well-formed
22
+ type: structural
23
+ blocking: true
24
+ description: Every story is a valid **US-###** item.
25
+ - id: story-format
26
+ type: structural
27
+ blocking: true
28
+ description: Every story follows "As a … I want … so that …".
29
+ - id: unique-id
30
+ type: structural
31
+ blocking: true
32
+ description: The document id is unique across documents/.
@@ -0,0 +1,20 @@
1
+ # Profile: agile-delivery
2
+ #
3
+ # User-story-centric. Stories carry acceptance criteria, every story traces to a
4
+ # product requirement, and every acceptance criterion needs a test case. For
5
+ # teams working in stories, not specs.
6
+ name: agile-delivery
7
+ description: >
8
+ Story-led delivery: charter, product requirements, user stories, and tests.
9
+
10
+ enforce_when: active
11
+
12
+ expects:
13
+ required:
14
+ - charter
15
+ - prd
16
+ - user-story
17
+ - test-cases
18
+ recommended:
19
+ - brd
20
+ - risk-register
@@ -0,0 +1,19 @@
1
+ # Profile: lean-startup
2
+ #
3
+ # A handful of kinds. Coverage stays advisory until you grow, so a small team is
4
+ # never blocked for unfinished downstream docs. Start here.
5
+ name: lean-startup
6
+ description: >
7
+ The minimum spine: a charter, requirements, and tests. For a small team that
8
+ wants the gate without the ceremony.
9
+
10
+ enforce_when: active
11
+
12
+ expects:
13
+ required:
14
+ - charter
15
+ - brd
16
+ - prd
17
+ - test-cases
18
+ recommended:
19
+ - risk-register
@@ -0,0 +1,31 @@
1
+ # Profile: regulated-industry
2
+ #
3
+ # The expected document set for a project on this profile. `required` kinds must
4
+ # exist and be complete (present + approved/baselined + passing audit); a missing
5
+ # required kind blocks CI once the project reaches `enforce_when`. `recommended`
6
+ # kinds are surfaced as gaps on the project page but never block.
7
+ name: regulated-industry
8
+ description: >
9
+ Strictest set. For finance, healthcare, or government — the full governance
10
+ spine, from business case through benefits realization.
11
+
12
+ # Completeness blocks the merge only once the project's status reaches this
13
+ # lifecycle stage (proposed projects show gaps as advisory, never blocking).
14
+ enforce_when: active
15
+
16
+ expects:
17
+ required:
18
+ - charter
19
+ - business-case
20
+ - brd
21
+ - prd
22
+ - frnfr
23
+ - test-cases
24
+ - risk-register
25
+ - raci-stakeholder
26
+ - qa-test-plan
27
+ recommended:
28
+ - adr
29
+ - runbook
30
+ - status-report
31
+ - benefits-realization
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Architecture Decision Record (log) frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "owner",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "adr"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "owner": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Benefits Realization frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "owner",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "benefits-realization"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "owner": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Business Requirements Document frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "owner",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "brd"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "owner": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Business Case frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "sponsor",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "business-case"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "sponsor": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,84 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://pmo-as-code/schema/charter.schema.json",
4
+ "title": "Project Charter frontmatter",
5
+ "type": "object",
6
+ "required": [
7
+ "kind",
8
+ "id",
9
+ "project",
10
+ "title",
11
+ "sponsor",
12
+ "budget",
13
+ "dates",
14
+ "status"
15
+ ],
16
+ "additionalProperties": true,
17
+ "properties": {
18
+ "kind": {
19
+ "const": "charter"
20
+ },
21
+ "id": {
22
+ "type": "string",
23
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
24
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
25
+ },
26
+ "title": {
27
+ "type": "string",
28
+ "minLength": 3
29
+ },
30
+ "sponsor": {
31
+ "type": "string",
32
+ "minLength": 2,
33
+ "description": "The accountable individual. A name or handle, not a team."
34
+ },
35
+ "budget": {
36
+ "type": "object",
37
+ "required": [
38
+ "amount",
39
+ "currency"
40
+ ],
41
+ "additionalProperties": false,
42
+ "properties": {
43
+ "amount": {
44
+ "type": "number",
45
+ "exclusiveMinimum": 0
46
+ },
47
+ "currency": {
48
+ "type": "string",
49
+ "pattern": "^[A-Z]{3}$"
50
+ }
51
+ }
52
+ },
53
+ "dates": {
54
+ "type": "object",
55
+ "required": [
56
+ "created",
57
+ "target"
58
+ ],
59
+ "additionalProperties": false,
60
+ "properties": {
61
+ "created": {
62
+ "type": "string",
63
+ "format": "date"
64
+ },
65
+ "target": {
66
+ "type": "string",
67
+ "format": "date"
68
+ }
69
+ }
70
+ },
71
+ "status": {
72
+ "enum": [
73
+ "draft",
74
+ "proposed",
75
+ "approved"
76
+ ]
77
+ },
78
+ "project": {
79
+ "type": "string",
80
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
81
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
82
+ }
83
+ }
84
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Data Migration Plan frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "owner",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "data-migration-plan"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "owner": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Functional / Non-Functional Requirements frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "owner",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "frnfr"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "owner": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Hypercare Plan frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "owner",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "hypercare-plan"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "owner": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Post-Implementation Review frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "owner",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "post-implementation-review"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "owner": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Product Requirements Document frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "owner",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "prd"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "owner": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://pmo-as-code/schema/project.schema.json",
4
+ "title": "Project anchor frontmatter",
5
+ "type": "object",
6
+ "required": ["kind", "id", "code", "name", "sponsor", "status"],
7
+ "additionalProperties": true,
8
+ "properties": {
9
+ "kind": { "const": "project" },
10
+ "id": {
11
+ "type": "string",
12
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
13
+ "description": "Canonical project id, PRJ-NNN-CODE (e.g. PRJ-001-AUR). Unique across all projects."
14
+ },
15
+ "code": {
16
+ "type": "string",
17
+ "pattern": "^[A-Z]{2,6}$",
18
+ "description": "Short mnemonic that namespaces this project's document ids and item ids (e.g. AUR). Matches the id tail."
19
+ },
20
+ "name": { "type": "string", "minLength": 3 },
21
+ "sponsor": {
22
+ "type": "string",
23
+ "minLength": 2,
24
+ "description": "The accountable individual. A name or handle, not a team."
25
+ },
26
+ "status": { "enum": ["proposed", "active", "on-hold", "closed"] },
27
+ "profile": {
28
+ "type": "string",
29
+ "description": "Optional. Names a profiles/<name>.yaml that defines this project's expected document set (required/recommended kinds)."
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "QA / Test Plan frontmatter",
4
+ "type": "object",
5
+ "required": [
6
+ "kind",
7
+ "id",
8
+ "project",
9
+ "title",
10
+ "owner",
11
+ "status"
12
+ ],
13
+ "additionalProperties": true,
14
+ "properties": {
15
+ "kind": {
16
+ "const": "qa-test-plan"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[A-Z]{2,6}-[a-z0-9][a-z0-9-]*$",
21
+ "description": "Stable id, <CODE>-<slug> (e.g. AUR-brd). The CODE namespaces it to the owning project. Unique across documents/."
22
+ },
23
+ "title": {
24
+ "type": "string",
25
+ "minLength": 3
26
+ },
27
+ "owner": {
28
+ "type": "string",
29
+ "minLength": 2
30
+ },
31
+ "status": {
32
+ "enum": [
33
+ "draft",
34
+ "proposed",
35
+ "approved",
36
+ "baselined"
37
+ ]
38
+ },
39
+ "project": {
40
+ "type": "string",
41
+ "pattern": "^PRJ-\\d{3,}-[A-Z]{2,6}$",
42
+ "description": "Owning project's canonical id, PRJ-NNN-CODE (e.g. PRJ-001-AUR)."
43
+ }
44
+ }
45
+ }