methodology-framework 0.3.2__tar.gz → 0.3.3__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 (35) hide show
  1. {methodology_framework-0.3.2/src/methodology_framework.egg-info → methodology_framework-0.3.3}/PKG-INFO +1 -1
  2. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/pyproject.toml +1 -1
  3. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/jira_discovery.py +13 -5
  4. {methodology_framework-0.3.2 → methodology_framework-0.3.3/src/methodology_framework.egg-info}/PKG-INFO +1 -1
  5. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/tests/test_jira_discovery.py +6 -2
  6. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/LICENSE +0 -0
  7. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/README.md +0 -0
  8. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/setup.cfg +0 -0
  9. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/__init__.py +0 -0
  10. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/__main__.py +0 -0
  11. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/bootstrap_jira.py +0 -0
  12. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/build_playbook.py +0 -0
  13. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/jira_shapes/__init__.py +0 -0
  14. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/jira_shapes/automation_rules.yaml +0 -0
  15. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/jira_shapes/custom_fields.yaml +0 -0
  16. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/jira_shapes/workflow.yaml +0 -0
  17. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/playbooks/bindings/meth.yaml +0 -0
  18. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/playbooks/bindings/scrum.yaml +0 -0
  19. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/playbooks/scrum-router.body.md +0 -0
  20. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/populate_acus.py +0 -0
  21. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/register_playbook_with_devin.py +0 -0
  22. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/specs/devin-story-format.md +0 -0
  23. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/sync_stories_to_jira.py +0 -0
  24. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/templates/github_workflows/populate-story-acus-caller.yml +0 -0
  25. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework/templates/story.md +0 -0
  26. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework.egg-info/SOURCES.txt +0 -0
  27. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework.egg-info/dependency_links.txt +0 -0
  28. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework.egg-info/requires.txt +0 -0
  29. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/src/methodology_framework.egg-info/top_level.txt +0 -0
  30. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/tests/test_bootstrap_jira.py +0 -0
  31. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/tests/test_build_playbook.py +0 -0
  32. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/tests/test_populate_acus.py +0 -0
  33. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/tests/test_register_playbook_with_devin.py +0 -0
  34. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/tests/test_sync_stories_to_jira.py +0 -0
  35. {methodology_framework-0.3.2 → methodology_framework-0.3.3}/tests/test_workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: methodology-framework
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: Portable process tooling for agent-driven delivery — scripts, playbooks, templates, and specs.
5
5
  Author: whiteout59
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "methodology-framework"
7
- version = "0.3.2"
7
+ version = "0.3.3"
8
8
  description = "Portable process tooling for agent-driven delivery — scripts, playbooks, templates, and specs."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -283,17 +283,25 @@ def discover_issue_types(
283
283
  base_url: str,
284
284
  project_key: str,
285
285
  ) -> dict[str, str]:
286
- """Discover issue type name→ID map via GET /rest/api/3/issuetype.
286
+ """Discover issue type name→ID map for a specific project.
287
+
288
+ Uses GET /rest/api/3/project/{key} which returns the project object
289
+ with its project-scoped ``issueTypes`` array — each project has its
290
+ own per-project issue type IDs, so the global ``/issuetype`` endpoint
291
+ is unsafe (it returns types across all projects and dict-overwrite
292
+ picks the wrong project's ID when names collide).
287
293
 
288
294
  Returns mapping from issue type name to ID string.
289
- Raises DiscoveryError if "Story" or "Sub-task" is missing.
295
+ Raises DiscoveryError if "Story" or "Sub-task" is missing from the
296
+ project's issue type list.
290
297
  """
291
- resp = session.get(f"{base_url}/rest/api/3/issuetype")
298
+ resp = session.get(f"{base_url}/rest/api/3/project/{project_key}")
292
299
  resp.raise_for_status()
293
- all_types: list[dict[str, Any]] = resp.json()
300
+ project_data: dict[str, Any] = resp.json()
301
+ project_issue_types: list[dict[str, Any]] = project_data.get("issueTypes", [])
294
302
 
295
303
  name_to_id: dict[str, str] = {}
296
- for it in all_types:
304
+ for it in project_issue_types:
297
305
  name_to_id[it["name"]] = it["id"]
298
306
 
299
307
  for required_name in (ISSUE_TYPE_NAME_STORY, ISSUE_TYPE_NAME_SUBTASK):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: methodology-framework
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: Portable process tooling for agent-driven delivery — scripts, playbooks, templates, and specs.
5
5
  Author: whiteout59
6
6
  License-Expression: Apache-2.0
@@ -111,8 +111,12 @@ def _mock_session(
111
111
  resp.json.return_value = statuses or STATUSES_RESPONSE
112
112
  elif url.endswith("/issueLinkType"):
113
113
  resp.json.return_value = link_types or LINK_TYPES_RESPONSE
114
- elif url.endswith("/issuetype"):
115
- resp.json.return_value = issue_types or ISSUE_TYPES_RESPONSE
114
+ elif "/project/" in url:
115
+ # Project endpoint returns the project object with embedded issueTypes.
116
+ # (v0.3.3 switched discover_issue_types from the global /issuetype
117
+ # endpoint to the project-scoped /project/{key} endpoint to fix
118
+ # cross-project ID collisions.)
119
+ resp.json.return_value = {"issueTypes": issue_types or ISSUE_TYPES_RESPONSE}
116
120
  return resp
117
121
 
118
122
  session.get = _get