---
title: "The dormant-project tripwire: make the unknown visible"
canonical: https://dxdev.com/blog/dormant-project-scanner-forces-classification/
datePublished: 2026-05-26
---
A project does not need a dramatic failure to become risky. It can simply become quiet: no recent changes, no clear owner, no stated next step, and perhaps a leftover automation or dependency that no one remembers maintaining. The danger is not that people forget things. The danger is that ordinary tools make forgotten things easy to omit.

I built a small inventory for that problem. It did not try to decide whether a project was valuable. It asked a more useful question first: **has someone explicitly decided what this project is and what should happen next?**

The design choice that made the inventory useful was simple. Anything it found that was not in the registry appeared at the top of the report as **Needs classification**. It could not disappear because a configuration file did not know about it.

## Silence is not a status

It is tempting to treat a quiet repository as harmless. That can be true. A project may be intentionally parked, finished, archived, or no longer relevant. But those are decisions, and a directory alone does not record one.

A useful inventory distinguishes at least four states:

- **Active:** it has an accountable owner and a current purpose.
- **Parked:** work has paused, with a reason and a condition for resuming.
- **Frozen:** it is retained as a historical record and should not change.
- **Unclassified:** the system found it, but nobody has yet said what it is for.

The fourth state matters most. If an inventory filters out unknown items, it quietly recreates the original problem: the work remains present but has no owner, context, or lifecycle decision.

## Join observed state with declared intent

The scanner combines two kinds of information.

First is **observed state**: for example, whether a repository has recent activity, pending changes, or references in approved automation. Observed state can tell you that something exists or appears to be in use. It cannot tell you whether that use is intended.

Second is **declared intent**: a small, human-maintained registry that records an owner, a status, and enough context for someone to make the next decision. Parked work gets a reason and a pickup condition. Frozen work gets an explanation of why it is retained.

The useful control is not an inner join that only reports known entries. It is a reconciliation: show every discovered item, then visibly flag anything missing from the registry. In other words, let the inventory say, “I found this, but I do not know what it is.”

## Keep the report in the workflow

A report nobody sees is only a better-organized omission. The inventory needs a predictable review point: a weekly operating review, a pre-planning checklist, or a brief project-start ritual. The point is not to create bureaucracy. It is to make ownership and lifecycle visible before dormant work becomes accidental infrastructure.

The report should also state when the scan ran and show an empty **Needs classification** section when there is nothing to resolve. An empty section is evidence that the check ran; its absence is ambiguous.

## A safe way to start

You do not need a sophisticated platform to use this pattern. Start with a modest registry and a read-only inventory.

1. Define the statuses your team can actually act on.
2. Inventory only sources you are authorized to inspect.
3. Surface unmatched items without changing or deleting anything automatically.
4. Give each finding an owner and a decision deadline appropriate to its risk.
5. Treat automation references, credentials, customer data, and production dependencies as higher-risk findings that require the right access, review, and change controls.
6. Keep an audit trail of classification decisions and revisit parked work periodically.

The result is not a claim that every old project should be revived or deleted. It is a system that makes the unknown visible enough for a person to decide. That is the tripwire: **unregistered is not a default state. It is work waiting for classification.**

## Related

- [Notes become infrastructure when AI helps everywhere](/blog/notes-become-infrastructure-when-ai-helps-everywhere/): treating shared context as a maintained asset with clear access and ownership
- [The runtime was half dead: migration as audit](/blog/the-runtime-was-half-dead-migration-as-audit/): using a planned change to reveal assumptions that ordinary operations had stopped surfacing
