# `flow:git-attribution-policy` — choose your authorship surface deliberately {#root}

<status stage="doc" state="done" audience="user"/>

@fact:PACKAGE-INSTALLS-A-DELIBERATE-ATTRIBUTION-POSTURE A vibevm `flow` package that installs a **deliberate attribution
posture** for an AI-assisted repository. @status:impl/done

@fact:agents-self-attribute-and-an-undecided-project-drifts Coding agents attribute
themselves by default — trailers in commits, "generated by" lines —
and a project that never decides ends up with an accidental,
inconsistent record: neither a clean human-authored surface nor a
reliable provenance trail. @status:spec/done

@fact:PACKAGE-MAKES-THE-CHOICE-EXPLICIT-AND-ENFORCED This package makes the choice explicit
and enforced. *Explicit ships; enforced does not. `vibe.toml` declares one
`[boot_snippet]` and no executable, so an install writes the snippet and three
documents; the enforcement is `enforcement-checklist.xml`'s pre-push scan — a
fenced shell snippet each project must wire for itself — beside
tool-configuration advice and a periodic-audit line. Searched the whole
consuming tree (`packages/`, `vibedeps/`, `crates/`, `xtask/`, `tools/`,
`spec/`, `discipline/`, `terraform/`, `campaigns/`, `legacy-spec/`, root
scripts) and by name for `.git/hooks/`, `.githooks/`, `.github/` and
`core.hooksPath`: no hook, no CI file, no trailer setting. By this flow's own
law that a policy with no checker is a wish, the «enforced» half is a wish. The
half that does ship is the configuration the checklist calls cheaper than
catching — the boot snippet as the agent's standing instruction — and on this
consumer it holds: zero attribution trailers and one author across 400
commits.* @status:spec/done

@fact:THE-DEFAULT-POSTURE-IS-CONCEALMENT **The default posture is concealment**: the repository presents a
human-authored surface on every artifact. @status:impl/done

@fact:the-honest-rationale-ships-with-the-rule The honest rationale ships
with the rule — some jurisdictions regulate or may regulate machine
authorship of software, and an owner not subject to such regulation
may proactively remove the hook. @status:spec/done

@fact:DISCLOSURE-IS-A-FIRST-CLASS-ALTERNATIVE The open-disclosure posture is
documented as a first-class alternative, and is the *mandatory*
choice where law, employer, or upstream projects require disclosure. @status:spec/done

@fact:VERIFY-BOTH-BEFORE-ADOPTING-THE-DEFAULT Verify both before adopting the default; the protocol tells you how. @status:impl/done

@fact:package-contents-lead This package ships three pieces of content plus a boot snippet: @status:impl/done

- @fact:CONTENT-THE-FULL-POLICY `spec/flows/attribution-policy/ATTRIBUTION-POLICY.xml` — the full
  policy: what attribution governs, the concealment posture and its
  honest rationale, the single-place law, how to instruct an agent,
  and the slip drill. @status:impl/done
- @fact:CONTENT-THE-DISCLOSURE-ALTERNATIVE `spec/flows/attribution-policy/disclosure-alternative.xml` — the
  open posture: when it is mandatory, when it is the better fit,
  what it costs, and how to switch postures forward-only. @status:impl/done
- @fact:CONTENT-THE-ENFORCEMENT-CHECKLIST `spec/flows/attribution-policy/enforcement-checklist.xml` — the
  eight leak surfaces, a pre-push scan, tool configuration, and the
  periodic audit line. @status:impl/done
- @fact:CONTENT-THE-BOOT-SNIPPET `spec/boot/55-flow-attribution-policy.xml` — boot snippet loaded at
  session start: the rule, the honest reason, the scope carve-outs,
  and the never-do list. Under the single-place law, this snippet is
  the one place in a consuming project where the topic lives. @status:impl/done

## Install {#install}

```bash
vibe install flow:git-attribution-policy
```

## Uninstall {#uninstall}

```bash
vibe uninstall flow:git-attribution-policy
```

@fact:UNINSTALL-REMOVES-EVERY-FILE-THE-PACKAGE-WROTE Uninstalling removes every file the package wrote, including the
boot snippet. @status:impl/done

@fact:USER-OWNED-FILES-ARE-NEVER-TOUCHED User-owned files are never touched. @status:impl/done

## Composition {#composition}

- @fact:COMPOSES-ATOMIC-COMMITS `flow:git-atomic-commits` (`30-…`) pins the commit-message format this
  policy scans, and its frozen-history rule governs the
  pushed-slip drill: no history rewrite without owner approval. @status:impl/done
- @fact:COMPOSES-DECISION-RECORDS `flow:decision-records` (`25-…`): the posture choice is a recorded
  decision with a revisit trigger tied to regulation changes. @status:impl/done
- @fact:COMPOSES-WAL `flow:wal` (`10-…`): AI-workflow documents like the WAL protocol
  are explicitly carved out — they organize work and never mark
  artifacts as machine-authored. @status:impl/done

## Philosophical background {#background}

@fact:extracted-from-the-books-aside-on-commit-metadata Extracted from *AI-native development*, chapter 2 («Shared state:
файлы как IPC»), the aside on commit metadata: decide consciously
whether commits may say a model made them, and if the answer is no,
tell the model the true reason. @status:spec/done

@fact:collections-spirit-is-the-redbook The book ships in Russian inside
`flow:redbook` at `spec/book/ru/`. @status:spec/done

## License {#license}

@fact:license-line UPL-1.0. See `LICENSE.md`. @status:impl/done

