logics-manager 2.5.2__tar.gz → 2.7.0__tar.gz
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.
- {logics_manager-2.5.2 → logics_manager-2.7.0}/PKG-INFO +1 -1
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/assist.py +1 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/flow.py +6 -2
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/lint.py +11 -7
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer.py +603 -14
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/css/layout.css +7 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/viewer/browser-host.js +898 -68
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/viewer/index.html +48 -22
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/viewer/viewer.css +536 -8
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/PKG-INFO +1 -1
- {logics_manager-2.5.2 → logics_manager-2.7.0}/pyproject.toml +1 -1
- {logics_manager-2.5.2 → logics_manager-2.7.0}/LICENSE +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/README.md +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/__init__.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/__main__.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/assist_handoff.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/assist_surface.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/audit.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/bootstrap.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/cli.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/cli_output.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/config.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/doctor.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/flow_evidence.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/index.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/insights.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/mcp.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/path_utils.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/sync.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/termstyle.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/update_check.py +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/css/board.css +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/css/details.css +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/css/toolbar.css +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/harnessApi.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/hostApi.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/hostApiContract.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/icon.png +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/layoutController.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/logics.svg +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/logicsModel.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/main.css +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/main.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/mainApp.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/mainCore.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/mainInteractionHandlers.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/mainInteractions.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/renderBoard.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/renderBoardApp.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/renderDetails.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/renderMarkdown.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/toolsPanelLayout.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/uiStatus.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/webviewChrome.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/webviewPersistence.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/webviewSelectors.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/vendor/mermaid.min.js +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/SOURCES.txt +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/dependency_links.txt +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/entry_points.txt +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/top_level.txt +0 -0
- {logics_manager-2.5.2 → logics_manager-2.7.0}/setup.cfg +0 -0
|
@@ -336,6 +336,7 @@ def _build_spec_first_pass(repo_root: Path, backlog_ref: str) -> dict[str, objec
|
|
|
336
336
|
[
|
|
337
337
|
f"## {ref} - {spec_title}",
|
|
338
338
|
f"> From version: {_parse_package_version(repo_root)}",
|
|
339
|
+
"> Status: Draft",
|
|
339
340
|
"> Understanding: 90%",
|
|
340
341
|
"> Confidence: 85%",
|
|
341
342
|
"",
|
|
@@ -800,6 +800,8 @@ def _workflow_mermaid_block(kind: str, signature: str) -> list[str]:
|
|
|
800
800
|
|
|
801
801
|
|
|
802
802
|
def _with_workflow_mermaid_overview(kind: str, content: str) -> str:
|
|
803
|
+
if kind == "task":
|
|
804
|
+
return content
|
|
803
805
|
lines = content.rstrip().splitlines()
|
|
804
806
|
signature = expected_workflow_mermaid_signature(kind, lines)
|
|
805
807
|
if not signature:
|
|
@@ -995,6 +997,8 @@ def _mermaid_closeout_issue(path: Path, kind: str) -> str | None:
|
|
|
995
997
|
text = path.read_text(encoding="utf-8")
|
|
996
998
|
match = re.search(r"```mermaid\s*\n(.*?)\n```", text, flags=re.DOTALL)
|
|
997
999
|
if match is None:
|
|
1000
|
+
if kind == "task":
|
|
1001
|
+
return None
|
|
998
1002
|
return "missing Mermaid overview block"
|
|
999
1003
|
signature_match = re.search(r"^\s*%%\s*logics-signature:\s*(.+?)\s*$", match.group(1), flags=re.MULTILINE)
|
|
1000
1004
|
expected = expected_workflow_mermaid_signature(kind, text.splitlines())
|
|
@@ -1625,7 +1629,7 @@ def _build_native_task_doc(
|
|
|
1625
1629
|
"",
|
|
1626
1630
|
]
|
|
1627
1631
|
).rstrip() + "\n"
|
|
1628
|
-
return
|
|
1632
|
+
return content
|
|
1629
1633
|
|
|
1630
1634
|
|
|
1631
1635
|
def _extract_doc_title(path: Path) -> str:
|
|
@@ -2183,7 +2187,7 @@ def _build_native_task_from_backlog(
|
|
|
2183
2187
|
"",
|
|
2184
2188
|
]
|
|
2185
2189
|
).rstrip() + "\n"
|
|
2186
|
-
return ref,
|
|
2190
|
+
return ref, content
|
|
2187
2191
|
|
|
2188
2192
|
|
|
2189
2193
|
def build_parser() -> argparse.ArgumentParser:
|
|
@@ -15,18 +15,19 @@ from .config import find_repo_root
|
|
|
15
15
|
@dataclass(frozen=True)
|
|
16
16
|
class Kind:
|
|
17
17
|
directory: str
|
|
18
|
-
|
|
18
|
+
prefixes: tuple[str, ...]
|
|
19
19
|
requires_progress: bool
|
|
20
20
|
required_indicators: tuple[str, ...]
|
|
21
21
|
allowed_statuses: tuple[str, ...]
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
KINDS = {
|
|
25
|
-
"request": Kind("logics/request", "req", False, ("From version", "Understanding", "Confidence"), ("Draft", "Ready", "In progress", "Blocked", "Done", "Obsolete", "Archived")),
|
|
26
|
-
"backlog": Kind("logics/backlog", "item", True, ("From version", "Understanding", "Confidence", "Progress"), ("Draft", "Ready", "In progress", "Blocked", "Done", "Obsolete", "Archived")),
|
|
27
|
-
"task": Kind("logics/tasks", "task", True, ("From version", "Understanding", "Confidence", "Progress"), ("Draft", "Ready", "In progress", "Blocked", "Done", "Obsolete", "Archived")),
|
|
28
|
-
"product": Kind("logics/product", "prod", False, ("Date", "Status", "Related request", "Related backlog", "Related task", "Related architecture", "Reminder"), ("Draft", "Proposed", "Active", "Accepted", "Validated", "Rejected", "Superseded", "Settled", "Archived")),
|
|
29
|
-
"architecture": Kind("logics/architecture", "adr", False, ("Date", "Status", "Drivers", "Related request", "Related backlog", "Related task", "Reminder"), ("Draft", "Proposed", "Accepted", "Validated", "Rejected", "Superseded", "Settled", "Archived")),
|
|
25
|
+
"request": Kind("logics/request", ("req",), False, ("From version", "Understanding", "Confidence"), ("Draft", "Ready", "In progress", "Blocked", "Done", "Obsolete", "Archived")),
|
|
26
|
+
"backlog": Kind("logics/backlog", ("item",), True, ("From version", "Understanding", "Confidence", "Progress"), ("Draft", "Ready", "In progress", "Blocked", "Done", "Obsolete", "Archived")),
|
|
27
|
+
"task": Kind("logics/tasks", ("task",), True, ("From version", "Understanding", "Confidence", "Progress"), ("Draft", "Ready", "In progress", "Blocked", "Done", "Obsolete", "Archived")),
|
|
28
|
+
"product": Kind("logics/product", ("prod",), False, ("Date", "Status", "Related request", "Related backlog", "Related task", "Related architecture", "Reminder"), ("Draft", "Proposed", "Active", "Accepted", "Validated", "Rejected", "Superseded", "Settled", "Archived")),
|
|
29
|
+
"architecture": Kind("logics/architecture", ("adr",), False, ("Date", "Status", "Drivers", "Related request", "Related backlog", "Related task", "Reminder"), ("Draft", "Proposed", "Accepted", "Validated", "Rejected", "Superseded", "Settled", "Archived")),
|
|
30
|
+
"spec": Kind("logics/specs", ("spec", "req"), False, ("From version", "Status", "Understanding", "Confidence"), ("Draft", "Ready", "In progress", "Done", "Validated", "Settled", "Archived")),
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
WORKFLOW_KINDS = {"request", "backlog", "task"}
|
|
@@ -503,7 +504,8 @@ def _lint_file(path: Path, kind_name: str, kind: Kind, require_status: bool, che
|
|
|
503
504
|
issues: list[str] = []
|
|
504
505
|
warnings: list[str] = []
|
|
505
506
|
name = path.name
|
|
506
|
-
|
|
507
|
+
allowed_prefixes = "|".join(re.escape(prefix) for prefix in kind.prefixes)
|
|
508
|
+
if not re.match(rf"^({allowed_prefixes})_\d{{3}}_[a-z0-9_]+\.md$", name):
|
|
507
509
|
issues.append(f"bad filename: {name}")
|
|
508
510
|
|
|
509
511
|
lines = _read_lines(path)
|
|
@@ -557,6 +559,8 @@ def lint_payload(repo_root: Path, *, require_status: bool = False) -> dict[str,
|
|
|
557
559
|
if not directory.is_dir():
|
|
558
560
|
continue
|
|
559
561
|
for path in sorted(directory.glob("*.md")):
|
|
562
|
+
if path.name == "README.md":
|
|
563
|
+
continue
|
|
560
564
|
rel_path = path.relative_to(repo_root)
|
|
561
565
|
issues, warnings = _lint_file(
|
|
562
566
|
path,
|