Imported from ryanduguid/australian-accounting (
AGENTS.md). Install upstream withnpx skills add ryanduguid/australian-accounting. Copyright stays with the author.
Agent instructions
This repository holds several independently released components. Read a component's
own AGENTS.md, CONTRIBUTING.md and SECURITY.md before changing it, and run its
checks from its own directory.
- Setup:
uv syncat the root installs every component and the shared toolchain into one.venv;just testruns every component's suite plus the boundary checks. That is the whole setup for a fresh clone.justcomes fromuv tool install rust-just. - Components:
apps/aus-accounting-mcp/(the MCP application),apps/lodgeit-calculator-adapter/(an optional adapter for a third-party calculator service, off by default and imported by nothing else here),packages/<distribution>/(one directory per engine) andpackages/au-tax-rates-data/(sourced ATO rates and thresholds with their validator; not an engine, imported by nothing and never released). - Dependency direction: the MCP application depends on engines only through their
published distributions. The root workspace redirects those 4 dependencies to the
checked-out sources so the application is developed and tested against the tree, but
the exact pins in its
pyproject.tomlstay authoritative and uv sources are never written into a built distribution. Engines never importaus_accounting_mcpor another engine, and production code never uses a relative import that leaves its component directory. One shared.venvmakes every component importable from every other;tests/test_boundaries.pyis what keeps that from becoming a dependency. - Every component keeps its own
pyproject.toml, lockfile, version, release notes, tests, commands and licence, and is released on its own from its own directory. A component's lockfile stays the authority for building and releasing that component alone. The rates dataset is the exception: it has no release workflow or release notes. - The root
pyproject.toml,uv.lockandjustfileare a development entrypoint only. The root is a virtual uv workspace: it declares no package, no version and no runtime dependency, and publishes nothing. Do not add a root distribution, shared runtime library, unified version, code generator or monorepo framework. uv run --lockedinside a component directory validates the rootuv.lock, not the component's. After changing any component's dependencies, runuv lockat the root and commit the result.- Only the workflows under the root
.github/workflows/are active. Read the root CONTRIBUTING.md for current command and CI routing. Run component commands from their component directory; resolve imported workflow references against the root workflows. Historical import details live inIMPORTS.md. - Fixtures and demonstrations are fabricated. No client data, credentials, workpapers or generated client reports enter this repository.
- Movement, import and behaviour changes are separate changes. Do not refactor a component while moving or importing it.
- A release covers one component, on the namespaced tag
<component>/vX.Y.Z, through that component's root release workflow. Never tag, release or publish without explicit approval.
