ArchDogma
A catalog of real engineering failures. The scanner is just a way to find them in your code.
The Catalog
Programming has sacred rules. "Always test." "Use microservices." "No copy-paste." "Clean Architecture." Nobody tells you when these rules start strangling your system.
ArchDogma collects real postmortems — companies that followed a rule and paid for it. Not to say the rules are wrong. To say they have conditions.
Current catalog: 12 dogmas, 11 with postmortems.
Browse the full catalog: DOGMAS.md
Or from the CLI:
pip install archdogma
# View all dogmas with their status and linked cases
archdogma dogmas
# Search for a specific pattern
archdogma search "microservices"
archdogma search "inheritance"
archdogma search "coverage"
Selected postmortems
Microservices for everything → Segment (2022) 140+ services, one per data destination. Routing logic duplicated 140 times. On-call couldn't hold the system in their head. Rewrote as one Go service. Delivery reliability improved. → full case
DRY → shared config with 14 flags (QuackNet, 2025) ProbeConfig abstracted after 2 similar structs. Grew to 14 flags as 4 subsystems diverged. A Kafka change broke the Wi-Fi probe. Split back into 3 structs. The abstraction cost more than the duplication would have. → full case
TDD → over-mocked suite that passed but missed integration bugs (Basecamp, 2014) Tests mocked every boundary for unit purity. Integration bugs multiplied. DHH: "Test-driven development as ideology led to designing for tests instead of designing for the problem." → full case
OOP inheritance → 7 files for a 5-line business rule (Java EJB era, 2002) EJB 2.x required Home + Local + Remote interfaces + XML for every entity. Rod Johnson documented it and built Spring to eliminate the inheritance tax. → full case
The Scanner
Once you know which dogmas are in play, find them in your code:
# Probe one function — Trust Score, AST tags, linked dogmas
archdogma probe mymodule.py -f MyClass.process
# Scan a project — CI-ready
archdogma scan src/
archdogma scan src/ --fail # exit 1 if any tag fires
archdogma scan src/ --format json
The scanner detects 12 Tier 1 patterns — deep-inheritance, god-class, magic-numbers, if-on-parameter, dynamic-magic, broad-except, mutable-default-arg, too-many-returns, and more. Each tag links back to the catalog.
The scanner is secondary. The catalog is the point. If the catalog didn't have real postmortems, the scanner would just be another linter. The postmortems are what make a detected pattern meaningful: "here's who followed this rule and where it broke them."
Install
pip install archdogma
Or from source:
git clone https://github.com/gaidar0yegor/ArchDogma
cd ArchDogma
pip install -e .
Why This Exists
90% of engineering is understanding old code. And that code is full of dogmas applied without context. "Always test" — gamified into 100% coverage with no assertions. "Microservices" — applied to a 3-person team building one product. "Clean Architecture" — 5 layers for a CRUD app.
The pattern is predictable: a good rule gets applied without its conditions. Nobody wrote down when it stops working. The postmortems exist to fix that.
Honesty rules
- Every postmortem has a source link, or is explicitly marked first-party /
source_url: null. - Every claim can be challenged via the
honesty-buglabel on GitHub. - The scanner produces verifiable AST signals. No "expert" numbers without evidence.
- If a detector doesn't exist yet, the catalog says so:
[NEED POSTMORTEMS].
Accessibility
Voice mode from day one:
archdogma probe mymodule.py -f my_function --speak
Sighted and blind engineers get the same information. Not "later" — from the start.
Contributing
What we need most: real postmortems. Which dogma was applied at your company, under what conditions, and what broke.
- Post-mortem sources — open an issue with
postmortemlabel - Blind/low-vision engineers — primary reviewers of voice mode
- Honesty bugs — if you see a claim without a source, open
honesty-bug
Source of truth for the catalog: catalog/dogmas.yaml. DOGMAS.md is auto-generated via archdogma render-catalog.
License
MIT. Fork it, improve it.
If your fork drops the honesty rules or voice mode — don't call it ArchDogma.
🦫
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file archdogma-0.2.1.tar.gz.
File metadata
- Download URL: archdogma-0.2.1.tar.gz
- Upload date:
- Size: 305.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e32fbc528a5e1e1e1aacfb9f2cde395e38bc8f41193089bb5eae986c9a396262
|
|
| MD5 |
83475468ee600c0685e15901fb2d9665
|
|
| BLAKE2b-256 |
28f8e1fc0bbce8b56b250c3eafcd4c4cef26f5f8d33402ccd77d72793c8b857d
|
Provenance
The following attestation bundles were made for archdogma-0.2.1.tar.gz:
Publisher:
publish.yml on gaidar0yegor/ArchDogma
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
archdogma-0.2.1.tar.gz -
Subject digest:
e32fbc528a5e1e1e1aacfb9f2cde395e38bc8f41193089bb5eae986c9a396262 - Sigstore transparency entry: 2185361198
- Sigstore integration time:
-
Permalink:
gaidar0yegor/ArchDogma@e2aae3d205e2bdd49772b36e90a4922d709ffaf1 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/gaidar0yegor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e2aae3d205e2bdd49772b36e90a4922d709ffaf1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file archdogma-0.2.1-py3-none-any.whl.
File metadata
- Download URL: archdogma-0.2.1-py3-none-any.whl
- Upload date:
- Size: 41.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9df9d22275e0818bb9a300c62583ce2edbcf9a9987815e795f6c202c24179ffb
|
|
| MD5 |
fe9e54daeb14f0dca44ab2d70d29c662
|
|
| BLAKE2b-256 |
db8ec14f0eb2a2c46b64f4d022910f7f8a59d9a7642108d25c140d847cb001e5
|
Provenance
The following attestation bundles were made for archdogma-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on gaidar0yegor/ArchDogma
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
archdogma-0.2.1-py3-none-any.whl -
Subject digest:
9df9d22275e0818bb9a300c62583ce2edbcf9a9987815e795f6c202c24179ffb - Sigstore transparency entry: 2185361309
- Sigstore integration time:
-
Permalink:
gaidar0yegor/ArchDogma@e2aae3d205e2bdd49772b36e90a4922d709ffaf1 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/gaidar0yegor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e2aae3d205e2bdd49772b36e90a4922d709ffaf1 -
Trigger Event:
push
-
Statement type: