From 45199ffd03d59e4e45dfaaa6b0c40b791c9ce53a Mon Sep 17 00:00:00 2001 From: "K. C. Ramakrishna" Date: Sun, 1 Nov 2026 07:10:46 +0530 Subject: [PATCH] feat: PROD store name is "Universal Digital Assistant by Nistapp (UDAN)" Manifest name (and the unused manifest-firefox.json copy) change from "Universal Digital Assistant (UDA) Beta" to the new 45-character product name. TEST zip name ("UDA TEST"), default_title, icons, version, permissions and tier.json contract are unchanged. Listing draft gets the new title; README names the PROD item. Co-Authored-By: Claude Sonnet 5.5 --- README.md | 6 +++--- docs/store-listing-draft.md | 4 ++++ public/manifest-firefox.json | 2 +- public/manifest.json | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9b25df4a3..1e7745c8d 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ One bundle serves both backends. The extension decides when it starts, first mat | 4 | Install type: an **unpacked** install (`chrome.management.getSelf().installType === 'development'`) is TEST, any other install is PROD | Needs no extra permission; background service worker only | | 5 | Default: PROD | Same as the SDK | -**Tier stamp.** The stamp is the default tier of a store install, so the TEST store item ("UDA TEST") and the PROD item run the same code and differ only in this default. A stamp `TEST` **locks** the extension to TEST: the options page hides the PROD choice, and a PROD request from the options override or from a host page is ignored (the worker and the page side both check). A stamp `PROD` accepts the overrides as before. Without a stamp nothing changes: an unpacked development build (the `test-current` zip has no stamp) is TEST, anything else is PROD. A stamped zip that is loaded unpacked follows its stamp (a PROD-stamped zip gives PROD), so the file you unpack declares its tier. The stamp holds no secret and no URL; the URLs still come from the build settings. The `source` reported by the options page and by `UDASdkReady` is `stamp` when the stamp decided. +**Tier stamp.** The stamp is the default tier of a store install, so the TEST store item ("UDA TEST") and the PROD item ("Universal Digital Assistant by Nistapp (UDAN)") run the same code and differ only in this default. A stamp `TEST` **locks** the extension to TEST: the options page hides the PROD choice, and a PROD request from the options override or from a host page is ignored (the worker and the page side both check). A stamp `PROD` accepts the overrides as before. Without a stamp nothing changes: an unpacked development build (the `test-current` zip has no stamp) is TEST, anything else is PROD. A stamped zip that is loaded unpacked follows its stamp (a PROD-stamped zip gives PROD), so the file you unpack declares its tier. The stamp holds no secret and no URL; the URLs still come from the build settings. The `source` reported by the options page and by `UDASdkReady` is `stamp` when the stamp decided. The URLs for the chosen environment come, per key, from the page (`apiBaseUrl`, `tokenUrl`, `llmUrl`, `keycloakUrl`), then from the build settings above, then from the SDK's own defaults. A key the page set is never overwritten. When the environment (or a backend, realm or client setting) changes while the panel is open, the panel drops the stored session of the old backend, asks the worker for the session again and runs the search again; no page reload is needed. This is `AuthContext` listening to `UDAConfigUpdated`. The Client never calls `authManager.init` (sign-in runs in the worker), so there is nothing else to re-run. @@ -172,7 +172,7 @@ Branch from `dev` and open a PR into `dev`; the PR title must be a [Conventional - Zip: `udan-extension-.zip`, plus `SHA256SUMS` and `build-info.json` (commit, branch, run, attempt, config hash, SDK version and integrity, names of the env keys that were set). Same commit, run number, attempt and build configuration give the same bytes. - Version: CI stamps the built manifest with `version = X.Y.Z.` and `version_name = "X.Y.Z () run . cfg "`. X.Y.Z comes from `package.json` (Release Please owns it); the run number makes each build higher than the last. `version_name` is the build identity: a re-run of the same CI run (new attempt, e.g. after fixing an Actions variable) or any changed build setting changes it, while `version` stays. The config hash is 8 hex of a sha256 over the build settings the bundle inlines (`node scripts/build-env.js production --hash`); the values are not recoverable from it. The source manifests only hold the base version, for local builds. -- Store zips: the same run also writes the two Chrome Web Store zips, `udan-extension--store-test.zip` (for the unlisted TEST item "UDA TEST") and `udan-extension--store-prod.zip` (for the PROD item), each with its line in `SHA256SUMS`. See "Store zips" below. +- Store zips: the same run also writes the two Chrome Web Store zips, `udan-extension--store-test.zip` (for the unlisted TEST item "UDA TEST") and `udan-extension--store-prod.zip` (for the PROD item, "Universal Digital Assistant by Nistapp (UDAN)"), each with its line in `SHA256SUMS`. See "Store zips" below. - Retention: artifact `client-zip`, 90 days for pushes to `dev`, 14 days for PRs. The run summary shows the version, SHA256 and SDK version. - Build settings in CI come from GitHub Actions **variables** (`BASE_PROD_URL`, `TOKEN_TEST_URL`, ..., `KEYCLOAK_PUBLIC_CLIENT_ID`, `KEYCLOAK_IDP_HINT`: `scripts/ci/generate-env.sh --print-names`), never from secrets. They are set once at the organization level and shared with the SDK repo, which uses the same names. @@ -204,7 +204,7 @@ Release Please no longer touches the manifests: CI owns the extension version. A |---|---|---|---| | Used for | `Deploy to TEST` prereleases, unpacked testing | the unlisted TEST store item | the PROD store item | | Manifest `key` | kept (pins the dev/TEST id) | **removed** (the store fixes the item id) | **removed** | -| Manifest `name` | unchanged | `UDA TEST` | unchanged | +| Manifest `name` | unchanged | `UDA TEST` | unchanged (`Universal Digital Assistant by Nistapp (UDAN)` from `public/manifest.json`) | | `tier.json` | none (unpacked = TEST, as before) | `{"tier":"TEST"}` | `{"tier":"PROD"}` | | Icons | `logos/nist-logo-*.png` | TEST badge from `store/test-icons/` | unchanged | diff --git a/docs/store-listing-draft.md b/docs/store-listing-draft.md index 2edf7a7d3..e01b200bc 100644 --- a/docs/store-listing-draft.md +++ b/docs/store-listing-draft.md @@ -2,6 +2,10 @@ Draft only. The Chrome Web Store text is the owner's to submit; check it against the README section "Privacy: what the extension stores" first. +**Title (PROD item).** Universal Digital Assistant by Nistapp (UDAN) + +The title is the manifest `name` of the PROD store zip (45 characters; the documented manifest limit is 75). It is the product name, not a beta label: do not add Beta or Alpha to the listing title or text. The TEST item keeps the name "UDA TEST". + **Single purpose.** Record, save and replay step-by-step guides on a web page (Universal Digital Assistant Network). **Data the extension handles** diff --git a/public/manifest-firefox.json b/public/manifest-firefox.json index ef48260bd..6beb18319 100644 --- a/public/manifest-firefox.json +++ b/public/manifest-firefox.json @@ -1,6 +1,6 @@ { "manifest_version": 3, - "name": "Universal Digital Assistant (UDA) Beta", + "name": "Universal Digital Assistant by Nistapp (UDAN)", "version": "1.1.0", "content_scripts": [ { diff --git a/public/manifest.json b/public/manifest.json index 67c122da2..27559d540 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,6 +1,6 @@ { "manifest_version": 3, - "name": "Universal Digital Assistant (UDA) Beta", + "name": "Universal Digital Assistant by Nistapp (UDAN)", "version": "1.1.0", "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/HrhD5R5x/MgAVFeM9SJelrhbDUuu52lX2TgP2mdsCgeYZCfNbj7ymCrQrydbxKZpC9Lh/AtyqlFtmXgHGfUvxpXbH/JO/vMqNQImDIIej7gdJq4dBunjbMxpGi9L7qB+3aVBAXI+rlxqToaFoTl6s2Xj6prrIlRBh160mWyARtz0yT20jzrEqITq9cydtyUGskFjquVblFwRHxWgfkiQDcq8G7jU212zyFm9z4knnNNXOIUUVZ99+hU3rlMzmgssImJhgG5xGIUEl7TPa86OVpN3RLE+iXC/pf/EEWwYQoHT7qftoKpq1LC0PJKkfzKxb2iadVxwTBDZyLJqt8WHwIDAQAB", "content_scripts": [