Skip to content

Module Map

bijux_canon_dev is organized by governed repository responsibility. Each module owns one policy decision and exposes a focused callable surface; Make and workflow layers compose those decisions without reimplementing them.

bijux_canon_dev/
├── api/
├── docs/
├── packages/
│   ├── agent/
│   ├── index/
│   └── runtime/
├── quality/
├── release/
├── sbom/
├── security/
└── trusted_process.py

Module Responsibilities

Module Inputs Decision or output
api.freeze_contracts apis/*/v1/schema.yaml, pin, digest canonical pin equality and YAML SHA-256 validity
api.openapi_drift application import and checked-in schema generated canonical JSON plus drift verdict; optional intentional pinning
docs.badge_sync badge catalog and workspace/package metadata generated README badge blocks or drift refusal
docs.mkdocs_config source MkDocs configuration and build paths rewritten build configuration and prepared source paths
docs.repository_docs_catalog repository package catalog and documentation model generated reference inputs used by the public site
quality.deptry_scan shared Deptry policy and package metadata package-specific merged dependency scan configuration and exit status
security.pip_audit_gate pip-audit JSON and strict/ignore policy normalized vulnerability table and gate status
release.version_resolver package metadata and Git history static, Hatch VCS, or matching-tag version
release.publication_guard resolved version and optional dist directory prerelease/local-version policy and artifact-version agreement
sbom.requirements_writer package dependencies and optional development group deduplicated prod or dev requirements with local workspace references
trusted_process absolute executable and argument sequence text-mode completed process or TrustedCommandError

API Modules

freeze_contracts walks all apis/*/v1/schema.yaml roots. It canonicalizes YAML and pinned JSON before comparison, then hashes the exact YAML text and compares it with the sha256: entry. It fails if no schemas exist or if any pin, digest, or match is missing.

openapi_drift imports an ASGI application or zero-argument factory, writes its generated OpenAPI as canonical JSON, and compares it with the checked-in schema. --pin deliberately writes the generated schema back to the named source file; it does not update the separate pinned JSON and digest. A complete intentional change still runs freeze synchronization afterward.

flowchart LR
    app[ASGI app or factory] --> drift[openapi_drift]
    yaml[schema.yaml] --> drift
    drift --> generated[artifact JSON]
    yaml --> freeze[freeze_contracts]
    pin[pinned_openapi.json] --> freeze
    hash[schema.hash] --> freeze

Documentation Modules

mkdocs_config rewrites repository-relative paths for an isolated build source and output directory. repository_docs_catalog supplies the package inventory and generated reference material consumed during docs preparation. badge_sync reads the public package set from workspace metadata and renders named badge templates into marked README blocks.

These helpers own generation and comparison. The authored pages, public navigation, theme, and package behavior remain in their corresponding source trees.

Quality and Security Modules

quality.deptry_scan merges shared Deptry configuration with a package-specific override, filters optional dependency groups to those actually declared, and invokes the configured Deptry executable through a generated configuration.

security.pip_audit_gate accepts pip-audit’s list or dependency-envelope JSON, matches both vulnerability IDs and aliases against the configured ignore set, and prints remaining findings with fix versions. Strict mode fails on missing, malformed, or non-empty disallowed findings. Non-strict mode is visible in the output and must not be presented as a strict pass.

Release and SBOM Modules

Version resolution proceeds from an explicit project version, to hatch version, to the latest matching Git tag, then returns 0.0.0 when no source resolves. The publication guard refuses unresolved, prerelease, local/dirty, or artifact-mismatched versions unless the relevant exception is explicit.

The SBOM requirements writer produces separate production and development inputs. Local workspace dependencies become absolute file: requirements so the downstream CycloneDX process can resolve the actual checkout. It preserves extras and environment markers and removes duplicate requirement strings.

Package Adapters

Package-specific modules exist only where a repository rule needs a narrow adapter:

Adapter Repository rule
packages.agent.check_no_generated_files generated files must not be tracked in the agent package
packages.agent.check_no_stray_dirs agent source layout must not accumulate forbidden directories
packages.index.plugin_contract_report index plugin declarations produce a reviewable conformance report
packages.runtime.check_dependency_allowlist runtime dependencies remain within the governed allowlist

An adapter can report a product package’s conformance but cannot become the home of the product rule itself.

Finding the Caller

flowchart LR
    helper[Python helper] --> test[Focused test]
    helper --> fragment[Make fragment]
    fragment --> target[Root or package target]
    target --> job[Workflow job]
    helper --> output[artifacts/ diagnostics]

Search module imports and python -m invocations in makes/ before changing a helper. Then inspect workflow callers for matrices, permissions, and artifact retention. The module test establishes policy logic; the caller chain establishes where that policy is enforced.

See Package Overview for the boundary and the focused Schema Governance, Security Gates, Release Support, and SBOM and Supply Chain pages for operational detail.