Skip to content

Releases

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 16:46
2c79edc

0.7.0 (2026-10-11)

Added

  • cli: add inwards diagram to print the config as Mermaid or PlantUML (#383) (f83375a)
  • cli: show diagram findings in the hook, the editor and MCP (#385) (06c400d)
  • rules: add INW019 diagram-missing-dependency (#384) (cdac53f)
  • rules: recognise FastAPI routers built at run time and in router factories (#394) (2008c3e), closes #358
  • rules: skip test modules in the opt-in content rules (#389) (a8c282a)

Fixed

  • rules: report a project's own INW016 naming scheme once (#390) (0596d16), closes #361
  • rules: stop INW012 flagging markup trees, HTMX error answers and health checks (#396) (cf127b7), closes #360

Changed

  • rules: parse each file once per run across the content rules (#393) (c38c5ae), closes #387
  • rules: skip INW013 files that can't reach a blocking name in large runs (#386) (36acccc), closes #369

Documentation

  • show the rules as a category tree in the sidebar (#382) (223efd9), closes #381

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 11:23
7caa300

0.6.0 (2026-10-11)

Added

  • cli: add check --format github for Actions annotations (#356) (c7bb0bd), closes #339
  • cli: add init --agent claude --shared for committed hooks and MCP (#357) (7a7e187), closes #342
  • cli: add inwards init --style auto that maps an existing project's packages (#371) (0cc09cb), closes #343
  • cli: add inwards rules and inwards rule CODE (#355) (ffd74dc), closes #341
  • cli: name the opt-in rules a project turns on in the architecture brief (#352) (bbb71a1), closes #336
  • cli: turn on INW014 ports-abstract in the clean and hexagonal presets (#326) (d05dd3f), closes #317
  • cli: turn on INW015 construct-only-in in the clean and hexagonal presets (#350) (cf6746e), closes #325
  • cli: turn on INW016 and keep fastapi out of the domain core in the fastapi preset (#363) (16b2f30), closes #338
  • cli: turn on module cycles in every init preset (#366) (3f9cb26), closes #340
  • core: turn opt-in rules on per template role (#327) (5bdf5ad), closes #298
  • rules: add INW014 ports-abstract so port modules hold only ABCs and Protocols (#312) (05d95c1), closes #98 #295
  • rules: add INW015 construct-only-in so only the composition root imports and builds outbound adapters (#313) (f385d41), closes #98 #296
  • rules: add INW016 orm-naming for table names and datetime and date column suffixes (#318) (2331d42), closes #98 #297
  • rules: add INW017 diagram-unknown-name for marked Mermaid architecture diagrams (#354) (ab81e69)
  • rules: add INW018 diagram-forbidden-edge and inwards import-diagram (#365) (bfb6a9f), closes #332 #345
  • rules: read PlantUML component diagrams in INW017, INW018 and import-diagram (#373) (6d3ea63), closes #332 #346

Fixed

  • cli: give every command its own --help and one-line usage errors (#351) (f316ca3), closes #335
  • rules: cut false positives of the opt-in rules found on the corpus (#364) (a99ea2a), closes #182
  • rules: don't count TYPE_CHECKING imports as INW004 cycle edges (#376) (7897c79)
  • rules: report correct end positions for INW016 findings (#374) (67a4311), closes #370

Changed

  • rules: parse each module INW013 follows once per run (#372) (48cbce7), closes #359

Documentation

  • add a getting-started guide for GitHub Copilot (#314) (71534ef), closes #67
  • add setup pages for Neovim, Zed and Helix (#311) (92e27cc), closes #66
  • decide Inwards hooks for Copilot in ADR-044 (#324) (46fee50), closes #316
  • point install and CI at PyPI and the public repository (#353) (2b06d29), closes #334
  • rules: group the rule catalogue by category and show presets (#368) (5ab4ff8), closes #337

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 21:27
19c953a

0.5.0 (2026-10-10)

Added

  • cli: add inwards mcp, an MCP server for checking code before it is written (#307) (2c15753), closes #65
  • cli: add inwards server, a language server over stdio in the binary (#300) (d170ae5), closes #63
  • cli: add the fastapi preset to inwards init --style (#269) (77cb4a0), closes #238
  • cli: map import-linter | siblings to sibling layer groups (#254) (d2ecd05)
  • cli: serve PostToolUse from a resident inwards daemon (#274) (05b7186), closes #60
  • cli: turn on INW012 thin-endpoint in the fastapi preset (#283) (08ad7c4), closes #272
  • cli: turn on INW013 async-blocking in the fastapi preset (#303) (b3a030c), closes #302
  • rules: add FAPI005 route-shadowing (#256) (bbefe6e)
  • rules: add FAPI006 to FAPI009 (lifespan-events, yield-dependency-swallows, duplicate-operation-id, depends-called) (#260) (ce385f8), closes #225 #226 #227 #228
  • rules: add INW012 thin-endpoint for FastAPI endpoints and custom decorators (#273) (c9eb992), closes #182
  • rules: add INW013 async-blocking for sync database, cache and cloud calls in async def (#301) (a8ef8ce), closes #98 #293
  • rules: count same-module helpers and registered routes in INW012 (#287) (4db9576), closes #271
  • rules: deny a library to a module prefix with INW005's deny option (#245) (6efa426), closes #219
  • rules: follow INW013 one hop into first-party sync helpers (#304) (214e95b), closes #98 #294
  • rules: let a context's public list open a package facade with =pkg (#259) (79a2413)
  • rules: name the concrete delegate-to module in INW012 fixes (#288) (337fc66)
  • rules: read looped and splatted FAPI002 handler registrations, scope them per app (#264) (f2c266b), closes #242
  • rules: recognise Flask, Litestar and Django endpoints in INW012 (#291) (e4d188b), closes #270
  • vscode: start the bundled inwards server and publish to the Marketplace and Open VSX (#306) (0bda609), closes #64

Fixed

  • cli: don't let a reused pid keep a dead daemon's lock (#285) (363b6c1), closes #276
  • cli: keep a hung git call from blocking the daemon's queue (#290) (ec2bd65), closes #277
  • cli: make SessionStart start-content copies on Windows (#253) (1d976eb)
  • cli: stop starting a daemon on every edit when none can listen (#289) (b6358f9), closes #275

Changed

  • cli: cut the serial part of a cold full check (#292) (c3ef8f3), closes #281
  • cli: parse large full checks on worker threads (#282) (3dc5489), closes #61
  • core: blank long runs of comment lines before the full parse (#255) (2fd428c)
  • core: parse the hook's second check of a file incrementally (#299) (5411f97), closes #122
  • core: read imports and suppression comments without walking the whole tree (#268) (5bfad70), closes #62

Documentation

  • decide the resident process design in ADR-039 (#263) (73936df), closes #59
  • give the docs site its own identity and a home page built on a real run (#250) (dc93f8a)
  • point editor completion at SchemaStore and add the schema sync step (#249) (9c0bc74)
  • rules: validate rule pages and add a filterable rule list (#265) (df00f56), closes #145

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 21:42
1c1637d

0.4.0 (2026-09-28)

Added

  • check every uv workspace member with its own config, and find namespace package portions in other members (#217) (8dbf052)
  • cli: add vertical-slices, bounded-contexts and django presets, and make hexagonal adapters siblings (#239) (455ac94)
  • cli: brief the agent on the architecture with inwards context and init --brief (#213) (2f590de)
  • cli: convert import-linter contracts with inwards import-config (#220) (3949a5b)
  • cli: write package shapes with init --style --scaffold (#218) (0ecc210)
  • config: layer selectors such as shop.*.domain for vertical slices (#222) (68e66be)
  • config: opt-in rules, extend-select and per-rule option tables (#223) (e87e464)
  • config: package templates with role layering and independent sibling layers (#232) (80c75ad)
  • hook: deny a Write that creates a Python file the package shape forbids (#215) (44f494a)
  • hook: know the start content of files dirty or untracked at session start (#229) (a9f854d)
  • rules: add FAPI001 endpoint-metadata and FAPI002 undocumented-error-response (#243) (d4b94ea)
  • rules: FAPI003 router-wiring reports unmounted routers, inclusion cycles and early includes (#237) (188c201)
  • rules: follow more loader routes and fold constant targets in INW011 (#216) (cfbd1ab)
  • rules: register the FastAPI rule family (FAPI001-FAPI003, opt-in) and its shared model (#230) (a735af0)

Fixed

  • cli: report a --config that isn't a file instead of crashing (#214) (8e21ec3)
  • hook: catch a replayed SessionStart and a Stop hook removed through Bash (#240) (9f25ba2)
  • hook: show what a Bash edit of [tool.inwards] hides by checking with the session-start config (#211) (c9981c4)
  • rules: accept namespace package portions installed in the project's .venv, or listed in namespace-packages (#221) (164f5b0)
  • rules: close the INW006 follow-ups for compiled modules, ignore depth and shadowing packages (#244) (59b52a1)
  • rules: report symlinks in layers that point out of the root or into another layer (#231) (d9a7670)

Documentation

  • spike: record the FAPI004 corpus run and its no-go per subset (#241) (8c46281)

Chores

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 28 Sep 08:53
b706bc9

0.3.1 (2026-09-28)

Added

  • a content-keyed extraction cache for check and baseline (#194) (e478c15)
  • cli: init --launcher "uv run" writes hooks and the AGENTS.md command without a binary path (#207) (4df19d7)
  • cli: inwards init --agent opencode wires Inwards into OpenCode (#199) (32e6460)
  • config: contexts table, a JSON Schema and a configuration reference (#193) (c4d5f8f)
  • rules: call a uv workspace member a workspace package in INW005 (#204) (1c98fe6)
  • rules: INW002 keeps each bounded context to the contexts it depends on (#195) (e839c3e)
  • rules: INW003 keeps code outside a context to its public modules (#196) (76635a3)
  • rules: INW004 reports import cycles between modules or contexts (#197) (ae212d2)

Fixed

  • cli: warn about check paths outside the config root instead of reporting All clear (#205) (7906bb4)
  • rules: warn when a uv workspace member is checked from the workspace root (#206) (b8c0ea7)

Documentation

  • describe CI's self-hosted part without naming the infrastructure (#198) (f3b77cd)

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 14:48
6419097

0.3.0 (2026-09-27)

⚠ BREAKING CHANGES

  • rules: a dynamic import whose target isn't a string literal (importlib.import_module(name), exec(code), …) in any layer but the outermost now fails inwards check (INW011). Use a literal or an import statement, move the loader to the outermost layer and pass what it loads in through a Protocol-typed parameter, or baseline it.
  • rules: a layered file that imports a first-party module that doesn't exist now fails inwards check (INW010). Fix the import, create the module, or run inwards baseline.
  • rules: in a config with two or more layers, the innermost layer now denies 32 frameworks, database and network clients and standard-library I/O modules by default (INW005), so a domain that imports one of them, such as sqlalchemy, requests or subprocess, fails inwards check after the upgrade. Move the import behind a port implemented in an outer layer, set deny-libraries = [] on the innermost layer to turn the default off, or run inwards baseline to accept the existing imports.

Added

  • config: add extend-deny-libraries to add to the INW005 deny list instead of replacing it (#166) (b7bfa3b)
  • config: let INW010 accept generated modules missing from a fresh checkout (#172) (943d227)
  • config: per-rule select, ignore and severity in [tool.inwards.rules] (#162) (f78d2fd)
  • core: make the module index an engine input for every adapter (#153) (8a40b82)
  • lsp: show config errors in the editor and re-read pyproject.toml on change (#167) (c6013c7)
  • rules: add INW005 to limit the libraries each layer may import (#151) (2a5cff1)
  • rules: add INW010 to flag imports of first-party modules that don't exist (#159) (859a85d)
  • rules: inline suppressions with a mandatory reason, rejected by default when an agent adds them (#165) (f75f47f)
  • rules: link each diagnostic to its own rule page, with a docs page per rule (#173) (5712650)
  • rules: report dynamic imports with unverifiable targets in inner layers (INW011) (#158) (492e8fc)

Fixed

  • ci: cycle check and run-log test on macOS and Windows (#187) (d7bf6f8)
  • hook: let read-only Bash chains and pipelines that name .inwards through the config guard (#152) (1e267e8)
  • hooks: show project-relative paths through a symlinked root, and run doc snippets under bash 3.2 (#175) (8717831)
  • hooks: stop INW007's pre-existing excuse from following symlink aliases (#171) (fb1f498)
  • hook: stop blocking on violations a file already had at session start (#154) (6ae458b)

Documentation

  • add a Polish translation at /pl/ with a page-keeping language switcher (#156) (7564422)
  • drop the CI runners section from chapter 6 (#148) (7765501)

Chores

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 12:47
ab7021d

0.2.0 (2026-09-26)

Added

  • cli: add --format concise and --max-diagnostics (#117) (1b13098)
  • cli: design-partner kit: guide, stats --export --redact, feedback form (#128) (c1b831a)
  • cli: inwards baseline accepts existing violations (#105) (7da0555)
  • cli: inwards init --style writes architecture presets, with an example scaffold and a picker (#125) (fb3aeea)
  • cli: inwards stats computes the hypothesis numbers from the run log (#110) (6e46e39)
  • rules: package shape with INW007 package-shape and INW008 missing-member (#123) (954671f)

Fixed

  • cli: stats handles parallel sessions, stubs and projects outside git (#115) (87ccc6d)
  • docs: quadrant chart and C1-C4 text unreadable in light theme (#140) (63a05df)

Changed

  • compile the binaries with bytecode to halve start-up (#118) (f2f5325)
  • skip the confirming parse for baselined violations and add a whole-project Stop gate (#139) (fb741b1)

Documentation

  • agents: claim issues through linked branches and close them with a full report (#116) (6386972)
  • bring the docs in line with what M1 shipped (#104) (98acd0e)
  • fix diagram theming for dark mode, animate the homepage loop (#130) (c90a58c)
  • record the M2 go or no-go decision (ADR-022) (#137) (b9b5c23)

Chores

v0.1.0-rc.1

v0.1.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Sep 21:33
bf5e8de

What's Changed

New Contributors

Full Changelog: https://github.com/SirCypkowskyy/inwards/commits/v0.1.0-rc.1