Skip to content

Commit c7b6929

Browse files
committed
Merge dev into main
2 parents 7ccc10b + 7cd92ed commit c7b6929

File tree

81 files changed

+9064
-254
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+9064
-254
lines changed

.issues/_index.json

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{
2+
"total_issues": 22,
3+
"last_updated": "2026-02-08",
4+
"types": {
5+
"task": {
6+
"count": 16,
7+
"next_index": 17,
8+
"labels": [
9+
"Task-1", "Task-2", "Task-3", "Task-4", "Task-5",
10+
"Task-6", "Task-7", "Task-8", "Task-9", "Task-10",
11+
"Task-11", "Task-12", "Task-13", "Task-14", "Task-15",
12+
"Task-16"
13+
]
14+
},
15+
"bug": {
16+
"count": 6,
17+
"next_index": 7,
18+
"labels": ["Bug-1", "Bug-2", "Bug-3", "Bug-4", "Bug-5", "Bug-6"]
19+
}
20+
},
21+
"status_summary": {
22+
"todo": 14,
23+
"in-progress": 0,
24+
"done": 4,
25+
"confirmed": 6
26+
},
27+
"tags": {
28+
"phase-2": 14,
29+
"refactoring": 13,
30+
"librarian": 3,
31+
"documentation": 2,
32+
"llm-briefs": 1,
33+
"knowledge-request": 2,
34+
"convention": 1,
35+
"traceability": 1,
36+
"type-safety": 4,
37+
"regression": 4,
38+
"review-needed": 2,
39+
"data-consistency": 1,
40+
"logic-error": 1,
41+
"workflow": 1,
42+
"reusable": 1,
43+
"B10": 1, "B11": 1, "B12": 1, "B13": 2,
44+
"B14": 1, "B15": 1, "B16": 1, "B17": 1,
45+
"B18": 1, "B19": 1, "B20": 1, "B21": 1, "B22": 1,
46+
"cross-repo": 2
47+
}
48+
}

.issues/config/link-types.json

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
{
2+
"link_types": [
3+
{
4+
"link_type_id": "b0dd3c3e",
5+
"verb": "blocks",
6+
"inverse_verb": "blocked-by",
7+
"description": "Prevents progress on target",
8+
"source_types": [
9+
"bug",
10+
"task"
11+
],
12+
"target_types": [
13+
"task",
14+
"feature"
15+
]
16+
},
17+
{
18+
"link_type_id": "8be4d498",
19+
"verb": "has-task",
20+
"inverse_verb": "task-of",
21+
"description": "Contains as sub-work",
22+
"source_types": [
23+
"feature",
24+
"git-repo"
25+
],
26+
"target_types": [
27+
"task"
28+
]
29+
},
30+
{
31+
"link_type_id": "5522075e",
32+
"verb": "assigned-to",
33+
"inverse_verb": "assignee-of",
34+
"description": "Work assigned to person_agent",
35+
"source_types": [
36+
"bug",
37+
"task",
38+
"feature"
39+
],
40+
"target_types": [
41+
"person"
42+
]
43+
},
44+
{
45+
"link_type_id": "b0200211",
46+
"verb": "depends-on",
47+
"inverse_verb": "dependency-of",
48+
"description": "Requires target to complete first",
49+
"source_types": [
50+
"task",
51+
"feature"
52+
],
53+
"target_types": [
54+
"task",
55+
"feature"
56+
]
57+
},
58+
{
59+
"link_type_id": "b2809eb4",
60+
"verb": "relates-to",
61+
"inverse_verb": "relates-to",
62+
"description": "General association (symmetric)",
63+
"source_types": [
64+
"bug",
65+
"task",
66+
"feature",
67+
"git-repo"
68+
],
69+
"target_types": [
70+
"bug",
71+
"task",
72+
"feature",
73+
"git-repo"
74+
]
75+
},
76+
{
77+
"link_type_id": "30bdd40b",
78+
"verb": "contains",
79+
"inverse_verb": "contained-by",
80+
"description": "Parent contains child issue",
81+
"source_types": [
82+
"git-repo",
83+
"feature",
84+
"task"
85+
],
86+
"target_types": [
87+
"bug",
88+
"task",
89+
"feature"
90+
]
91+
}
92+
]
93+
}

.issues/config/node-types.json

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
{
2+
"types": [
3+
{
4+
"type_id": "7475e55c",
5+
"name": "git-repo",
6+
"display_name": "GitRepo",
7+
"description": "Git repository root - contains all issues",
8+
"icon": "",
9+
"color": "#6366f1",
10+
"statuses": [
11+
"active",
12+
"archived"
13+
],
14+
"default_status": "active",
15+
"properties": []
16+
},
17+
{
18+
"type_id": "70de0b03",
19+
"name": "bug",
20+
"display_name": "Bug",
21+
"description": "Defect or error in the system",
22+
"icon": "",
23+
"color": "#ef4444",
24+
"statuses": [
25+
"backlog",
26+
"confirmed",
27+
"in-progress",
28+
"testing",
29+
"resolved",
30+
"closed"
31+
],
32+
"default_status": "backlog",
33+
"properties": []
34+
},
35+
{
36+
"type_id": "b16fbef0",
37+
"name": "task",
38+
"display_name": "Task",
39+
"description": "Unit of work to be completed",
40+
"icon": "",
41+
"color": "#3b82f6",
42+
"statuses": [
43+
"backlog",
44+
"todo",
45+
"in-progress",
46+
"review",
47+
"done"
48+
],
49+
"default_status": "backlog",
50+
"properties": []
51+
},
52+
{
53+
"type_id": "8f3d0749",
54+
"name": "feature",
55+
"display_name": "Feature",
56+
"description": "High-level capability",
57+
"icon": "",
58+
"color": "#22c55e",
59+
"statuses": [
60+
"proposed",
61+
"approved",
62+
"in-progress",
63+
"released"
64+
],
65+
"default_status": "proposed",
66+
"properties": []
67+
},
68+
{
69+
"type_id": "c3442812",
70+
"name": "person",
71+
"display_name": "Person",
72+
"description": "Human or agent identity",
73+
"icon": "",
74+
"color": "#8b5cf6",
75+
"statuses": [
76+
"active",
77+
"inactive"
78+
],
79+
"default_status": "active",
80+
"properties": []
81+
}
82+
]
83+
}

.issues/data/bug/Bug-1/issue.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"node_id": "cb1d2e3f",
3+
"node_type": "bug",
4+
"node_index": 1,
5+
"label": "Bug-1",
6+
"title": "Dev agent replaced Safe_Str__File__Path with raw str in B13 refactoring — type safety regression",
7+
"status": "resolved",
8+
"tags": ["type-safety", "regression", "P1", "phase-2", "B13", "review-needed"],
9+
"properties": {
10+
"priority": "P1",
11+
"severity": "high",
12+
"introduced_by": "Task-4 (B13)",
13+
"found_by": "Human review + QA",
14+
"description": "During the Phase 2 B13 refactoring (remove node.json fallback), the Dev agent changed the return type of Issue__Children__Service.scan_child_folders() from List[Safe_Str__File__Path] to List[str]. This is a type safety regression that violates the project's core convention: NEVER use raw Python types (str, dict, list, int) where Safe_* primitives exist. The Dev should have kept the Safe_Str__File__Path type or documented WHY a change was needed and raised a review issue.",
15+
"files_affected": [
16+
{
17+
"file": "issues_fs/issues/phase_1/Issue__Children__Service.py",
18+
"line": 217,
19+
"change": "List[Safe_Str__File__Path] -> List[str]",
20+
"severity": "CRITICAL regression"
21+
}
22+
],
23+
"broader_issue": "There is also widespread use of raw str, dict, list, int throughout the existing codebase (not introduced by the Dev agent — these are pre-existing). This needs a separate task to audit and convert to Safe_* primitives. But the Dev agent should NEVER introduce NEW raw type usage — only convert away from it.",
24+
"required_action": [
25+
"Revert List[str] back to List[Safe_Str__File__Path] in scan_child_folders()",
26+
"Dev must document in writing WHY any type change is needed before making it",
27+
"Dev must raise a 'review' issue type for any type signature changes so the human can comment",
28+
"Add to Dev ROLE.md: NEVER downgrade Safe_* types to raw Python types without explicit review approval"
29+
],
30+
"convention_violation": "The Issues-FS project uses osbot-utils Type_Safe as the foundation. ALL classes inherit from Type_Safe. Safe_* primitives (Safe_Str, Safe_Id, Safe_Str__File__Path, etc.) are used INSTEAD of raw Python types. This is not optional — it is the core architectural discipline. Changing Safe_Str__File__Path to str is like removing a type annotation in a strongly-typed language."
31+
}
32+
}

.issues/data/bug/Bug-2/issue.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"node_id": "a2b3c4d5",
3+
"node_type": "bug",
4+
"node_index": 2,
5+
"label": "Bug-2",
6+
"title": "extract_node_type_from_file returns raw str instead of Safe_Str__Node_Type",
7+
"status": "resolved",
8+
"tags": ["type-safety", "regression", "P2", "phase-2", "B10", "review-needed"],
9+
"properties": {
10+
"priority": "P2",
11+
"severity": "major",
12+
"introduced_by": "Task-1 (B10)",
13+
"found_by": "QA review",
14+
"description": "The newly introduced method Graph__Repository.extract_node_type_from_file() at line 192 returns raw str instead of Safe_Str__Node_Type. Since Safe_Str__Node_Type is already imported and used throughout Graph__Repository.py, this method should return Safe_Str__Node_Type to maintain type safety at the method boundary. Currently the caller at line 168 wraps the return in Safe_Str__Node_Type(), but the method itself does not enforce type safety.",
15+
"files_affected": [
16+
{
17+
"file": "issues_fs/issues/graph_services/Graph__Repository.py",
18+
"line": 192,
19+
"change": "return type is -> str, should be -> Safe_Str__Node_Type",
20+
"severity": "MAJOR"
21+
}
22+
],
23+
"required_action": [
24+
"Change return type from -> str to -> Safe_Str__Node_Type",
25+
"Wrap return values in Safe_Str__Node_Type() within the method",
26+
"Return Safe_Str__Node_Type('') instead of '' for empty/error cases"
27+
],
28+
"convention_violation": "The Issues-FS project requires Safe_* primitives instead of raw Python types. Newly introduced methods must not use raw str as return types when a corresponding Safe_* type exists."
29+
}
30+
}

.issues/data/bug/Bug-3/issue.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"node_id": "e5f6a7b8",
3+
"node_type": "bug",
4+
"node_index": 3,
5+
"label": "Bug-3",
6+
"title": "get_issue_file_path returns raw str instead of Safe_Str__File__Path -- not fixed during B13 refactoring",
7+
"status": "resolved",
8+
"tags": ["type-safety", "P2", "phase-2", "B13", "review-needed"],
9+
"properties": {
10+
"priority": "P2",
11+
"severity": "major",
12+
"introduced_by": "Pre-existing, but touched in Task-4 (B13) without fixing",
13+
"found_by": "QA review",
14+
"description": "Graph__Repository.get_issue_file_path() at line 131 has return type -> str when it should be -> Safe_Str__File__Path. This method is the central path-resolution function called by node_load, node_exists, and other critical paths. During the B13 refactoring, the Dev modified this method's body (removed node.json fallback, added explicit is True check) and updated its comments, but did not fix the raw str return type. Since Safe_Str__File__Path is already imported in this file (line 22), this should have been corrected as part of the B13 changes.",
15+
"files_affected": [
16+
{
17+
"file": "issues_fs/issues/graph_services/Graph__Repository.py",
18+
"line": 131,
19+
"change": "return type is -> str, should be -> Safe_Str__File__Path",
20+
"severity": "MAJOR"
21+
}
22+
],
23+
"required_action": [
24+
"Change return type from -> str to -> Safe_Str__File__Path",
25+
"Wrap return value in Safe_Str__File__Path() before returning",
26+
"Verify callers handle the Safe_Str__File__Path type correctly"
27+
],
28+
"convention_violation": "Methods that return file paths must use Safe_Str__File__Path, not raw str. This was a missed opportunity during the B13 refactoring when the method body was already being modified."
29+
}
30+
}

.issues/data/bug/Bug-4/issue.json

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"node_id": "f4a5b6c7",
3+
"node_type": "bug",
4+
"node_index": 4,
5+
"label": "Bug-4",
6+
"title": "type_to_label_prefix uses raw str parameter and return type, no @type_safe decorator",
7+
"status": "confirmed",
8+
"tags": ["type-safety", "regression", "P2", "phase-2", "B22", "review-needed"],
9+
"properties": {
10+
"priority": "P2",
11+
"severity": "critical",
12+
"introduced_by": "Task-13 (B22)",
13+
"found_by": "QA review (P2)",
14+
"description": "The newly introduced method Node__Service.type_to_label_prefix() at line 305 has signature 'def type_to_label_prefix(self, node_type: str) -> str:'. Both the parameter type and return type are raw Python str. The method also lacks the @type_safe decorator. This is a new method introduced in the P2 changeset that violates the project's core convention: NEVER use raw Python types where Safe_* primitives exist. Safe_Str__Node_Type is already imported and used throughout Node__Service.py. The parameter should be Safe_Str__Node_Type and the method should have @type_safe.",
15+
"files_affected": [
16+
{
17+
"file": "issues_fs/issues/graph_services/Node__Service.py",
18+
"line": 305,
19+
"change": "parameter 'node_type: str' should be 'node_type: Safe_Str__Node_Type'; return type '-> str' should use a Safe_Str variant; @type_safe decorator missing",
20+
"severity": "CRITICAL"
21+
}
22+
],
23+
"required_action": [
24+
"Add @type_safe decorator to type_to_label_prefix",
25+
"Change parameter type from str to Safe_Str__Node_Type",
26+
"Change return type from str to appropriate Safe_Str variant (e.g. Safe_Str__Node_Type_Display or str via @type_safe coercion)",
27+
"Update callers if needed after type change"
28+
],
29+
"convention_violation": "The Issues-FS project requires Safe_* primitives instead of raw Python types on all method boundaries. New methods introduced in refactoring must not use raw str as parameter or return types when corresponding Safe_* types exist."
30+
}
31+
}

0 commit comments

Comments
 (0)