Case study: a real Word BRD becomes a self-reporting project.
Refuge for Humans is a real C4G product: a 14-section business requirements document written in Word. This is what happened when we ran it through the pipeline, including the parts that failed.
A dense, well-written BRD with invisible gaps.
The document was good by Word-document standards: an executive summary, strategic goals, a success-metrics table, detailed signal specifications, NFRs, and a risk table, and its fourteen sections held real product thinking. What nobody could see from the prose was which requirements had no test, which risks had no owner, and what a reviewer would still need to chase down.
pip install "docassert[convert]" docassert extract "Refuge for Humans BRD.docx" # .docx → plain text, tables includedMapped faithfully, with nothing padded to pass.
The doc-to-pmo skill split the BRD into a proper spine: a project anchor, charter, BRD, PRD, functional & non-functional requirements, a risk register, and test cases. At import that came to 49 traceable items, every reference resolving, all seven business requirements covered. The set has grown since; new scope arrives the same way everything else does here, through a pull request the gate re-checks. Where the source stated a threshold, it became a measurable criterion. Where it didn't, nothing was invented.
- **RFH-BR-001**: The business shall block AI-generated posts before publication at a rate above 95% at steady state. - **RFH-BR-002**: The business shall keep false positives below 2% of genuine human posts.
The audit produced the PM's to-do list.
Run the checks and the invisible gaps become named findings that describe the actual state of the spec:
✗ Missing required frontmatter: 'budget'; dates: 'target' # the BRD names neither✗ RFH-RISK-001…005 missing Probability, Impact, Owner # 5 risks, descriptions only🟠 product requirement covered by an acceptance criterion: 4/10 # six PRs untested
The deployment improved the standard itself.
The first audit blocked the draft charter for its missing budget, but "budget unknown yet" is a legitimate state for a draft. That tension went upstream the same day, into spec v0.2 and docassert 0.7.0, and the standard has distinguished integrity checks, which always block, from completeness checks, which are advisory for drafts and gate the moment a document is proposed. The finding came from real use and shipped back into the standard within a day.
See it running, ambers and all.
The repo is public, the gate is binding, and the dashboard derives its status from the documents on every push. The badge below is live: it turns green when the work does, and no one can set it by hand.
Approved stories became a governed board.
When the user stories were approved, the bridge scaffolded delivery in one pass. Ten product requirements became Feature issues, ten stories became sub-issues beneath them, and every item landed on a Projects board carrying its document id and project. The gate is real: draft stories never reach the board, and the whole structure regenerated idempotently on the second run.
The scope guard proved itself the same day. A test issue titled "Add dark mode" was flagged scope:unverified within seconds of creation, with a comment pointing at the documents as the place scope changes actually happen. The project page now shows a Delivery panel reading from the board beside the document-derived status, and a Feature closes itself when its last story lands.
One template click gives you the gate and the dashboard; one prompt lets Claude convert your existing Word docs the same way.