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
25 changes: 25 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,28 @@ jobs:

- name: Build canonical documentation in strict mode
run: uv run mkdocs build --strict

design-tokens:
name: Vendored design tokens match openadapt-web
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.12"

# The online half of the palette guard. The offline half runs in
# `pytest tests/` above and needs no network: it pins the digest of each
# vendored copy and fails on a retired palette value in any shipped
# stylesheet, template, script, SVG, or recorded image measurement.
#
# This job is what catches the other direction: a token that changes in
# OpenAdaptAI/openadapt-web while this site keeps serving the old value.
# Failing here is the intended outcome of that drift, not a flake. The
# fix is `python scripts/vendor_design_tokens.py --write`, reviewed and
# committed. Nothing is installed, so it cannot fail on a lock refresh.
- name: Check the vendored tokens against openadapt-web@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: python scripts/vendor_design_tokens.py --check
2 changes: 1 addition & 1 deletion docs/assets/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 13 additions & 8 deletions docs/assets/screenshots/PROVENANCE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ Screenshot provenance
=====================

All screenshots below are rendered from OpenAdapt's own tooling in local /
mock mode. None are mocked-up or hand-drawn. The Cloud captures carry the
visible "LOCAL MOCK MODE" banner because they were taken against the app
running with OPENADAPT_CLOUD_MODE=mock (seeded demo data, no real tenant).
mock mode. None are mocked-up or hand-drawn. Each capture that shows product
chrome is a byte-identical copy of a file in OpenAdaptAI/openadapt-web, which
owns the published visual record for every OpenAdapt surface;
docs/assets/visual-palette.json records the measured dominant colours of every
image on this site.

program-graph-cloud.png
The compiled-program visualizer in the OpenAdapt Cloud workspace
Expand Down Expand Up @@ -34,8 +36,11 @@ settings-governance.png

dashboard-overview.png
The /dashboard overview of the OpenAdapt Cloud workspace at exact commit
f2300ee69b555d1676e69348999f910c1cc8cd8c. Cypress Electron captured the
focused 2560x1440 viewport in OPENADAPT_CLOUD_MODE=mock. It shows grouped
navigation and the visible LOCAL MOCK MODE banner. The fixture is synthetic
OpenEMR patient registration. SHA-256:
ea3b8065cc139f94202ce2422443566ad4fb74f159d0af255e3802f0b7e74a01.
021a9caf99a6832bff9f32e14b1b34d42ec2e290, captured at 2560x1440 with
Playwright Chromium through openadapt-cloud scripts/capture-public-previews.mjs
against the local Cloud mock UI. The runtime-mode banner and the account chip
are hidden during capture because both report the environment the capture ran
in, not the product. The fixture is synthetic OpenEMR patient registration.
Byte-identical source: OpenAdaptAI/openadapt-web,
public/product-preview/dashboard-workflows.png. SHA-256:
f9f894a60e44b266f16b8d138d8747e1a1fb639bf92370db6adbf4d4aab5bde4.
Binary file modified docs/assets/screenshots/dashboard-overview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
87 changes: 55 additions & 32 deletions docs/assets/ui/PROVENANCE.txt
Original file line number Diff line number Diff line change
@@ -1,46 +1,69 @@
Current UI visual provenance
=============================

Every file below is a byte-identical copy of a file in OpenAdaptAI/openadapt-web,
which owns the published visual record for every OpenAdapt surface. That
repository's provenance manifests name the upstream Cloud or Desktop commit
each capture came from. docs/assets/visual-palette.json records the measured
dominant colours of every image on this site, and tests/test_design_tokens.py
fails if a copy stops matching its record.

desktop-qualification-cockpit.png
SHA-256: 14cf86ae66ce91c0255eba74ac2c4fa3b8db188a01eb9c5874e90afe37300f9d
1600 x 1100. Unmodified source: OpenAdaptAI/openadapt-web, Web PR #332
final head 0e57c9ce7c7bd92e37af7e4ca4bf54833d949fe7,
public/desktop-preview/cockpit/10_dashboard_workflows.png. The documentation
copy is byte-identical to that source file. It contains synthetic data.
1600 x 1100. SHA-256:
83b854f7375bea220902bb6fca6d1ca40e31123691c0da4a7f4a435de37da65a.
Source: openadapt-web public/desktop-preview/cockpit/10_dashboard_workflows.png.
Headless Chromium rendered the Desktop React cockpit through
scripts/capture-cockpit-previews.mjs in openadapt-desktop at PR #139 head
d8c08567e42ae45e9687211d757ae3536c97e460, answering the engine IPC surface
from that repository's committed synthetic fixture table. No Tauri window,
engine sidecar, account, Cloud session, recording, physical input, customer
data, or live execution was used. It shows a synthetic local workflow library
with one halted workflow and one verified workflow.

mobile-decision-request.jpg
SHA-256: 6249a4288a807a6f33ec05c3df6f1f52ef169a3ee25edf99feebbd89de37464e
314 x 784. Phone-shell crop from an OpenAdaptAI/openadapt-cloud production
build at component commit f250ef34962e9237e49a3d04b37c6fead3b565f9.
The supported production-browser capture used device scale factor 1. The
files are not post-upscaled.
The retained capture set is in commit
7e462d489b4b9fc249cefb5b70c9a6009c737a0c. The route is
/demo/attention in Cloud PR #276. The data is synthetic OpenEMR application
data.
314 x 784. SHA-256:
c50b46b5febaafafcef2a58e6ec2d9a6c5221a4386bdeacaa3a2f3836886b9b6.
Source: openadapt-web public/attended-decision/identity-request.jpg. Phone
shell at route /demo/attention, captured with Playwright Chromium through
openadapt-cloud scripts/capture-public-previews.mjs against the local Cloud
mock UI at commit 021a9caf99a6832bff9f32e14b1b34d42ec2e290. The runtime-mode
banner is hidden during capture because it reports the environment the
capture ran in, not the product. It shows an open identity request before an
operator answer. The data is synthetic OpenEMR application data.

mobile-decision-pending.jpg
SHA-256: fa616b67e072ed82291b7990e8623bc5d263f64547c5bbd269daf121d77791a5
314 x 784. From the same source and capture sequence as the request. It shows
the decision_pending state. The signed answer was accepted once. No runner
receipt exists, and the workflow remains paused.
314 x 784. SHA-256:
a4d4af28c3627de9356ef1ee09d78137e3a2d530edc3cfa68c0d242299288b46.
Source: openadapt-web public/attended-decision/decision-pending.jpg. From the
same capture sequence as the request. It shows the decision_pending state:
the signed answer was accepted once, no runner receipt exists, and the
workflow remains paused.

mobile-decision-result.jpg
SHA-256: 3096f8b5064a6271894c894e98c15919668a14ef0bd3aa0c59319710d75d69a6
314 x 784. From the same source and capture sequence as the request. It is the
completed runner result with the verified_and_resumed reason code. The data
is synthetic OpenEMR application data.
314 x 784. SHA-256:
e64f5de7ba84457baa5280cfac0cdcfea12f8c38009bd8dfb3443b794ed01042.
Source: openadapt-web public/attended-decision/identity-verified.jpg. From the
same capture sequence as the request. It is the completed runner result with
the verified_and_resumed reason code. The data is synthetic OpenEMR
application data.

business-decision-qualification-capture.png
SHA-256: 1876efdba92d3995cffcdca126d32d9e2493f7e4ffaf46b131f8580c09994862
860 x 3542. Byte-identical source: OpenAdaptAI/openadapt-cloud,
Cloud PR #281 merge commit 176595db43c3bfbf0a0bd4a1100e035e922396c0,
public/demo/qualification-judgment/judgment-capture-request.png. It is a
synthetic qualification capture. It is not a live execution request.
860 x 3240. SHA-256:
013d3dedd76fb02c01a05b06ebfb64da4d51d6ae442f9cd5e2eac0b66126d7e9.
Source: openadapt-web public/qualification-judgment/judgment-capture-human-node.png.
Route /demo/qualification-judgment in openadapt-cloud, captured with
Playwright Chromium through that repository's
scripts/capture-public-previews.mjs at commit
021a9caf99a6832bff9f32e14b1b34d42ec2e290. It is a synthetic qualification
capture. It is not a live execution request.

business-decision-runtime-request.png
SHA-256: cf9ab3f36f6869ec80758ae70ff6aa2466d73615997de5d5eed351d2cdca1a65
520 x 880. Byte-identical source: OpenAdaptAI/openadapt-cloud,
Cloud PR #278 merge commit 167b2f0843229c5938f3d9e97de46f68b66e3476,
public/demo/judgment/business-decision-request.png. It is a synthetic
mobile live-run decision request. It does not report an execution result.
430 x 859. SHA-256:
829347392941e65d8ec2e895cd503a9b600260ed638ddb662e15fcc423b797dd.
Source: openadapt-web public/business-decision/business-decision-request.png.
Route /demo/judgment?view=request in openadapt-cloud at commit
baf08a94e38618c9de4b47cfa85c95750ed51b2a, captured with Playwright Chromium
through that repository's scripts/capture-public-previews.mjs. The shot is
clipped to the phone bezel's border box and carries an alpha channel. It is a
synthetic mobile live-run decision request. It does not report an execution
result.
Binary file modified docs/assets/ui/business-decision-qualification-capture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/ui/business-decision-runtime-request.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/ui/desktop-qualification-cockpit.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/ui/mobile-decision-pending.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/ui/mobile-decision-request.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/ui/mobile-decision-result.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
221 changes: 221 additions & 0 deletions docs/assets/visual-palette.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
{
"$note": "Measured palette of every image docs.openadapt.ai ships. The docs site kept a retired warm palette after the rest of the product moved to the canonical cool one, and nobody could see it: a screenshot's ground reads as 'off-white' either way, and a search for token names finds nothing inside a PNG. So this file records a measurement instead of an opinion. scripts/measure_asset_palette.py writes it; tests/test_design_tokens.py enforces it offline.",
"$cool_rule": "The DOMINANT colour of every image must have blue >= red. The dominant colour is the page ground, and the ground is what makes a capture read warm or cool: the canonical grounds are cool by construction (#FFFFFF, #F5F7FA, #EDF1F6, #0B1220 all satisfy it) and every retired warm ground fails it (#f2f1ec, #fbfaf6, #fdfcf9, #fdfcf8, #f4f3ef, #f4f3ed all have red > blue). The rule needs no allowlist and no warm ground can satisfy it. It deliberately stops at the dominant colour: a warm tint below it is usually --accent-halt doing its job, which is a canonical token, not a retired palette.",
"$provenance": "Each entry names the file in OpenAdaptAI/openadapt-web this copy is byte-identical to. openadapt-web owns the published visual record; that repository's own provenance manifests name the upstream Cloud or Desktop commit each capture came from. The prose descriptions stay in the PROVENANCE.txt beside the images.",
"assets": {
"favicon.ico": {
"source_repository": null,
"source_path": null,
"note": "Neutral greyscale mark. It carries no brand hue in either palette.",
"sha256": "56f16c3d7104a06436643c659cfe360b869633ebe4e1f1d49ac1a90dc0a0f03b",
"width": 48,
"height": 48,
"dominant_colors": [
{
"hex": "#ffffff",
"share_percent": 68.01
},
{
"hex": "#595959",
"share_percent": 4.86
},
{
"hex": "#e9e9e9",
"share_percent": 3.73
}
]
},
"screenshots/dashboard-overview.png": {
"source_repository": "OpenAdaptAI/openadapt-web",
"source_path": "public/product-preview/dashboard-workflows.png",
"sha256": "f9f894a60e44b266f16b8d138d8747e1a1fb639bf92370db6adbf4d4aab5bde4",
"width": 2560,
"height": 1440,
"dominant_colors": [
{
"hex": "#ffffff",
"share_percent": 46.48
},
{
"hex": "#f5f7fa",
"share_percent": 30.14
},
{
"hex": "#fafafa",
"share_percent": 2.51
}
]
},
"screenshots/for-each-program-graph.png": {
"source_repository": null,
"source_path": null,
"note": "Output of `openadapt flow visualize`, not product chrome. It was already neutral and is unchanged by the palette move.",
"sha256": "0a6e524c4066a07c14db8732bd416d1e940e5b525d46c749ee548f1a6b94b244",
"width": 1280,
"height": 455,
"dominant_colors": [
{
"hex": "#ffffff",
"share_percent": 78.27
},
{
"hex": "#f6f8fa",
"share_percent": 10.69
},
{
"hex": "#f7f9fb",
"share_percent": 0.76
}
]
},
"showcase/demo.gif": {
"source_repository": null,
"source_path": null,
"note": "Terminal recording of a replay run on a dark ground, not product chrome.",
"sha256": "cec6464e0e7acabc5c551e047bc906488bcc0be5e8c62a2cc082a21a36e16f7f",
"width": 1272,
"height": 535,
"dominant_colors": [
{
"hex": "#0d0b1e",
"share_percent": 94.68
},
{
"hex": "#0c0a1d",
"share_percent": 0.56
},
{
"hex": "#0b091c",
"share_percent": 0.38
}
]
},
"ui/business-decision-qualification-capture.png": {
"source_repository": "OpenAdaptAI/openadapt-web",
"source_path": "public/qualification-judgment/judgment-capture-human-node.png",
"sha256": "013d3dedd76fb02c01a05b06ebfb64da4d51d6ae442f9cd5e2eac0b66126d7e9",
"width": 860,
"height": 3240,
"dominant_colors": [
{
"hex": "#ffffff",
"share_percent": 21.37
},
{
"hex": "#f5f7fa",
"share_percent": 9.64
},
{
"hex": "#0b1220",
"share_percent": 2.33
}
]
},
"ui/business-decision-runtime-request.png": {
"source_repository": "OpenAdaptAI/openadapt-web",
"source_path": "public/business-decision/business-decision-request.png",
"sha256": "829347392941e65d8ec2e895cd503a9b600260ed638ddb662e15fcc423b797dd",
"width": 430,
"height": 859,
"dominant_colors": [
{
"hex": "#ffffff",
"share_percent": 33.93
},
{
"hex": "#edf1f6",
"share_percent": 18.81
},
{
"hex": "#fdfcfe",
"share_percent": 4.53
}
]
},
"ui/desktop-qualification-cockpit.png": {
"source_repository": "OpenAdaptAI/openadapt-web",
"source_path": "public/desktop-preview/cockpit/10_dashboard_workflows.png",
"sha256": "83b854f7375bea220902bb6fca6d1ca40e31123691c0da4a7f4a435de37da65a",
"width": 1600,
"height": 1100,
"dominant_colors": [
{
"hex": "#f5f7fa",
"share_percent": 75.8
},
{
"hex": "#ffffff",
"share_percent": 16.49
},
{
"hex": "#f8f9fb",
"share_percent": 0.93
}
]
},
"ui/mobile-decision-pending.jpg": {
"source_repository": "OpenAdaptAI/openadapt-web",
"source_path": "public/attended-decision/decision-pending.jpg",
"note": "The second colour, #fdfcf8, is the halt-state card wash derived from the canonical --accent-halt #9A5B0A. It is warm on purpose. The ground above it is #ffffff.",
"sha256": "a4d4af28c3627de9356ef1ee09d78137e3a2d530edc3cfa68c0d242299288b46",
"width": 314,
"height": 784,
"dominant_colors": [
{
"hex": "#ffffff",
"share_percent": 26.33
},
{
"hex": "#fdfcf8",
"share_percent": 16.52
},
{
"hex": "#edf0f5",
"share_percent": 14.03
}
]
},
"ui/mobile-decision-request.jpg": {
"source_repository": "OpenAdaptAI/openadapt-web",
"source_path": "public/attended-decision/identity-request.jpg",
"sha256": "c50b46b5febaafafcef2a58e6ec2d9a6c5221a4386bdeacaa3a2f3836886b9b6",
"width": 314,
"height": 784,
"dominant_colors": [
{
"hex": "#ffffff",
"share_percent": 24.65
},
{
"hex": "#edf0f5",
"share_percent": 7.81
},
{
"hex": "#fbfdfc",
"share_percent": 2.91
}
]
},
"ui/mobile-decision-result.jpg": {
"source_repository": "OpenAdaptAI/openadapt-web",
"source_path": "public/attended-decision/identity-verified.jpg",
"sha256": "e64f5de7ba84457baa5280cfac0cdcfea12f8c38009bd8dfb3443b794ed01042",
"width": 314,
"height": 784,
"dominant_colors": [
{
"hex": "#ffffff",
"share_percent": 21.85
},
{
"hex": "#fbfdfc",
"share_percent": 12.27
},
{
"hex": "#edf0f5",
"share_percent": 11.5
}
]
}
}
}
Loading