The merged change (gerrit:1270922) guards insertZTesterResult against writing stale revision tuples going forward, but it doesn't clean up rows that were already stale when it deployed.
- Feed Queries
- All Stories
- Search
- Feed Search
- Transactions
- Transaction Logs
Yesterday
Sounds good.
Its a bit unclear whether we answered the question to show this for functions returning all kinds of types or for functions only returning html?
The patch written would only fix future cache writes, it doesn't fix existing cached results.
We should probably also write something for the existing cases.
Wed, Apr 29
I dont know which one is slower honestly. if spamblacklist needs to do their permissions checks everytime thats also slower then once. I would say left or right maybe its not a huge difference. I do perhaps like the below diagram better. Its simpler.
Did we decide to do it for just HTML or are we doing it for every zreference > zobject selector type field in abstract articles?
New Approach:
caller
└─► WikifunctionsPFragmentRenderer::render($html)
│
├─ 1. loadBlockedDomains() ← AbuseFilter APCu cache (stateless, no user needed)
├─ 2. sanitiseHtmlFragment($html, $blockedDomains)
│ └─► WikifunctionsPFragmentSanitiserTokenHandler
│ └─ for <a> in reference context:
│ • check href host against $blockedDomains
│ • blocked → tagAllowed = false (escaped as text)
│ • clean → allow href through as before
└─ return sanitised HTMLIm not sure the return value is z24 and the errors are in the metadata, This use case only works for returning a z24. Maybe if there are other uses cases we should handke that outside of this ticket?
I think Ive did exactly the things mentioned in this ticket. Ill have a look at the <title> element to see if that needs changes still.
My patch just adds the qid copyable on the side and makes ui scaffolding reusable with zobject titles.
After my patch we need a small patch to incorporate the fetch function for the title. But thats small.
Tue, Apr 28
@gonyeahialam This is more a question for @Jdforrester-WMF Who created the ticket. I think 'might not actually work right now' means there is no real world use case though. Not that I know of though
I just realized that on save makes no sense because a user could concatenate multiple z89's and still output a bad link.
SO I need to change it to render time. which means in the sanitizer. Which means the feedback will probably currently be limited to a link that does not work. (Maybe UX can think of a better solution for the future)
Downside of the placeholder = In some languages the text 'Select function outputting' might be so long that the actual type would be cut off in the input field because of the width it has and you will never see it.
Fri, Apr 24
Ideas from my end: just add the AbuseFilter/SpamBlocklist checks on asbtract/zobject save/edit:
ScottB: Ok, I think we can go ahead with what we discussed above and on the bug then? Given the enormous amount of potentially valid external links and that there aren't currently any processes or APIs available for sanitizing such content, aside from running external link content through the various *Blacklist pages and manual review, that's likely the best we can do at this time. On the bug, it appears that James is already planning to integrate with SpamBlacklist and potentially (the more recommended it seems) AF in the near future.
Thu, Apr 23
I feel this is a user error where Z801K1 is not provided? But we should maybe handle it correctly?
Response:
{
"Z1K1": "Z22",
"Z22K1": "Z24",
"Z22K2": {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z883",
"Z883K1": "Z6",
"Z883K2": "Z1"
},
"K1": [{
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "errors",
"K2": {
"Z1K1": "Z5",
"Z5K1": "Z507",
"Z5K2": {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z885",
"Z885K1": "Z507"
},
"Z507K1": {
"Z1K1": "Z99",
"Z99K1": {
"Z1K1": "Z7",
"Z7K1": {
"Z1K1": "Z8",
"Z8K1": ["Z17", {
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z825K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": ["Z11", {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "wikidata item reference"
}]
}
}, {
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z825K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": ["Z11", {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}]
}
}, {
"Z1K1": "Z17",
"Z17K1": "Z20420",
"Z17K2": "Z825K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": ["Z11", {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "date"
}]
}
}],
"Z8K2": "Z89",
"Z8K3": ["Z20"],
"Z8K4": ["Z14", {
"Z1K1": "Z14",
"Z14K1": "Z825",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z801"
}
}],
"Z8K5": "Z825"
},
"Z825K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q27318"
},
"Z825K2": "Z1002",
"Z825K3": {
"Z1K1": "Z7",
"Z7K1": "Z20808",
"Z20808K1": "2026-04-16",
"Z20808K2": "Z1002"
}
}
},
"Z507K2": {
"Z1K1": "Z5",
"Z5K1": "Z500",
"Z5K2": {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z885",
"Z885K1": "Z500"
},
"Z500K1": "Orchestration failed with unidentified error: TypeError: Cannot destructure property 'Z22K1' of 'argument' as it is undefined.."
}
}
}
}
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "implementationType",
"K2": "Z14K2"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "implementationId",
"K2": {
"Z1K1": "Z6",
"Z6K1": "Z23983"
}
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "wasmedgeTotalExecutionTime",
"K2": "2320818196479"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "wasmedgeGasCost",
"K2": "5814"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "executionMemoryUsage",
"K2": "4.55 MiB"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "executionCpuUsage",
"K2": "2320910 \u03bcs"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "programmingLanguageVersion",
"K2": "QuickJS v0.5.0-alpha"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "evaluationMemoryUsage",
"K2": "136.07 MiB"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "evaluationCpuUsage",
"K2": "14.592 ms"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "evaluationStartTime",
"K2": "2026-04-23T08:36:33.134Z"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "evaluationEndTime",
"K2": "2026-04-23T08:36:33.204Z"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "evaluationDuration",
"K2": "70 ms"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "evaluationHostname",
"K2": "36a8f56d3169"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "orchestrationMemoryUsage",
"K2": "161.64 MiB"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "orchestrationCpuUsage",
"K2": "136.459 ms"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "orchestrationStartTime",
"K2": "2026-04-23T08:36:32.719Z"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "orchestrationEndTime",
"K2": "2026-04-23T08:36:33.210Z"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "orchestrationDuration",
"K2": "491 ms"
}, {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z1"
},
"K1": "orchestrationHostname",
"K2": "0f7550cb6edb"
}]
}
}Did some debugging: WFBase.from() in orchestrator code receives an undefined zobject param.
here this.Z1K1 is undefined: WfObject.js -> let fullType = await WFBase.from( this.Z1K1, this.wfConfig );
The fact that this again contains a Z17 makes me think might again be related to https://phabricator.wikimedia.org/T423853
I ran this through the profiler (the first one in the main ticket description) but didn't get the z1k1 error?
Tue, Apr 21
Returned error:
function-orchestrator-1 | {"@timestamp":"2026-04-21T16:47:05.577Z","ecs.version":"8.10.0","http":{"request":{"id":"ba426b20-3da1-11f1-8a1a-bd0d24f3070d"}},"log.level":"error","message":"Orchestration failed with unidentified error: TypeError: Cannot destructure property 'argumentName' of 'this.argumentDeclarations_.get(...)' as it is undefined..","service":{"name":"function-orchestrator"},"span.id":"21d90ea85da0c6ef","trace.id":"2b51cfc726e2835271da42f89f910591","userRequest":"{\"Z1K1\":\"Z7\",\"Z7K1\":\"Z21583\",\"Z21583K1\":{\"Z1K1\":\"Z7\",\"Z7K1\":\"Z29591\",\"Z29591K1\":{\"Z1K1\":\"Z6091\",\"Z6091K1\":\"Q104587954\"},\"Z29591K2\":{\"Z1K1\":\"Z6091\",\"Z6091K1\":\"Q30081\"},\"Z29591K3\":{\"Z1K1\":\"Z6091\",\"Z6091K1\":\"Q35127\"},\"Z29591K4\":\"Z1011\"},\"Z21583K2\":\"Z1011\"}"}- Root cause
SpamBlacklist and AbuseFilter are one of the solutions mentioned for this. We could use those when saving a Z89 with a reference inside it.
Fri, Apr 17
Another log of what is send to the orchestrator logged at 'handleGuzzleRequestForEvaluate' in Wikilambda for this function call:
Thu, Apr 16
I took the liberty to send a message to the security team.
i did{F76241259} a fixie fixie a while ago. could we close ?
@Amire80 Can you verify that this display is correct. Ive also replaced the comma seperator by the i18n comma-seperator (e.g. ، in Arabic):
I feel like some things are off in rtl now. Ill create a new ticket
Wed, Apr 15
Implementation note — API research


