Security & assurance
Continuously updated evidence from the software itself
In short
Security reviews stall on documentation nobody can vouch for. Git2Docs derives technical documentation from the repository itself — architecture, dependencies, data flows, and the public interface surface — regenerates it on every push, and records on each page where it came from. The result is a description of the system as it is now, rather than as it was when somebody last had time to write about it.
The questionnaire arrives and nobody trusts the answer
A customer's security team sends over a diligence pack. Somewhere in it are questions your documentation should already answer: what the system exposes, what it talks to, what third-party components it pulls in, how data moves through it.
What happens next is familiar. An engineer opens the architecture page, reads two paragraphs, and says some version of "this is from before the split." The answers get reconstructed by hand, from the code, by the people least able to spare the afternoon. Then the reconstruction is pasted into a form and never merged back into the docs, so the next review starts from the same place.
The underlying problem isn't that nobody wrote it down. It's that what was written down has no connection to what shipped. Prose in a repository can describe anything. It stays word-for-word identical whether the system still behaves that way or not.
Documentation became an input, not just an output
There's a newer reason to care, and it has nothing to do with questionnaires.
Coding agents read documentation and act on it. An agent that reads your reference page and writes client code against an endpoint that no longer accepts that parameter has just turned a stale doc into a defect — and, in the other direction, natural-language instructions sitting in a file an agent loads are instructions the agent may follow. The industry spent a decade learning to verify what goes into a build. Documentation is now a machine-consumed input to that build, and almost nobody verifies it.
Which is the structural argument for deriving documentation rather than authoring it. Hand-written prose cannot be checked against anything — there is no reference to compare it to. Content derived from source has one by construction.
What derivation gives you that authoring doesn't
- Coverage measured against the real surface. Generation starts from what the code actually exposes, so the gap between documented and existing is a number rather than a hunch. Undocumented interfaces are the ones that don't get reviewed, threat-modelled, or rate-limited.
- Examples executed, not asserted. Documented commands and API calls are run against your live deployment and mismatches are reported. A quickstart that no longer works is a security problem too — it's the page that teaches people the wrong authentication flow.
- Regeneration on every push. The description can't age independently of the system, because nothing is holding it still. There is no interval during which the docs quietly become fiction.
- Provenance on the page. Generated pages carry their origin in frontmatter — code-derived, validation-filtered — so a reviewer can tell at a glance which content was mechanically derived and which was written by a person. "Who wrote this and when" is the first question any assurance process asks about a document.
The gaps worth looking for
Once documentation is compared against source rather than against its own last revision, a specific class of discrepancy becomes visible. These are worth checking on any codebase, whatever tooling you use:
- Surface in the code but not in the docs. Endpoints and options that exist and ship but were never written up. Nobody reviews what nobody knows is there.
- Surface in the docs but not in the code. The reverse, and increasingly expensive now that agents write client code against documented interfaces.
- Permissions that disagree. The code enforces a scope the page omits, or the page promises one the code never checks.
- Exposure that disagrees. The page says internal; the router says otherwise.
- Credentials in examples. Real keys and tokens pasted into sample requests, which is common and trivially harvestable once published.
- Install snippets pinning old versions. A documented version with a known advisory is a supply-chain instruction your readers follow.
- Missing security-relevant sections. No authentication notes, no rate limits, no error semantics, no data-handling description — the absences a reviewer reads as risk.
What this looks like in practice
- Connect the repository and generate. The first pass is the interesting one: the delta between what exists and what was documented is a direct measurement of how much of your current description is still true.
- Read the coverage figure as a surface-area number, not a docs-quality score. It tells you how much of what you ship has been written down at all.
- Fix what the executed examples flag. These are the fastest wins and usually the most embarrassing.
- Keep authored content authored. Threat models, trust boundaries, and design rationale aren't derivable from source. They belong in the same place, written by people, and they survive regeneration.
- Point reviewers at the published docs rather than rebuilding answers per questionnaire. The page is current because it regenerates, not because somebody remembered to update it before the call.
What this isn't
Clear boundaries, because this is an audience that checks:
- Not a security scanner. Git2Docs documents the system. It does not replace SAST, dependency scanning, DAST, or a penetration test, and it has nothing to say about vulnerabilities in your code.
- Not an assurance of the software's security. Accurate documentation of an insecure design describes it accurately.
- Not a substitute for human review. Derivation removes the drift, not the judgement. Someone still has to decide whether what the system does is what it should do.
- Bounded by the supported languages. TypeScript, JavaScript, Python, Go, Rust, Java, C, C++, and Ruby.
- Bounded by what's in the repository. Infrastructure configured elsewhere, or behaviour that only exists in a deployment pipeline, isn't visible to a tool reading your source.
Frequently asked questions
Does Git2Docs find vulnerabilities in our code?
No. It documents what the code does and reports where the documentation and the code disagree. Vulnerability discovery is the job of scanners and testing, and those tools are good at it — this sits beside them, not in place of them.
How is this different from just keeping our architecture docs up to date?
Mechanically, that's exactly what it is. The difference is what enforces it. A policy that says "update the docs with the change" depends on attention at the busiest moment of a release; derivation from source doesn't depend on anything.
Our threat model and trust boundaries aren't in the code. Where do those live?
In the same documentation, authored by people. Anything representing judgement rather than implementation is written by hand and persists through regeneration. Only the derived material is rewritten.
What does Git2Docs do with our source code?
It reads the repository to generate documentation. Any security review of the product itself should start with the data-handling detail on the security page rather than with a marketing claim — that's the right question to ask of any vendor given repository access.
Can we keep the generated documentation private?
Documentation can be published or kept internal, and output can be organised into separate spaces for different audiences. Access controls and SSO are Enterprise-tier concerns and worth raising directly if a private internal surface is a requirement.
Why does it matter that documentation is machine-readable now?
Because agents act on it. A stale page used to cost a reader ten confused minutes; now it can become code written against an interface that doesn't exist. That changes documentation accuracy from a quality concern into a correctness one.