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.
Files changed (62) hide show
  1. {logics_manager-2.5.2 → logics_manager-2.7.0}/PKG-INFO +1 -1
  2. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/assist.py +1 -0
  3. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/flow.py +6 -2
  4. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/lint.py +11 -7
  5. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer.py +603 -14
  6. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/css/layout.css +7 -0
  7. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/viewer/browser-host.js +898 -68
  8. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/viewer/index.html +48 -22
  9. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/viewer/viewer.css +536 -8
  10. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/PKG-INFO +1 -1
  11. {logics_manager-2.5.2 → logics_manager-2.7.0}/pyproject.toml +1 -1
  12. {logics_manager-2.5.2 → logics_manager-2.7.0}/LICENSE +0 -0
  13. {logics_manager-2.5.2 → logics_manager-2.7.0}/README.md +0 -0
  14. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/__init__.py +0 -0
  15. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/__main__.py +0 -0
  16. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/assist_handoff.py +0 -0
  17. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/assist_surface.py +0 -0
  18. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/audit.py +0 -0
  19. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/bootstrap.py +0 -0
  20. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/cli.py +0 -0
  21. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/cli_output.py +0 -0
  22. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/config.py +0 -0
  23. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/doctor.py +0 -0
  24. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/flow_evidence.py +0 -0
  25. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/index.py +0 -0
  26. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/insights.py +0 -0
  27. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/mcp.py +0 -0
  28. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/path_utils.py +0 -0
  29. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/sync.py +0 -0
  30. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/termstyle.py +0 -0
  31. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/update_check.py +0 -0
  32. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/css/board.css +0 -0
  33. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/css/details.css +0 -0
  34. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/css/toolbar.css +0 -0
  35. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/harnessApi.js +0 -0
  36. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/hostApi.js +0 -0
  37. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/hostApiContract.js +0 -0
  38. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/icon.png +0 -0
  39. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/layoutController.js +0 -0
  40. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/logics.svg +0 -0
  41. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/logicsModel.js +0 -0
  42. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/main.css +0 -0
  43. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/main.js +0 -0
  44. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/mainApp.js +0 -0
  45. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/mainCore.js +0 -0
  46. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/mainInteractionHandlers.js +0 -0
  47. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/mainInteractions.js +0 -0
  48. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/renderBoard.js +0 -0
  49. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/renderBoardApp.js +0 -0
  50. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/renderDetails.js +0 -0
  51. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/renderMarkdown.js +0 -0
  52. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/toolsPanelLayout.js +0 -0
  53. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/uiStatus.js +0 -0
  54. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/webviewChrome.js +0 -0
  55. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/webviewPersistence.js +0 -0
  56. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/media/webviewSelectors.js +0 -0
  57. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager/viewer_assets/vendor/mermaid.min.js +0 -0
  58. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/SOURCES.txt +0 -0
  59. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/dependency_links.txt +0 -0
  60. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/entry_points.txt +0 -0
  61. {logics_manager-2.5.2 → logics_manager-2.7.0}/logics_manager.egg-info/top_level.txt +0 -0
  62. {logics_manager-2.5.2 → logics_manager-2.7.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: logics-manager
3
- Version: 2.5.2
3
+ Version: 2.7.0
4
4
  Summary: Canonical Logics CLI
5
5
  Requires-Python: >=3.10
6
6
  License-File: LICENSE
@@ -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 _with_workflow_mermaid_overview("task", content)
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, _with_workflow_mermaid_overview("task", content)
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
- prefix: str
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
- if not re.match(rf"^{re.escape(kind.prefix)}_\d{{3}}_[a-z0-9_]+\.md$", name):
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,