What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
In a reported audit of one Counterfact repository snapshot, Mneme v0.9.2 could express none of the 15 architectural decisions the authors classified as protection-relevant. But the same article says Counterfact’s existing tooling already protected all 15. The result is therefore a narrow finding about fit between one version of Mneme’s rule vocabulary and one project’s decisions—not a claim that Counterfact’s architecture was unprotected or that Mneme cannot enforce architectural decisions generally.
What the 0-of-15 result measured
The audit, reported by Theo Valmis in a DEV Community article, began with Counterfact’s architecture decision records (ADRs) and source at commit 2a1dfb1. The authors catalogued 29 decisions and selected 15 as “protection-relevant,” meaning a violation would break something. They then ran mneme audit version 0.9.2 against a project memory they had written and the repository.
| Measure reported in the article | Result |
|---|---|
| Architectural decisions catalogued | 29 |
| Decisions classified as protection-relevant | 15 |
| Protection-relevant decisions covered by Counterfact’s own tooling | 15 (100%) |
| Protection-relevant decisions Mneme v0.9.2 could enforce in the audit | 0 (0%) |
| Decisions said to require a new Mneme rule type | 15 (100%) |
These figures are the authors’ reported results, not an independently replicated benchmark. The article page displays “Posted on Sep 25” without a year in the inspected text, so the publication year cannot be stated from that date display.
Why “Mneme enforced zero” does not mean “nothing was enforced”
The denominator is 15 decisions selected from the authors’ 29-item inventory, and the result is specific to Mneme v0.9.2 and Counterfact at commit 2a1dfb1. The audit asked three distinct questions: whether the repository already protected a decision, whether Mneme’s then-current rule vocabulary could express it, and what capability would be needed if it could not.
#1 Best Overall
According to the article, Counterfact’s own tools covered every decision in the selected set. Thus, “0 of 15” describes Mneme’s ability to add enforcement in this particular audit; it does not mean the decisions themselves were left without protection. Nor does the finding establish what a later Mneme version can do: the material reported does not provide a current-version comparison.
What Counterfact’s existing protections looked like
Package dependency direction
The article describes scripts/check-package-boundaries.mjs and an ADR_DEPENDENCY_ALLOWLIST. The check compares package dependencies and TypeScript project references, inspects imports and re-exports, rejects disallowed cross-package imports, and flags cycles. It runs through yarn check:boundaries on each pull request, according to the article.
Rank #2
Package closure tests
scripts/test-package-closures.mjs packs workspaces and installs each package in a temporary directory using only its declared dependency closure. The reported checks cover dependency closure, exported subpath imports, rejected deep imports, TypeScript declarations, and a documented example run from the installed copy.
Free tools Windows power users keep installed
One-click scans. No signup required.
Generated-code self-containment
For generated route handlers, the article says Counterfact copies a counterfact-types/ template and uses relative-path type imports rather than importing from workspace packages. CI compares generated fixtures byte for byte.
Rank #3
These examples explain what the article counts as protection by Counterfact’s tooling. They are descriptions from that account, not a separate validation of the scripts or their current behavior.
Which kinds of decisions Mneme lacked rule types for
The article characterizes Mneme’s rules at the time as source-text checks: a rule could forbid a literal or require a pattern, scoped to paths. The authors mapped the 15 selected decisions to these missing capabilities:
Rank #4
| Decision category | Missing rule capability identified | Number of decisions |
|---|---|---|
| Package boundaries, exports maps, and TypeScript project references | Dependency rules with allowlists and source-level import verification | 4 |
| Package-closure tests, mutation baseline, and release preflight | Evidence-backed rules that consume external verifier results | 4 |
| Request/response validation, immutable route builder, and types from OpenAPI | Protocol/API contract rules | 3 |
| Multi-API specification configuration and shared store across hot reloads | State/lifecycle rules | 2 |
| Generated-code self-containment | Generated-versus-source constraints | 1 |
| Graceful degradation on bad input | Behavioral rules | 1 |
The categories span more than source patterns. Some decisions depend on repository structure or runtime behavior; others are protected by separate tests or release checks. The audit’s most consequential proposed gap was evidence-backed rules: rather than reimplementing a repository’s specialized checker, an architecture tool could associate that checker’s result with the decision it protects. Valmis put it this way: “A mature repo doesn’t need Mneme to re-implement its boundary checker. It needs Mneme to read the checker’s output and tie it to the decision that justifies it.”
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →How to use the finding when evaluating architecture enforcement
The audit is useful as a fit question, not a universal ranking. A team considering any architecture-enforcement tool should first inventory the decisions it actually needs to preserve and identify what already guards them. Then assess the tool against that same inventory.
Best Value
- Separate capability from coverage. A tool lacking a native rule type does not prove a decision is unenforced; an existing CI test or verifier may already cover it.
- Check the kind of rule required. Text-pattern checks may suit simple source conventions but not dependency graphs, API contracts, lifecycle behavior, generated-code comparisons, or verifier outputs.
- Look for integration with existing checks. If a repository already has a boundary checker or release preflight, determine whether the architecture tool can consume its result and link it to an ADR.
- Keep the comparison reproducible. Use the same decision inventory and repository revision when comparing tools or versions, and state how “important” or “protection-relevant” decisions were selected.
- Verify current capabilities directly. This reported audit establishes a result for v0.9.2; it does not establish whether subsequent Mneme versions added the missing types.
Valmis positioned Mneme for teams with written ADRs or standards but little enforcement behind them. In a repository like the one described, where existing tooling reportedly protected every decision in the selected set, the practical question is not whether another rule layer is desirable in theory. It is whether it can connect decisions to checks the team does not already have—or make existing protection easier to maintain.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

