diff --git a/ui/agijobmanager_genesis_job_mainnet_2026-03-05-v41.html b/ui/agijobmanager_genesis_job_mainnet_2026-03-05-v41.html
index 6472522..8d4f1e3 100644
--- a/ui/agijobmanager_genesis_job_mainnet_2026-03-05-v41.html
+++ b/ui/agijobmanager_genesis_job_mainnet_2026-03-05-v41.html
@@ -2757,6 +2757,7 @@
Agent ENS: not verified
@@ -3920,7 +3921,8 @@
Contact & Legal
{"inputs":[{"internalType":"uint256","name":"_jobId","type":"uint256"}],"name":"expireJob","outputs":[],"stateMutability":"nonpayable","type":"function"},
{"inputs":[{"internalType":"uint256","name":"_jobId","type":"uint256"}],"name":"cancelJob","outputs":[],"stateMutability":"nonpayable","type":"function"},
{"inputs":[{"internalType":"uint256","name":"jobId","type":"uint256"},{"internalType":"bool","name":"burnFuses","type":"bool"}],"name":"lockJobENS","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"address","name":"agent","type":"address"}],"name":"getHighestPayoutPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}
+ {"inputs":[{"internalType":"address","name":"agent","type":"address"}],"name":"getHighestPayoutPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
+ {"inputs":[{"internalType":"address","name":"agent","type":"address"}],"name":"previewHistoricalScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}
,
{"inputs":[],"name":"agentBond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
{"inputs":[],"name":"agentBondBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
@@ -4256,6 +4258,7 @@
Contact & Legal
if(tbody) tbody.innerHTML = '
| Runtime context reset. Reconnect and refresh to load live jobs. |
';
if(el('jobsVisibleSummary')) el('jobsVisibleSummary').textContent = 'Runtime context reset; live job index not loaded.';
if(el('myJobs')) el('myJobs').textContent = '—';
+ if(el('myHistoricalScore')) el('myHistoricalScore').textContent = '—';
if(el('managerOwnerAddress')) el('managerOwnerAddress').textContent = '—';
if(el('ensOwnerAddress')) el('ensOwnerAddress').textContent = '—';
if(el('managerModeratorPosture')) el('managerModeratorPosture').textContent = 'Runtime context reset';
@@ -4789,7 +4792,7 @@
Contact & Legal
if(!hasAcceptedTerms){ setToast('Accept the Terms & Conditions before sending any write transaction.', 'warn'); return false; }
return true;
}
- const UI_CONTINUITY_KEY = 'agijobmanagerprime.v40.uiContinuity';
+ const UI_CONTINUITY_KEY = 'agijobmanagerprime.v41.uiContinuity';
const UI_CONTINUITY_FIELDS = ['termsAccepted','alphaTermsAcceptedTop','preflightTermsAccepted','agentSub','clubSub','mintAlphaLabel','premiumActionProcurementId','premiumActionSubdomain','premiumActionProof','premiumActionCommitment','premiumActionSalt','premiumActionApplicationUri','premiumActionFinalist','premiumActionScore','premiumInspectorProcurementId','premiumInspectorJobId','premiumDiscoveryApplicationInspectProcurementId','premiumDiscoveryApplicationInspectAgent','premiumAttachJobId','premiumDiscoveryJobSpecURI','premiumDiscoveryDetails'];
const UI_CONTINUITY_TOGGLES = ['alphaEnsExpertDetails'];
function continuityLoad(){
@@ -5333,7 +5336,7 @@
Contact & Legal
ensPreview: predictedEns || null,
ensURI: predictedEnsUri && !predictedEnsUri.includes("—") ? predictedEnsUri : null,
generatedAt: nowIso(),
- createdVia: "AGIJobManager Prime console v40.0"
+ createdVia: "AGIJobManager Prime console v41.0"
}
};
Object.keys(obj).forEach(k=>{ if(obj[k]===undefined) delete obj[k]; });
@@ -6787,6 +6790,7 @@
Contact & Legal
el("challengePeriod").textContent = "—";
el("agiBalance").textContent = "—";
el("myReputation").textContent = "—";
+ if(el("myHistoricalScore")) el("myHistoricalScore").textContent = "—";
el("myJobs").textContent = "—";
const tbody = el("jobsBody");
if(tbody) tbody.innerHTML = '
| Switch to Ethereum Mainnet (chainId 1) to load jobs. |
';
@@ -6905,6 +6909,8 @@
Contact & Legal
const rep = await agiJobManager.methods.reputation(userAccount).call();
el("myReputation").textContent = rep;
+ const historicalRead = await runSafeReadStep('previewHistoricalScore', ()=>agiJobManager.methods.previewHistoricalScore(userAccount).call(), {silent:true});
+ el("myHistoricalScore").textContent = historicalRead?.__safeReadError ? 'Unavailable on this ABI/runtime' : String(historicalRead);
el("myJobs").textContent = "—";
updateCalculator();
@@ -8339,7 +8345,7 @@
Contact & Legal
['ENS URI', ens.ensUri ? safeLink(ens.ensUri) : '—'],
['ENS node', escapeHtml(ens.node || '—')],
['Resolver', escapeHtml(ens.resolverAddr || '—')],
- ['Token URI mode', 'Unavailable in ENSJobPages public ABI (v40)'],
+ ['Token URI mode', 'Unavailable in ENSJobPages public ABI (v41)'],
['schema', escapeHtml(ens.texts?.schema || '—')], ['agijobs.spec.public', ens.texts?.['agijobs.spec.public'] ? safeLink(ens.texts['agijobs.spec.public']) : '—'],
['agijobs.completion.public', ens.texts?.['agijobs.completion.public'] ? safeLink(ens.texts['agijobs.completion.public']) : '—']
].map(([k,v])=>`
`).join('');
diff --git a/ui/tests/standaloneV41.test.ts b/ui/tests/standaloneV41.test.ts
index 1461fbb..8c04ebc 100644
--- a/ui/tests/standaloneV41.test.ts
+++ b/ui/tests/standaloneV41.test.ts
@@ -26,4 +26,12 @@ describe('standalone v41 artifact', () => {
expect(html).toContain('syncIdentityByLabel(label)');
expect(html).toContain('soulbound identity');
});
+
+ it('uses v41 continuity metadata and exposes historical-score read provenance', () => {
+ const html = fs.readFileSync(file, 'utf8');
+ expect(html).toContain('agijobmanagerprime.v41.uiContinuity');
+ expect(html).toContain('previewHistoricalScore');
+ expect(html).toContain('Historical score preview');
+ expect(html).not.toContain('Unavailable in ENSJobPages public ABI (v40)');
+ });
});