From 6d08c458b170c35fdffdc714d31ebf4bc3100982 Mon Sep 17 00:00:00 2001 From: abrichr Date: Sun, 2 Aug 2026 18:35:32 +0200 Subject: [PATCH 1/3] =?UTF-8?q?fix(site):=20funnel=20and=20trust=20fixes?= =?UTF-8?q?=20=E2=80=94=20book-a-call=20path,=20dental=20solutions=20page,?= =?UTF-8?q?=20hero=20economics,=20/trust=20redirect,=20star-count=20unific?= =?UTF-8?q?ation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements the verified findings from the 2026-08-02 live-site review: - Book-a-call path: the Cal.com scheduler at /book existed but was unreachable from the funnel. /about promised a "30-minute call" while linking only to the 19-field /qualify form. Add "Book a 30-minute call" secondary CTAs on the homepage hero, /about, /pricing (anchor to the existing booking section), and every /solutions/* page. Add /call as a non-permanent redirect to /book for outreach links. The future-scheduler swap point stays the single constant DEFAULT_BOOKING_URL in utils/booking.js. - /solutions/dental: new positioning page for the active outreach vertical, modeled on /solutions/healthcare. Names the exact workflows (payer-portal insurance eligibility verification, claims status checks into the PMS), the halt-instead-of-wrong-write defense, and the local PHI boundary. Every claim restates copy already published on /dental, /templates/dental-insurance-eligibility, /safety, or /compare. Linked from nav + footer Solutions menus, sitemap.xml, and llms.txt. The priced founding-cohort offer stays on /dental, reached through the template's contextual link; tests/dentalOffer.test.js now pins the positioning/offer distinction with an exact-href match. - Hero economics: new HeroProofStrip under the hero surfaces the /compare numbers (0 model calls on a healthy replay, 7.6x faster median run, $0 vs $0.27 model cost per run), derived from data/benchmark.json with the same formulas as /compare so the surfaces cannot diverge, plus a plain-English line for non-technical visitors. Registered in data/published-version-claims.json attribution_required so the measured-on label cannot be dropped silently. - /trust 404: permanent redirect to /security (the footer already labels it "Trust center"). - Star-count drift: the hero showed "1.7k", the homepage footer "1,662", and pages without server-fetched stats "1,648" (the committed snapshot). All star/fork surfaces now render the same value through one shared one-shot same-origin refresh (utils/useLiveRepositoryStats, /api/repository-stats) with the existing never-downgrade ordering, and the hero uses the same en-US formatting as the footer. No timers, and never api.github.com from a visitor's browser. - /execute: reword the missing-timeline fallback so it reads as the design property it is (phases come only from the exported run timeline, never inferred from playback) instead of a broken demo, and unify the CTA label to the site-wide "Qualify one workflow". Co-Authored-By: Claude Fable 5 --- components/Footer.js | 18 ++- components/HeroProofStrip.js | 83 +++++++++++++ components/MastHead.js | 27 +++- components/NavHeader.js | 1 + components/Pricing.js | 17 ++- components/RdpHybridPresentation.js | 6 +- data/published-version-claims.json | 4 + pages/about.js | 14 ++- pages/call.js | 18 +++ pages/execute.js | 6 +- pages/index.js | 2 + pages/solutions/dental.js | 186 ++++++++++++++++++++++++++++ pages/solutions/healthcare.js | 18 +-- pages/solutions/insurance.js | 18 +-- pages/solutions/lending.js | 18 +-- pages/trust.js | 16 +++ public/llms.txt | 1 + public/sitemap.xml | 6 + tests/dentalOffer.test.js | 9 +- utils/useLiveRepositoryStats.js | 45 +++++++ 20 files changed, 460 insertions(+), 53 deletions(-) create mode 100644 components/HeroProofStrip.js create mode 100644 pages/call.js create mode 100644 pages/solutions/dental.js create mode 100644 pages/trust.js create mode 100644 utils/useLiveRepositoryStats.js diff --git a/components/Footer.js b/components/Footer.js index a366ab7d..40839d69 100644 --- a/components/Footer.js +++ b/components/Footer.js @@ -15,6 +15,7 @@ import { BLOG_LINK, DEVELOPER_LINKS } from 'data/developerLinks' import { track, EVENTS } from 'utils/analytics' import repositoryStatsView from 'utils/repositoryStatsView' import repositoryStatsSelection from 'utils/repositoryStatsSelection' +import useLiveRepositoryStats from 'utils/useLiveRepositoryStats' import styles from './Footer.module.css' const { sourceLabel } = repositoryStatsView @@ -56,8 +57,10 @@ function ForkOcticon() { ) } -// Repository counts refresh at build/ISR time. A visitor does not need a -// repeating timer or a client-side fetch for a value that changes over hours. +// Repository counts server-render from build/ISR data, then converge through +// one shared same-origin refresh (utils/useLiveRepositoryStats) so every page +// shows the same number. No repeating timer, and never api.github.com from a +// visitor's browser. function RepositorySource({ stats }) { const label = sourceLabel(stats, Date.now()) return ( @@ -134,9 +137,9 @@ export default function Footer({ }) { const currentYear = new Date().getFullYear() const qualificationHref = '/qualify' - const stats = validStats(repositoryStats) - ? repositoryStats - : OPENADAPT_STATS_SNAPSHOT + const stats = useLiveRepositoryStats( + validStats(repositoryStats) ? repositoryStats : OPENADAPT_STATS_SNAPSHOT + ) return (
@@ -275,6 +278,11 @@ export default function Footer({ Healthcare +
  • + + Dental + +
  • Lending diff --git a/components/HeroProofStrip.js b/components/HeroProofStrip.js new file mode 100644 index 00000000..17feae47 --- /dev/null +++ b/components/HeroProofStrip.js @@ -0,0 +1,83 @@ +import Link from 'next/link' + +import benchmark from '../data/benchmark.json' +import { ATTRIBUTION_SHORT } from '../lib/benchmarkProvenance' + +/* + * Compact run-economics strip directly under the hero. + * + * The sharpest published numbers on this site sat only on /compare; a visitor + * who never clicked through left without them. This strip surfaces the same + * three figures beside the hero, derived from data/benchmark.json with the + * same formulas as /compare's charts, so the two surfaces cannot state + * different numbers. Registered in data/published-version-claims.json under + * attribution_required: the ATTRIBUTION_SHORT chip below must stay next to + * the figures. + * + * Scope stays honest: these are measured MockMed benchmark results, labelled + * as such, with the full method, samples, and caveats one click away. + */ +const mm = benchmark.mockmed + +const speedup = (mm.agent.wall_s_p50 / mm.compiled.wall_s_p50).toFixed(1) +const agentCost = `$${mm.agent.cost_usd_per_run.toFixed(2)}` + +const STATS = [ + { + figure: `${mm.compiled.model_calls_per_run} model calls`, + caption: 'on a healthy replay', + }, + { + figure: `${speedup}× faster`, + caption: 'median run vs. a computer-use agent', + }, + { + figure: `$0 vs ${agentCost}`, + caption: 'model cost per run', + }, +] + +export default function HeroProofStrip() { + return ( +
    +
    +

    + Show it once. It runs the same way every time. If anything + looks wrong, it stops and asks a person instead of + guessing. +

    +
    + {STATS.map((stat) => ( +
    +

    + {stat.figure} +

    +

    + {stat.caption} +

    +
    + ))} +
    +

    + {ATTRIBUTION_SHORT} + + Measured on the MockMed benchmark, reproducible from + source. + + + Method, samples, and caveats → + +

    +
    +
    + ) +} diff --git a/components/MastHead.js b/components/MastHead.js index 4cd587ac..6ec77bcf 100644 --- a/components/MastHead.js +++ b/components/MastHead.js @@ -4,13 +4,15 @@ import Link from 'next/link' import ReplayHero from '@components/ReplayHero' import AttendedDecisionPreview from '@components/AttendedDecisionPreview' import { track, EVENTS } from 'utils/analytics' +import useLiveRepositoryStats from 'utils/useLiveRepositoryStats' import styles from './MastHead.module.css' -const formatStars = (n) => - n >= 1000 ? `${(n / 1000).toFixed(1).replace(/\.0$/, '')}k` : String(n) - -export default function Home({ githubStats }) { +export default function Home({ githubStats: initialGithubStats }) { + // Same live source and same en-US formatting as the footer, so the hero + // and the footer can never show two different star counts for the same + // repository on the same page view. + const githubStats = useLiveRepositoryStats(initialGithubStats) return (
    @@ -40,7 +42,10 @@ export default function Home({ githubStats }) { style={{ border: '1px solid var(--hairline)' }} > - {formatStars(githubStats.stars)} stars on OpenAdapt + {githubStats.stars.toLocaleString( + 'en-US' + )}{' '} + stars on OpenAdapt · {githubStats.forks} forks @@ -76,6 +81,18 @@ export default function Home({ githubStats }) { > Qualify one workflow + + track(EVENTS.HERO_CTA_CLICK, { + cta: 'book_call', + }) + } + > + Book a 30-minute call + - - Qualify one workflow - +
    + + Qualify one workflow + + + Book a 30-minute call + +
      diff --git a/components/RdpHybridPresentation.js b/components/RdpHybridPresentation.js index f0f4f8ce..1bbaa570 100644 --- a/components/RdpHybridPresentation.js +++ b/components/RdpHybridPresentation.js @@ -3,8 +3,12 @@ import { useEffect, useMemo, useRef, useState } from 'react' import JsonArtifactLink from './JsonArtifactLink' import styles from './RdpHybridPresentation.module.css' +// Rendered when a viewer opens the raw video without its exported timeline. +// This states a design property, not an error: phase annotations come only +// from the run's exported timeline, so without it OpenAdapt shows the +// authenticated recording as-is rather than guessing phases from playback. const MISSING_TIMELINE = - 'The media timeline is unavailable. OpenAdapt shows the authenticated video and artifacts, but it does not infer a phase from playback time.' + 'By design, OpenAdapt never infers a workflow phase from playback time. Phase annotations come from the exported run timeline; here the authenticated video and artifacts are shown as recorded.' // These labels explain exact renderer phases. Runtime facts stay in the // exported timeline and are never reconstructed from playback time. diff --git a/data/published-version-claims.json b/data/published-version-claims.json index 4c9a72bd..6a1dd6a8 100644 --- a/data/published-version-claims.json +++ b/data/published-version-claims.json @@ -77,6 +77,10 @@ "file": "components/ProofBand.js", "context": "Measured on Flow {benchmark.provenance.flow_version}," }, + { + "file": "components/HeroProofStrip.js", + "context": "{ATTRIBUTION_SHORT}" + }, { "file": "pages/research.js", "context": "" diff --git a/pages/about.js b/pages/about.js index e843b10b..6d02dd0c 100644 --- a/pages/about.js +++ b/pages/about.js @@ -174,12 +174,14 @@ export default function AboutPage() { oracle, execution boundary, and fastest path to a production deployment.

      - - Evaluate a workflow - +
      + + Book a 30-minute call + + + Evaluate a workflow + +
  • diff --git a/pages/call.js b/pages/call.js new file mode 100644 index 00000000..b9051c26 --- /dev/null +++ b/pages/call.js @@ -0,0 +1,18 @@ +// Redirect stub: /call is the low-friction "talk to a human" path used in +// outreach. The canonical scheduler page is /book, which embeds the Cal.com +// destination defined in utils/booking.js (DEFAULT_BOOKING_URL) — change the +// scheduler there, not here. Non-permanent so this route can later become its +// own page without fighting cached 308s. Redirect stubs stay out of +// sitemap.xml and llms.txt (tests/aiDiscoverability.test.js enforces this). +export default function CallPage() { + return null +} + +export function getServerSideProps() { + return { + redirect: { + destination: '/book', + permanent: false, + }, + } +} diff --git a/pages/execute.js b/pages/execute.js index 55d4435b..b1faa491 100644 --- a/pages/execute.js +++ b/pages/execute.js @@ -13,7 +13,7 @@ const description = const STEPS = [ { number: '01', - title: 'Qualify one transaction', + title: 'Qualify one workflow', body: 'We bind the intended inputs, identity checks, effect proof, target environment, and exception path to one workflow version.', }, { @@ -67,7 +67,7 @@ export default function ExecutePage() {

    - Qualify one transaction + Qualify one workflow Discuss an OEM integration @@ -191,7 +191,7 @@ export default function ExecutePage() { We qualify the first workflow with your team. That creates the reusable execution contract, customer-runner plan, mobile operator decision path, and evidence needed to scale it through your product.

    - Qualify one transaction + Qualify one workflow Talk to partnerships
    diff --git a/pages/index.js b/pages/index.js index 2f07f670..d40adf41 100644 --- a/pages/index.js +++ b/pages/index.js @@ -6,6 +6,7 @@ import CustomerCaseStudy from '@components/CustomerCaseStudy' import DashboardShowcase from '@components/DashboardShowcase' import FinalQualificationCta from '@components/FinalQualificationCta' import Footer from '@components/Footer' +import HeroProofStrip from '@components/HeroProofStrip' import HowItWorksCondensed from '@components/HowItWorksCondensed' import MastHead from '@components/MastHead' import ProductStatus from '@components/ProductStatus' @@ -157,6 +158,7 @@ export default function Home({ githubStats, hostedOffer }) { /> +
    diff --git a/pages/solutions/dental.js b/pages/solutions/dental.js new file mode 100644 index 00000000..d5d82cb8 --- /dev/null +++ b/pages/solutions/dental.js @@ -0,0 +1,186 @@ +import Head from 'next/head' +import Link from 'next/link' + +import Footer from '@components/Footer' + +/* + * Dental positioning page, modeled on /solutions/healthcare. + * + * This is the evergreen vertical page for the active dental outreach: it + * names the exact front-desk workflows, the halt-instead-of-wrong-write + * safety story, and the local data boundary, then routes to /qualify and + * /book. The priced founding-cohort offer stays on /dental and is reached + * through the dental template's contextual managed-offer link — this page + * deliberately does not promote the capacity-bounded offer directly (see + * tests/dentalOffer.test.js for that information-architecture decision). + * + * Every claim here restates copy already published on /dental, + * /templates/dental-insurance-eligibility, /safety, or /compare. No + * competitor names, no customer names, no pricing. + */ +export default function DentalSolutionsPage() { + return ( +
    + + Dental Front-Desk Automation: Insurance Eligibility & Claims Status | OpenAdapt + + + + + + + +
    +

    + Dental practice execution +

    +

    + Automate the payer-portal work behind your front desk. +

    +

    + Insurance eligibility verification and claims status checks + are the workflows a dental front desk repeats dozens of + times a day: sign in to the payer portal, look up the + patient, read coverage and benefits or the claim state, + and carry the answer into the practice management system. + OpenAdapt compiles that exact workflow from a recording of + your own team and replays it on your front-desk computer. +

    +

    + Those hours of phone and portal time each week are the + cost of work that never needed a person once it was shown + correctly. Your staff open and supervise the sessions; + OpenAdapt does the re-keying, and anything it cannot + verify lands in a queue for a person to finish. +

    +
    + + Qualify one workflow + + + Book a 30-minute call + +
    +
    + +
    +

    + The workflows, exactly +

    +
      +
    • + + Insurance eligibility verification. + {' '} + Sign in to the payer portal, look up the patient by + member ID and date of birth, open the coverage and + benefits view, and record the eligibility result where + your workflow puts it — the PMS, a worksheet, or the + schedule. Credentials are secret parameters, never + written to the recording. +
    • +
    • + + Claims status checks. + {' '} + Look up a submitted claim in the payer portal, read + its current state, and carry the status into the PMS + record your billing follow-up already works from. +
    • +
    +

    + + See the eligibility workflow step by step → + +

    + +
    +

    The wrong-patient defense

    +

    + It halts instead of writing a wrong record. +

    +

    + Every compiled step carries identity checks derived + from the demonstration. The program verifies it is + looking at the right member before it reads or writes + anything, and when the portal or the PMS shows + something it never saw demonstrated, it halts and + puts the case in a ready-to-finish queue instead of + guessing. The public safety gallery shows the exact + look-alike record cases behind this defense. +

    +

    + + See the wrong-patient defense → + + + Review the runtime safety model → + +

    +
    + +
    +

    + Patient data stays inside your boundary +

    +

    + Original recordings stay local, and live observations + can contain PHI, so dental workflows run on a + practice-controlled machine — the same front-desk + computer your staff already use, inside portal + sessions your staff open and supervise. Healthy runs + make no model calls, so routine verifications also + send nothing to a model. +

    +

    + + See the run economics on /compare → + +

    +
    + +
    +

    + Put one front-desk workflow into production +

    +

    + Bring the payer portals you check most, your PMS and + its version, weekly volume, and the exceptions your + staff handle today. We'll map the deployment + boundary, shadow run, and supervised rollout. +

    +
    + + Qualify one workflow + + + Book a 30-minute call + +
    +
    +
    + +
    +
    + ) +} diff --git a/pages/solutions/healthcare.js b/pages/solutions/healthcare.js index d728457e..5a47bfb3 100644 --- a/pages/solutions/healthcare.js +++ b/pages/solutions/healthcare.js @@ -61,10 +61,10 @@ export default function HealthcarePage() { Qualify one workflow - Back to home + Book a 30-minute call
    @@ -155,12 +155,14 @@ export default function HealthcarePage() { oracle. We'll map the deployment boundary, shadow run, and supervised production rollout.

    - - Qualify one workflow - +
    + + Qualify one workflow + + + Book a 30-minute call + +
    diff --git a/pages/solutions/insurance.js b/pages/solutions/insurance.js index 93f409f2..c23d3275 100644 --- a/pages/solutions/insurance.js +++ b/pages/solutions/insurance.js @@ -48,10 +48,10 @@ export default function InsurancePage() { Qualify one workflow - Back to home + Book a 30-minute call @@ -104,12 +104,14 @@ export default function InsurancePage() { record that proves its outcome. We'll map the deployment, verification, shadow run, and supervised rollout.

    - - Qualify one workflow - +
    + + Qualify one workflow + + + Book a 30-minute call + +
    diff --git a/pages/solutions/lending.js b/pages/solutions/lending.js index dae8d2fb..4b4836a6 100644 --- a/pages/solutions/lending.js +++ b/pages/solutions/lending.js @@ -42,10 +42,10 @@ export default function LendingPage() { Qualify one workflow - Back to home + Book a 30-minute call @@ -102,12 +102,14 @@ export default function LendingPage() { that proves its outcome. We'll map the deployment, verification, shadow run, and supervised rollout.

    - - Qualify one workflow - +
    + + Qualify one workflow + + + Book a 30-minute call + +
    diff --git a/pages/trust.js b/pages/trust.js new file mode 100644 index 00000000..b813d38b --- /dev/null +++ b/pages/trust.js @@ -0,0 +1,16 @@ +// Redirect stub: /trust is a common guess for the trust center, which lives +// at /security (the footer labels it "Trust center"). Keep this a redirect so +// external links and typed URLs never 404. Redirect stubs stay out of +// sitemap.xml and llms.txt (tests/aiDiscoverability.test.js enforces this). +export default function TrustPage() { + return null +} + +export function getServerSideProps() { + return { + redirect: { + destination: '/security', + permanent: true, + }, + } +} diff --git a/public/llms.txt b/public/llms.txt index 2c3ee945..8002be63 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -58,6 +58,7 @@ Availability below is the released capability. It is distinct from the deploymen ## Where it is used - [Healthcare Execution Infrastructure](https://openadapt.ai/solutions/healthcare): Governed last-mile execution for RCM vendors, healthcare BPOs, automation teams, and vertical-software companies that already have structured input and business logic. +- [Dental Front-Desk Automation](https://openadapt.ai/solutions/dental): Insurance eligibility verification and claims status checks compiled from a practice's own demonstration, replayed locally on the front-desk computer, halting instead of writing a wrong record. - [Lending Operations](https://openadapt.ai/solutions/lending): A demonstrated Frappe Lending workflow compiled into model-free replay and checked against independent REST and SQL effect oracles. - [Insurance Claims Execution](https://openadapt.ai/solutions/insurance): A demonstrated openIMIS claims-intake workflow compiled into model-free replay and checked against a direct SQL claim-row oracle. - [Dental front-desk eligibility](https://openadapt.ai/dental): Payer-portal verification that runs on the practice's own front-desk PC. diff --git a/public/sitemap.xml b/public/sitemap.xml index c3e2b7ec..b811c9dd 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -18,6 +18,12 @@ monthly 0.8 + + https://openadapt.ai/solutions/dental + 2026-08-02 + monthly + 0.8 + https://openadapt.ai/customers/rvu-audit-heart-care 2026-07-24 diff --git a/tests/dentalOffer.test.js b/tests/dentalOffer.test.js index 74969835..e9d7d32d 100644 --- a/tests/dentalOffer.test.js +++ b/tests/dentalOffer.test.js @@ -138,7 +138,10 @@ test('dental is discoverable to crawlers and AI search without a nav entry', () assert.match(templates, /managedOffer/) assert.match(templates, /href: '\/dental'/) - // Not in primary nav, not in the footer. - assert.doesNotMatch(nav, /\/dental/) - assert.doesNotMatch(footer, /\/dental/) + // Not in primary nav, not in the footer. The /solutions/dental + // POSITIONING page may appear in both (it is a Solutions page like + // healthcare/lending/insurance); the priced /dental OFFER page may not, + // so match the exact quoted href rather than the substring. + assert.doesNotMatch(nav, /'\/dental'|"\/dental"/) + assert.doesNotMatch(footer, /'\/dental'|"\/dental"/) }) diff --git a/utils/useLiveRepositoryStats.js b/utils/useLiveRepositoryStats.js new file mode 100644 index 00000000..ab3ab05f --- /dev/null +++ b/utils/useLiveRepositoryStats.js @@ -0,0 +1,45 @@ +import { useEffect, useState } from 'react' + +import repositoryStatsSelection from './repositoryStatsSelection' + +const { newerStats, validStats } = repositoryStatsSelection + +/* + * One shared source for the repository counts a visitor sees. + * + * Pages that server-render fresh stats (the homepage) and pages that only + * carry the committed snapshot (about, solutions, …) previously displayed + * different star counts for the same repository at the same moment. Every + * surface now renders the server-provided value first, then converges through + * a single one-shot fetch of the same-origin cache at /api/repository-stats. + * + * This is deliberately NOT a timer and NOT a GitHub API call: + * tests/publicTruth.test.js forbids visitor browsers from calling + * api.github.com, and the same-origin endpoint is CDN-cached. The + * "never downgrade fresh data" ordering lives in + * utils/repositoryStatsSelection.js, so a stale response can never replace a + * newer server-rendered value. + */ +export default function useLiveRepositoryStats(initial) { + const [stats, setStats] = useState(initial) + + useEffect(() => { + let cancelled = false + fetch('/api/repository-stats', { + headers: { Accept: 'application/json' }, + }) + .then((response) => (response.ok ? response.json() : null)) + .then((next) => { + if (cancelled || !validStats(next)) return + setStats((current) => newerStats(current, next)) + }) + .catch(() => { + // The server-rendered value stays; a miss is fail-safe. + }) + return () => { + cancelled = true + } + }, []) + + return validStats(stats) ? stats : initial +} From cb2788ff59537fceecc9281def6bdd2e1940bfc6 Mon Sep 17 00:00:00 2001 From: abrichr Date: Sun, 2 Aug 2026 18:38:43 +0200 Subject: [PATCH 2/3] chore: refresh status manifest and version-claims registry for launcher 1.10.4 / flow 1.28.0 Main's scheduled Published-version-claims run went red at 2026-08-02 14:44 UTC after today's flow 1.28.0 and launcher 1.10.4 releases. Re-acknowledge the frozen headline-benchmark lag (73 -> 74) following the 2026-07-31 precedent; review_by stays 2026-10-31. Co-Authored-By: Claude Fable 5 --- data/published-version-claims.json | 18 +++++++++--------- public/status.json | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/data/published-version-claims.json b/data/published-version-claims.json index 6a1dd6a8..634c7aab 100644 --- a/data/published-version-claims.json +++ b/data/published-version-claims.json @@ -32,8 +32,8 @@ "id": "status-manifest-component-versions", "kind": "pypi-latest", "source_of_truth": "public/status.json#/versions", - "verified_on": "2026-08-01", - "evidence": "Published package and GitHub release records on 2026-08-01: openadapt 1.10.3, openadapt-flow 1.27.1, openadapt-capture 1.2.2, openadapt-desktop 0.15.0.", + "verified_on": "2026-08-02", + "evidence": "Published package and GitHub release records on 2026-08-02: openadapt 1.10.4, openadapt-flow 1.28.0, openadapt-capture 1.2.2, openadapt-desktop 0.15.0.", "packages": { "launcher": "openadapt", "flow": "openadapt-flow", @@ -41,8 +41,8 @@ "desktop": "openadapt-desktop" }, "versions": { - "launcher": "1.10.3", - "flow": "1.27.1", + "launcher": "1.10.4", + "flow": "1.28.0", "capture": "1.2.2", "desktop": "0.15.0" } @@ -57,12 +57,12 @@ "evidence": "openadapt-flow cbec44c2c2f355d5cc04a72ea9267e2d6ea68ac6 declares version = \"0.1.0\" in pyproject.toml and describes as v0.1.0-24-gcbec44c; v0.2.0 (2026-07-11) is the first release tag containing it.", "verified_on": "2026-07-27", "acknowledged_release_lag": { - "as_of_release": "1.27.1", - "releases_behind": 73, - "minor_releases_behind_first_containing_tag": 25, - "acknowledged_on": "2026-07-31", + "as_of_release": "1.28.0", + "releases_behind": 74, + "minor_releases_behind_first_containing_tag": 26, + "acknowledged_on": "2026-08-02", "review_by": "2026-10-31", - "note": "73 live openadapt-flow releases postdate 0.1.0, and v0.2.0 -- the first release tag containing the pinned commit -- is 25 minor releases behind 1.27.1. That is recorded, labelled on every surface that renders them, and deliberately NOT edited -- these are historical measurements. The lag may not grow past the acknowledged value without a decision, and the acknowledgement expires on review_by so it cannot be renewed by silence. Refreshing means re-running the benchmarks: MockMed is deterministic and CI-reproducible; OpenEMR runs against a shared public demo that resets daily, so its refresh is a field run whose numbers will legitimately differ. Re-acknowledged on 2026-07-31 for v1.27.1 (70 -> 73). review_by is deliberately UNCHANGED at 2026-10-31: restating the count is not a decision to keep waiting, and this acknowledgement must still expire on its original date." + "note": "74 live openadapt-flow releases postdate 0.1.0, and v0.2.0 -- the first release tag containing the pinned commit -- is 26 minor releases behind 1.28.0. That is recorded, labelled on every surface that renders them, and deliberately NOT edited -- these are historical measurements. The lag may not grow past the acknowledged value without a decision, and the acknowledgement expires on review_by so it cannot be renewed by silence. Refreshing means re-running the benchmarks: MockMed is deterministic and CI-reproducible; OpenEMR runs against a shared public demo that resets daily, so its refresh is a field run whose numbers will legitimately differ. Re-acknowledged on 2026-08-02 for v1.28.0 (73 -> 74). review_by is deliberately UNCHANGED at 2026-10-31: restating the count is not a decision to keep waiting, and this acknowledgement must still expire on its original date." }, "attribution_required": [ { diff --git a/public/status.json b/public/status.json index edef5d28..4468b0a2 100644 --- a/public/status.json +++ b/public/status.json @@ -1,10 +1,10 @@ { "$comment": "Canonical machine-readable release, capability, evidence, and deployment status for OpenAdapt. Served at https://openadapt.ai/status.json and consumed by status-aware public surfaces and tests. OpenAdapt is one Beta product across browser, Windows, macOS, Linux, RDP, and Citrix/VDI. Capability availability is distinct from the deployment boundary and from the bounded evidence scope recorded for each substrate.", - "generated_at": "2026-08-01", + "generated_at": "2026-08-02", "product_lifecycle": "Beta", "versions": { - "launcher": "1.10.3", - "flow": "1.27.1", + "launcher": "1.10.4", + "flow": "1.28.0", "capture": "1.2.2", "desktop": "0.15.0" }, From aefef7e2a267c8794bdfd0b5c959201bd231f411 Mon Sep 17 00:00:00 2001 From: abrichr Date: Sun, 2 Aug 2026 18:41:12 +0200 Subject: [PATCH 3/3] chore: align llms.txt current-version lines with refreshed status manifest Co-Authored-By: Claude Fable 5 --- public/llms-full.txt | 2 +- public/llms.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/llms-full.txt b/public/llms-full.txt index 206edfc9..e59a123b 100644 --- a/public/llms-full.txt +++ b/public/llms-full.txt @@ -78,7 +78,7 @@ control plane is a separate commercial product. - Engine source: https://github.com/OpenAdaptAI/openadapt-flow - Install route: https://github.com/OpenAdaptAI/OpenAdapt and `pip install openadapt` -- Current published versions: launcher 1.10.3, Flow 1.27.1, capture 1.2.2, desktop 0.15.0 +- Current published versions: launcher 1.10.4, Flow 1.28.0, capture 1.2.2, desktop 0.15.0 - Product lifecycle: Beta --- diff --git a/public/llms.txt b/public/llms.txt index 8002be63..32988b9f 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -9,7 +9,7 @@ OpenAdapt is for the case where the work is repetitive and consequential, the in ## Canonical machine-readable status - [status.json](https://openadapt.ai/status.json): The single source of truth for product lifecycle, released component versions, per-substrate availability, delivery boundary, and the linked acceptance evidence for each substrate. Public surfaces render their labels from this file. Prefer it over any prose on this site if the two ever disagree. -- Current published versions: launcher 1.10.3, Flow (compiler/runtime) 1.27.1, capture 1.2.2, desktop 0.15.0. Product lifecycle: Beta. +- Current published versions: launcher 1.10.4, Flow (compiler/runtime) 1.28.0, capture 1.2.2, desktop 0.15.0. Product lifecycle: Beta. ## Execution substrates and their evidence boundary