plan-marshall-plugin
Java domain extension with Maven/Gradle build operations and workflow integration
SKILL.mdmarketplace/bundles/pm-dev-python/skills/plan-marshall-plugin
GitHubPlan Marshall Plugin - Python Domain
Domain manifest skill providing Python development capabilities to plan-marshall workflows.
Enforcement
Execution mode: Extension manifest; modify only via Extension API contract.
Prohibited actions:
- Do not modify extension.py without updating this manifest documentation
- Do not bypass ExtensionBase inheritance for domain registration
- Do not hardcode skill paths; use bundle notation
Constraints:
- Extension must implement
get_skill_domains()fromExtensionBase - Axis-C edge derivation is opted into by multiple inheritance (
Extension(ExtensionBase, DerivationResolverBase));derive_edges()must stay a pure function of its arguments — no filesystem access, no subprocess - Domain identity must match the bundle name convention (python)
- Profile-based skill organization must align with plugin.json registration
Purpose
Declares the Python domain configuration including:
- Domain identity (key: python)
- Profile-based skill organization (core, implementation, module_testing, quality)
- Module applicability detection based on Python build systems
Configuration
All configuration is in extension.py, which implements two axes of the Extension API.
Axis-A (ExtensionBase):
get_skill_domains()- Domain metadata with profilesapplies_to_module()- Check Python applicability via build systems and.pyfilesprovides_triage()- Returnspm-dev-python:ext-triage-pythonprovides_arch_gate()- Returns theimport-linterarch-gate tool binding (pm-dev-python:arch-gate-python)provides_file_globs()- Declares the Python source glob (['**/*.py']) seeded intoskill_domains.python.file_globsfor domain detection; contributes nobuild.maproute
Axis-C (DerivationResolverBase, opted into by multiple inheritance):
derivation_resolver_id()- Returns the stable provenance idpython, stamped onto every edge this resolver producesderive_edges()- Pure join over thecomponent_refsfield module discovery materializes, selecting onlyimportentries. The four markdown reference kinds belong to the siblingmarkdownresolver onpm-plugin-development. Unresolved targets, unknown endpoints, and self-edges are suppressed and reported as aggregatednotes[]entries — one per category with a count and a bounded sample. The method performs no file I/O and runs no subprocess, and imports nothing from the bundle that materializes the fieldderivation_file_patterns()- Declares the file patterns this resolver derives from (['**/*.py']). Descriptive metadata rendered by the resolver-configuration menu, never a filter: activation is bound by resolver id in the machine-localderivation_resolverssection, not by matching a file
Detection
This domain is applicable when:
pythonis listed in the module'sbuild_systems.pyfiles are found in source or test paths
Detection gates skill loading, not resolver registration. The Axis-C resolver is discovered unconditionally: discover_derivation_resolvers() iterates discover_all_extensions(), which returns every extension regardless of whether it applies to the current project, and applies no skill_domains filter. The applicability rules above therefore have no bearing on whether the python resolver runs — a project with no active Python domain still gets its edges. See ext-point-derivation-resolver.md § Discovery.
Build operations (pyprojectx execution, parsing, discovery) are provided by plan-marshall:build-pyproject, not this bundle.
Integration
This manifest is read by:
skill-domains get-available- Lists available domainsskill-domains configure- Applies domain configuration to marshal.jsonmarshall-stewardwizard - Domain selection during project setup