From 318459cef8bec6106a13c9fb7e2356750041876d Mon Sep 17 00:00:00 2001 From: Paulo Porto Date: Tue, 27 Oct 2026 11:52:59 -0300 Subject: [PATCH] Release 1.0.8 --- README.md | 13 +++++++++++++ dist/chromium/manifest.json | 2 +- dist/firefox/manifest.json | 2 +- package.json | 2 +- scripts/build.mjs | 2 +- tests/characterization.test.cjs | 4 ++-- tests/opportunityTable.test.cjs | 2 +- 7 files changed, 20 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 651ee9a..2af578f 100644 --- a/README.md +++ b/README.md @@ -447,6 +447,19 @@ a focused chart fixture. Stop the server with Ctrl+C when finished. - Show requestOpportunitiesSavedSearch in the Opportunities debug category and stop dependent queries when the default search is missing or invalid. - Regenerated Chromium/Edge and Firefox distributions. Release validation uses synthetic automated tests; live Oracle calls and installed-browser smoke tests were not performed for this release. +## Release 1.0.8 - 2026-10-27 + +- Added customer Organization Charts with contact search, contact creation, person details, notes, hierarchy editing and locally persisted chart data. +- Added paginated, sortable opportunities by contact using the contact PartyNumber. +- Unified modal and table layouts, loading skeletons and typography; added Rate Card order-number filtering and simplified Overview customer names using PartyName. +- Added Reference-bounded scrolling calendars with all daily opportunity cards and positioning around the current week. +- Added Booking/Workload filters and improved ramp/projection access, alerts and unavailable-workload indicators. +- Removed AI-generated opportunity summaries and their dedicated requests. +- Persisted debug requests in localStorage with lazy rendering; history resets only when a new opportunity query starts. +- Reuse successful current-user identity during the browser session; fixed debug timer invocation and added Token Relay timeout/retry support. +- Prepare SPA and SR sessions concurrently, inspect SPA before visual assets finish loading, and provide SR session retry with a 70-second timeout. +- Regenerated Chromium/Edge and Firefox distributions. Validation uses synthetic automated tests; live Oracle calls and installed-browser smoke tests are not included. + ## Loading in Development Mode ### Chrome or Microsoft Edge diff --git a/dist/chromium/manifest.json b/dist/chromium/manifest.json index bb07527..32e041f 100644 --- a/dist/chromium/manifest.json +++ b/dist/chromium/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "Opportunities Extension", "description": "Adiciona um atalho de Opportunities Extension nas paginas Oracle Fusion permitidas.", - "version": "1.0.7", + "version": "1.0.8", "permissions": [ "cookies", "storage", diff --git a/dist/firefox/manifest.json b/dist/firefox/manifest.json index 85f99db..3bf7531 100644 --- a/dist/firefox/manifest.json +++ b/dist/firefox/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "Opportunities Extension", "description": "Adiciona um atalho de Opportunities Extension nas paginas Oracle Fusion permitidas.", - "version": "1.0.7", + "version": "1.0.8", "permissions": [ "cookies", "storage", diff --git a/package.json b/package.json index ea6934e..7ad897d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opportunities-extension", - "version": "1.0.7", + "version": "1.0.8", "private": true, "type": "module", "scripts": { diff --git a/scripts/build.mjs b/scripts/build.mjs index 03e566d..8ac00a2 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -15,7 +15,7 @@ const baseManifest = { manifest_version: 3, name: "Opportunities Extension", description: "Adiciona um atalho de Opportunities Extension nas paginas Oracle Fusion permitidas.", - version: "1.0.7", + version: "1.0.8", permissions: [ "cookies", "storage", diff --git a/tests/characterization.test.cjs b/tests/characterization.test.cjs index 0880aaf..a8a22d6 100644 --- a/tests/characterization.test.cjs +++ b/tests/characterization.test.cjs @@ -40,7 +40,7 @@ test("distribution contracts: manifests, execution boundaries and deterministic const base = { manifest_version: 3, name: "Opportunities Extension", description: "Adiciona um atalho de Opportunities Extension nas paginas Oracle Fusion permitidas.", - version: "1.0.7", permissions: ["cookies", "storage", "webRequest", "declarativeNetRequestWithHostAccess"], + version: "1.0.8", permissions: ["cookies", "storage", "webRequest", "declarativeNetRequestWithHostAccess"], host_permissions: ["https://eeho.fa.us2.oraclecloud.com/*", "https://spa.oracle.com/*", "https://comcipapic-oalprod.integration.ocp.oraclecloud.com/*"], content_scripts: [{ matches: ["https://eeho.fa.us2.oraclecloud.com/hcmUI/faces/FuseWelcome*", "https://eeho.fa.us2.oraclecloud.com/fscmUI/faces/FuseWelcome*"], @@ -124,7 +124,7 @@ test("opportunity query preserves fields, record-set OR, date AND, and paginatio { op: "$and", criteria: [{ op: "$or", criteria: types.map(value => ({ op: "$eq", attribute: "RecordSet", value })) }] }, { op: "$wi", attribute: "EffectiveDate", value1: "2026-06-01T00:00:00.000+0000", value2: "2026-09-01T00:00:00.000+0000" } ] }, keywords: null, keywordsFields: fields, - fields: [...fields, "CustomerAccount.PartyUniqueName", "CustomerAccount.PartyId", "CustomerAccount.PartyNumber", "CustomerAccount.Region_c", "CustomerAccount.PrimaryAddress.CountryCode"], + fields: [...fields, "CustomerAccount.PartyUniqueName", "CustomerAccount.PartyName", "CustomerAccount.PartyId", "CustomerAccount.PartyNumber", "CustomerAccount.Region_c", "CustomerAccount.PrimaryAddress.CountryCode"], sort: null, language: "en", skipInValidFields: true, skipHiddenFromUIFields: true, copiedFrom: "queries/default-search", limit: 15, offset: 15 }); diff --git a/tests/opportunityTable.test.cjs b/tests/opportunityTable.test.cjs index bbf8a50..e660419 100644 --- a/tests/opportunityTable.test.cjs +++ b/tests/opportunityTable.test.cjs @@ -26,7 +26,7 @@ const walk = node => [node, ...node.children.flatMap(walk)]; const hasClass = (node, name) => (node.className || "").split(" ").includes(name); const findClass = (node, name) => walk(node).find(child => hasClass(child, name)); const synthetic = (number = "TEST-1", name = "Synthetic opportunity") => ({ - Name: name, OptyNumber: number, CustomerAccount: { PartyUniqueName: "Synthetic customer", PartyId: "party/id", PartyNumber: "reg-123" }, + Name: name, OptyNumber: number, CustomerAccount: { PartyName: "Synthetic customer", PartyUniqueName: "Synthetic customer (Location)", PartyId: "party/id", PartyNumber: "reg-123" }, Owner: { PersonFirstName: "Test", PersonLastName: "Owner" }, PrimaryRevenue: { RevnAmount: "123456.78", RevnAmountCurcyCode: "USD", WinProb: 60 }, EffectiveDate: "2026-10-23", LastUpdateDate: "2026-09-22T13:15:00Z", StatusCode: "OPEN", ForecastGroup_c: "FORECAST" });