Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions config/sources.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"cadence": "daily",
"freshness_sla_hours": 30,
"dashboard_role": "primary",
"presentation": { "preferred_blocks": ["calendar", "list", "notice"] },
"depends_on": [],
"target_path": "data/snapshots/agenda/primary/{YYYY}/{MM}/{YYYY-MM-DD}.json",
"privacy": {
Expand All @@ -35,6 +36,7 @@
"cadence": "daily",
"freshness_sla_hours": 30,
"dashboard_role": "primary",
"presentation": { "preferred_blocks": ["metric-group", "list", "notice"] },
"depends_on": [],
"target_path": "data/snapshots/inbox/attention/{YYYY}/{MM}/{YYYY-MM-DD}.json",
"privacy": {
Expand All @@ -56,6 +58,7 @@
"cadence": "weekdays",
"freshness_sla_hours": 36,
"dashboard_role": "primary",
"presentation": { "preferred_blocks": ["metric-group", "table", "list", "progress", "notice"] },
"depends_on": [],
"target_path": "data/snapshots/work/focus/{YYYY}/{MM}/{YYYY-MM-DD}.json",
"privacy": {
Expand All @@ -77,6 +80,7 @@
"cadence": "daily",
"freshness_sla_hours": 36,
"dashboard_role": "primary",
"presentation": { "preferred_blocks": ["metric-group", "line-chart", "bar-chart", "table", "progress", "notice"] },
"depends_on": [],
"target_path": "data/snapshots/money/pulse/{YYYY}/{MM}/{YYYY-MM-DD}.json",
"privacy": {
Expand All @@ -98,6 +102,7 @@
"cadence": "daily",
"freshness_sla_hours": 24,
"dashboard_role": "primary",
"presentation": { "preferred_blocks": ["list", "timeline", "text", "notice"] },
"depends_on": [],
"target_path": "data/snapshots/news/briefing/{YYYY}/{MM}/{YYYY-MM-DD}.json",
"privacy": {
Expand All @@ -119,6 +124,7 @@
"cadence": "daily",
"freshness_sla_hours": 30,
"dashboard_role": "primary",
"presentation": { "preferred_blocks": ["metric-group", "line-chart", "calendar", "list", "progress", "notice"] },
"depends_on": ["agenda:primary", "inbox:attention", "work:focus", "money:pulse", "news:briefing"],
"target_path": "data/snapshots/overview/daily/{YYYY}/{MM}/{YYYY-MM-DD}.json",
"privacy": {
Expand All @@ -140,6 +146,7 @@
"cadence": "weekly",
"freshness_sla_hours": 192,
"dashboard_role": "primary",
"presentation": { "preferred_blocks": ["metric-group", "line-chart", "list", "progress", "timeline", "notice"] },
"depends_on": ["overview:daily", "agenda:primary", "inbox:attention", "work:focus", "money:pulse", "news:briefing"],
"target_path": "data/snapshots/review/weekly/{YYYY}/{MM}/{YYYY-MM-DD}.json",
"privacy": {
Expand Down
13 changes: 13 additions & 0 deletions data/examples/money/pulse/2026-08-24.json
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,19 @@
"body": "The latest movement remains provisional because one approved source is stale. Missing data is not converted to zero.",
"tone": "warning",
"span": "full"
},
{
"id": "allocation-comparison",
"kind": "bar-chart",
"title": "Synthetic allocation comparison",
"description": "Illustrative categories used to verify the complete renderer contract.",
"span": "full",
"value_format": "percent",
"bars": [
{ "label": "Reserve", "value": 35, "tone": "positive" },
{ "label": "Long-term goals", "value": 45, "tone": "info" },
{ "label": "Near-term plans", "value": 20, "tone": "neutral" }
]
}
]
}
Expand Down
7 changes: 7 additions & 0 deletions data/examples/news/briefing/2026-08-24.json
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,13 @@
"tone": "warning"
}
]
},
{
"id": "editor-note",
"kind": "text",
"title": "Reading note",
"body": "This synthetic briefing favors developments with a concrete decision consequence. Topics without new evidence stay out of the way.",
"span": "full"
}
]
}
Expand Down
4 changes: 2 additions & 2 deletions docs/prompt-studio.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ npm run prompt:create
2. Enter the public code fork and private data repository.
3. Review `<task>.permissions.md`, run the matching command in `<task>.data-repository.md`, then copy `<task>.scheduled-task.md` into your LLM and approve only the listed connections.

The normal wizard chooses registered sources, dependencies, safe blocks, and sensible tool labels for you. Repository names are the only technical concepts in the default path. Use a JSON profile when you need per-source control.
The normal wizard chooses registered sources, dependencies, safe blocks, and sensible tool labels for you. Registered-source visualization guidance comes from `config/sources.json`, so generated prompts cannot drift from the maintained domain contract. Repository names are the only technical concepts in the default path. Use a JSON profile when you need per-source requirements and tool control.

The profile and prompts are ignored by Git. Their directory uses mode `0700` and each file uses mode `0600`. They may still reveal repository names and workflow intent, so treat them as private configuration.

Expand All @@ -41,7 +41,7 @@ The CLI rejects a shared code and data repository unless `allow_same_repository`
- a registered `domain:source` ID
- decision-oriented `requirements`
- the exact approved `tools` available to the scheduled LLM
- one or more `preferred_blocks` from the audited UI contract
- one or more `preferred_blocks` from the audited UI contract (used for a new source; registered sources use the registry's authoritative list)

The preferred block list is a safe menu, not a forced layout. The LLM should choose a line chart only for an ordered trend, a table for exact repeated fields, a calendar for timed events, and no visualization when plain text is clearer.

Expand Down
46 changes: 33 additions & 13 deletions docs/theming.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Zaati OS includes `sage`, `ocean`, `plum`, and `sand`. The interface also suppor

## Custom palette

Set `preset` to `custom` and provide allowlisted six-digit hex tokens. Snapshot producers never control these values.
Set `preset` to `custom` and provide complete light and dark token sets. Validation rejects text pairs below WCAG AA contrast and essential borders or chart colors below 3:1. Snapshot producers never control these values.

```json
{
Expand All @@ -31,18 +31,38 @@ Set `preset` to `custom` and provide allowlisted six-digit hex tokens. Snapshot
"density": "compact",
"radius": "0.7rem",
"custom_tokens": {
"primary": "#315D8A",
"primary_foreground": "#FFFFFF",
"accent": "#E3ECF5",
"accent_foreground": "#1A3E62",
"background": "#F7F9FB",
"foreground": "#152332",
"card": "#FFFFFF",
"border": "#D9E1E8",
"sidebar": "#EEF3F7",
"chart_1": "#315D8A",
"chart_2": "#39705C",
"chart_3": "#9B6338"
"light": {
"primary": "#315D8A",
"primary_foreground": "#FFFFFF",
"accent": "#E3ECF5",
"accent_foreground": "#1A3E62",
"background": "#F7F9FB",
"foreground": "#152332",
"card": "#FFFFFF",
"card_foreground": "#152332",
"border": "#687580",
"sidebar": "#EEF3F7",
"sidebar_foreground": "#152332",
"chart_1": "#315D8A",
"chart_2": "#39705C",
"chart_3": "#9B6338"
},
"dark": {
"primary": "#89B9E8",
"primary_foreground": "#102033",
"accent": "#24384C",
"accent_foreground": "#E7F2FC",
"background": "#101820",
"foreground": "#EDF4FA",
"card": "#17222D",
"card_foreground": "#EDF4FA",
"border": "#74818D",
"sidebar": "#121C25",
"sidebar_foreground": "#EDF4FA",
"chart_1": "#89B9E8",
"chart_2": "#72C59F",
"chart_3": "#E0A873"
}
}
}
```
Expand Down
Loading