What Git handles
Git is the backbone of the product tree. Use it for all of the following:Branching product alternatives
Create a branch to explore a different scope, actor, or product approach without affecting the main product truth. Merge if it is accepted; close the branch if it is not.
Reviewing primitive edits
Open a pull request when a primitive changes. Reviewers see exactly which fields changed and can comment on specific lines — the same workflow as a code review.
Merging accepted product truth
A merge into the main branch means the team has accepted the change as product truth. Merges are the authoritative record of decisions.
Forking for experiments
Fork the tree to explore a radically different product direction or to run a spike. Forks can be merged back, used as references, or discarded.
Comparing implementation plans
Use
git diff between branches to compare two milestone plans or two versions of an intent side by side.Auditable decision history
Every accepted primitive edit lives in Git history with author, timestamp, and message. You can reconstruct the product at any point in time.
What the app layer adds
The Ready Room app layers workflow on top of the Git-backed tree. It does not replace Git; it interprets the tree and manages the Git operations for teams that want a UI.| App responsibility | Description |
|---|---|
| Compiled views | Interprets the tree for PM, developer, designer, and customer views |
| Git management | Manages pulls, rebases, commits, and branches on your behalf |
| Local agents | Runs product agents and coding handoff locally |
| Portal targets | Displays local or remote portal targets for publishing views |
| Commit frequency | Configurable commit cadence to match team latency preferences |
Branch conventions
Use feature branches for product experiments and decisions in progress. Merge into the main branch only when a change is accepted product truth.What NOT to commit to Git
Local cache is not product truth and must never be committed to the product tree repository. Add a.gitignore entry for your local cache directory to prevent accidental commits:
When local cache becomes product truth
Local cache is ephemeral by design. When a conversation, agent run, or scratch session produces something durable, it does not go directly into Git. Instead, the app or product agent promotes it into the right primitive type:| Cache content | Promoted to |
|---|---|
| Agreed product decision from a chat | Premise or intent primitive |
| Resolved question from a session | Primitive edit + question card removal |
| Evidence from a discovery run | Evidence summary or artifact ref |
| Coding agent output | Flag status update + completion evidence artifact |
Sensitive and bulky material
The committed product tree stores references to sensitive or bulky content — not the content itself.| Type | What to store instead |
|---|---|
| Secrets and credentials | Vault path or environment variable name |
| Source code excerpts | Snippet artifact ref + path |
| Diffs and patches | Branch name or commit hash |
| Large binary files | Artifact ref with path and hash |
| Raw logs | Evidence summary artifact ref |
privacy: sanitized_fixture in the artifact manifest.
PR review as product review
Treat primitive edits in a pull request the same way you treat code changes. The diff is the product record.Because primitive ids are stable and paths are refactorable, a rename or reorganization commit produces a near-zero-content diff. This makes structural housekeeping easy to review and keeps meaningful product changes distinct in the log.