{
"acceptance": [
{
"acceptance_id": "follows-system-theme",
"criterion": "Without a manual choice, the app follows the operating-system theme."
},
{
"acceptance_id": "applies-user-override",
"criterion": "A light or dark override applies immediately and survives reload."
},
{
"acceptance_id": "human-chooses-palette",
"authority": "human",
"criterion": "The owner chooses the final dark palette."
},
{
"acceptance_id": "avoids-theme-flash",
"criterion": "The initial render never flashes the incorrect theme."
}
],
"constraints": [
"Reuse the existing settings surface and semantic theme tokens.",
"Keep the final palette choice under human authority."
],
"context": "The task app needs system-aware dark mode. Existing product Context says a deliberate user choice wins over the system default.",
"context_refs": [
{
"ref": ".vibehub/rooms/product/decision-manual-preference-wins.yaml",
"purpose": "Binding precedence rule for the selected theme."
},
{
"ref": ".vibehub/rooms/product/contract-theme-preference.yaml",
"purpose": "Persistence and immediate-application behavior."
}
],
"kind": "ticket",
"maturity": "firm",
"outcome": "Ship system-aware dark mode with one explicit human palette choice.",
"provenance_refs": [
"conversation:demo-dark-mode-request"
],
"relations": [
{
"type": "depends_on",
"target_ticket_id": "vh-201",
"rationale": "Semantic theme tokens must exist first."
},
{
"type": "depends_on",
"target_ticket_id": "vh-202",
"rationale": "Preference persistence must exist first."
}
],
"schema_version": 1,
"ticket_id": "vh-204"
}Stop managing chats. Manage the work.
Turn every coding request into a Ticket with your context.
Add dark mode to this task app. Start this with VibeHub.
One request becomes visible work, with the exact Context needed to do it.
Drag empty canvas to move the graph. Select a Ticket to inspect it.
What is a Ticket?
A Ticket is an executable contract for an Agent: what to achieve, what it depends on, which Context applies, and how completion will be judged.
Select a Ticket to trace its complete causal cone and inspect its contract.
How is context built up?
Rooms are durable product boundaries. Decisions, constraints, and contracts accumulate there; a Ticket references only what it needs, and accepted Outcomes can return new learning.
{
"anchors": [
"src/theme/",
"src/settings/"
],
"boundary": "Product behavior, durable user choices, and the contracts that govern them.",
"description": "The durable product knowledge needed by theme and settings work.",
"kind": "room",
"room_id": "product",
"schema_version": 1,
"stale": false
}A durable choice is made.
→02RoomContext gets a stable home.
→03Ticketcontext_refs bind only what matters.
Accepted learning compounds Context.
Select a Ticket to trace its complete causal cone and inspect its contract.
Evidence before Outcome.
The graph does not call work complete because the Agent stopped talking. Evidence is attached to Acceptance first; an independent Outcome decides what actually happened and returns durable learning to Context.
Select a Ticket to trace its complete causal cone and inspect its contract.
Your work stays yours.
VibeHub keeps Tickets, Context, Evidence, and Outcomes beside your code. Git carries the history; GitHub provides review and collaboration.
The development record lives beside the code.
Every change stays reviewable and reversible.
People and Agents share the same development history.