Skip to content

Commit ecf56e7

Browse files
huangyiireneclaude
andauthored
fix(platform-objects): decide the hook panel's execution en-echoes per leaf, and pay round 5's cross-panel exclusion (#19530)
Part of #19403 Clause-②: no Round 6 of #19403. The `hook` metadata-form panel's ten remaining en-echoes, decided one leaf at a time, with the reason recorded for each. **With them the panel is finished: zero of its 47 string leaves now echoes its English source in all three locales.** ## The family, and why the leaf count did NOT decide it Re-measured on this branch's base `0e671d20c` — the four remaining families, in **both** counts: | family | keys | leaves | |:--|--:|--:| | six bare type-display pairs (`seed`·`mapping`·`api`·`doc`·`book`·`capability`) | 6 | **12** | | `object.fields.enable.*` (+ `validations`) | 9 | 11 | | **`hook.fields.retryPolicy.*` + `body.memoryMb` + `timeoutMs` ← taken** | **5** | **10** | | `report.fields.drilldown` + `runtimeFilter` + `sections.dataset_binding` | 3 | 6 | This family is **third of four by leaves**, so the tie-break is written down — in the ledger's header and here. Two of the four reasons are ones no other row can offer: 1. **It is the only family that makes the LANDED instrument stronger rather than longer.** PR #19509's cross-panel invariant compares 5 shared `HookBodySchema` children × 2 props × 3 locales = 30 pairs and **excluded 6 of them**, because `hook.fields.body.memoryMb` was itself an en-echo and an unauthored twin carries no evidence. That file asserts the exclusion by name and states that a later round of this card owes it. Deciding `body.memoryMb` here **pays it**: the exclusion set is empty, 30 of 30 pairs are compared, and `memoryMb` is guarded on both panels. Ablation D reds that landed assertion, which is the proof the discharge is real. 2. **It is the remaining half of a measured blind spot, on the panel where the existing pin is blind through a control that is CORRECT.** Round 5 measured `hookForm`'s enumerated-but-unwalked children at **seven** — the five `body.*` plus `retryPolicy.maxRetries` and `retryPolicy.backoffMs` — and closed the five on the `action` side only. The two `retryPolicy` children are what was left. 3. **Evidence density forces per-leaf work**: `body.memoryMb` takes a twin that exists only because round 5 created it; `timeoutMs` takes an authored twin one level down the same panel at a byte-identical `en`; `retryPolicy.*` has no twin anywhere and is composed from this catalog's authored answers for its separate words. 4. **It completes a panel** — recorded as a reason that did **not** decide, because `object` and `report` would complete theirs too. And why **not** the six bare pairs, which lead by leaves: round 5's refusal stands unchanged — only a real panel keeps the DERIVED-POPULATION property with a working dark control, and six unrelated types degenerate the derivation into six one-entry lookups with nothing for the control to exclude. ## The ten decisions Every verdict is `translate` in all three locales; every row records the authored leaf its wording came from. | leaf | `en` | zh-CN / ja-JP / es-ES | evidence shape | |:--|:--|:--|:--| | `body.memoryMb.label` | `Memory Mb` | 内存(MB) · メモリ(MB) · Memoria (MB) | the twin **round 5 created** — copied verbatim | | `body.memoryMb.helpText` | `Per-invocation memory cap (MB, max 256)` | 单次调用内存上限(MB,最大 256) · 呼び出しごとのメモリ上限(MB、最大 256) · Límite de memoria por invocación (MB, máx. 256) | same twin; `256` kept as a numeral (`ScriptBodySchema.max(256)`) | | `timeoutMs.label` | `Timeout Ms` | 超时(毫秒) · タイムアウト(ms) · Tiempo de espera (ms) | authored twin **one level down the same panel** | | `timeoutMs.helpText` | `Abort the hook after N milliseconds` | 超过 N 毫秒后中止该钩子 · N ミリ秒経過後にフックを中止 · Abortar el hook después de N milisegundos | the #19430 **near-miss**, cleared at the schema; `N` kept | | `retryPolicy.label` | `Retry Policy` | 重试策略 · 再試行ポリシー · Política de reintentos | composed from two authored answers in this catalog | | `retryPolicy.helpText` | `Retry on failure — most useful for async hooks` | 失败时重试——对异步钩子最有用 · 失敗時に再試行 — 非同期フックで特に有用 | `async` read at the schema: a boolean, not a token | | `retryPolicy.maxRetries.label` | `Max Retries` | 最大重试次数 · 最大再試行回数 · Reintentos máximos | extractor humanize rendered as the concept | | `retryPolicy.maxRetries.helpText` | `Maximum retry attempts` | 最多可重试的次数 · 再試行の最大回数 · Número máximo de reintentos | the schema default `3` deliberately **not** rendered | | `retryPolicy.backoffMs.label` | `Backoff Ms` | 退避(毫秒) · バックオフ(ms) · Retroceso (ms) | `sys_job_queue.fields.backoff_type.label`'s authored answer | | `retryPolicy.backoffMs.helpText` | `Delay between retries (ms)` | 两次重试之间的延迟(毫秒) · 再試行間の遅延(ms) · Retraso entre reintentos (ms) | same vocabulary; default `1000` not rendered | **What was refused.** Four of the five labels are the extractor's humanize of a camelCase key, not authored English — exactly where round 5's phantom-translation reading bites. `Memory Mb` → `Memory (MB)` or `Max Retries` → `Max Retries (3)` would differ in bytes, **pass the echo predicate in all three locales, drop the census by a key and tell a zh-CN author nothing.** Every one is rendered into the locale's own writing system instead, and the enumerated verdicts — not the census — are what shows it. ## The #19430 discipline, and the near-miss this family had to clear Read at the schema before a word was rendered, and **asserted against the live `HookSchema`** rather than described: - `timeoutMs.helpText` says "Abort the hook after N milliseconds", and `abort` **is** a legal value of `HookSchema.onError` (`z.enum(['abort','log'])`). The near-miss is real. It is **cleared** because the key this tooltip describes takes a **number** — the schema accepts `5000` and refuses `"5000 毫秒"` — so no rendered word can land in it, and the schema's own description uses the word as the runtime's verb ("before the hook is aborted"). Rendered. - `retryPolicy.helpText` names `async`. `HookSchema.async` is `z.boolean().default(false)` — accepts `true`, refuses `"异步"` — so it is **not** a #19430 token. Rendered, taking this panel's own authored 异步 / 非同期 / Asíncrono one entry up. - `retryPolicy` is a `strictObject`, not an enum; its alias map governs KEY spellings, which no label renders. Its defaults are `{maxRetries: 3, backoffMs: 1000}` and neither tooltip carries a number — asserted both ways. - `N` and `256` are kept verbatim, and the token guard now judges **Unicode word boundaries** rather than substring containment: `'Número máximo de reintentos'.includes('N')` is `true`, so round 5's containment check would have passed a locale that lost the placeholder entirely. That is a control, and ablation E reds it. ## A second act: `body.capabilities` reworded on both panels Round 5 **recorded rather than improved** that zh-CN 功能 and ja-JP 機能 read "feature" for what is a capability **token** from the `HookBodyCapability` enum — and left the reword to the hook family, because both forms declare the same schema key and diverging is the defect the cross-panel invariant guards. This round is the hook family. The replacement is **derived, not invented**: every authored leaf of the objects catalog whose English names a capability renders it **能力** (zh-CN) and **ケイパビリティ** (ja-JP), and none of them uses 功能 or 機能. The ledger asserts that derivation over the catalog rather than quoting it. es-ES already read `Capacidades` — the same word those leaves use — and is **unchanged**, which is why the zh-CN and ja-JP bundle diffs are two lines larger than es-ES's. The neighbouring senses (`object.sections.capabilities` = 功能开关, the feature CHECKBOXES; `agent.sections.capabilities` = 能力配置) are deliberately untouched and pinned as such. ## The measurements, each with its control in the same run | reading | base `0e671d20c` | head | |:--|--:|--:| | `en` string leaves / `.label` leaves | 893 / 538 | 893 / 538 — same population | | label keys echoing in ALL THREE | **23** ⇒ 69 `.label` leaves | **18** ⇒ **54** | | POSITIVE CONTROL — labels genuinely translated | 515 · 499 · 499 | **520 · 504 · 504** | | decidable sibling remainder (label + its helpText/description) | 39 | **29** | | `hook` panel leaves echoing in all three | 10 of 47 | **0 of 47** | Echoes −5 keys, control +5 in each locale, same population, same run. **Two counts for two questions** — the headline moves by 5 because only labels are counted, while this round decided 5 labels **and** 5 helpTexts. - **No key added or removed.** Full flattened key sets, base vs head, all four bundles: 893 / 893, 0 added, 0 removed — with a negative control proving the comparator sees a one-key delta in both directions (`hook.fields.__probe__.label`). `en` is untouched. - **Regenerated with `pnpm i18n:extract`**, never by hand. It dropped exactly the 10 decided leaves' provenance rows in each of the three locales (30 rows, listed in full in the report comment) and **added none**; the metadata-forms bundles round-tripped byte-identical. - **Bundle diffs**: zh-CN 12/12, ja-JP 12/12, es-ES 10/10 — insertions equal deletions in every bundle. The two extra lines per CJK bundle are the `capabilities` reword on the two panels; es-ES needed none. ## The concurrent PR that held this region **PR #19520 HAD LANDED** by the time of the pre-push merge — so the required check was **not vacuous**, and it passes. Its leaf is `view.fields.userFilters.helpText`, and in all three bundles this branch carries `origin/main`'s value, not the base's: ``` base 快速筛选栏:控件样式(下拉 / 标签页 / 开关)+ 暴露的字段或标签页预设 main 快速筛选栏:控件样式(dropdown / tabs / toggle)+ 暴露的字段或标签页预设 head 快速筛选栏:控件样式(dropdown / tabs / toggle)+ 暴露的字段或标签页预设 ``` `base != main` (the fix moved it) and `head == main` (it survived) hold for `zh-CN`, `ja-JP` and `es-ES`. The merge brought its one-line-per-bundle change in cleanly, exactly as the dispatch's five-round measurement predicted. That changeset — `19430-user-filters-element-tokens` — is **this card's own round-2 finding** coming back fixed by another seat, so silently reverting it would have been this lane undoing its own filed work. ## The instrument — five ledgers extended, not rebuilt `hook-execution-panel-echo-decisions.test.ts` carries every property the five earlier rounds established, plus two this family added: - the echo-reason rule as a **predicate with a dark control** (proved on a synthetic row, since every verdict here is `translate`); - the panel population **DERIVED** from the `en` catalog, with a dark control naming keys that exist on other types — including `action`'s own `body.memoryMb` at a byte-identical `en`; - the **second witness** over the three `*.source-hashes.generated.ts` companions, with its own pattern-matched dark control; - the `en` source pinned **equal** to the live bundle, for the decisions **and** the rewords; - the **machine-token guard**, upgraded to Unicode word boundaries — the new part, forced by a bare `N`; - the **cross-panel invariant**, now at 30/30 with a `compared` counter keeping it lit; - the **composite blind spot** on the hook side, closed. `action-body-panel-echo-decisions.test.ts` is updated in the same PR: its exclusion set is emptied, its lit assertion becomes a counted 30, and the prose that quoted the old capability wording now points at the derivation behind the new one. ### Five ablations, ten assertions, two files Each ran mutation → run → restore inside **one** `scripts/ablation-replace.mjs` process, which proves the mutation landed by blob hash and proves the restore by `blob == HEAD` plus an empty `git diff HEAD`. No rebuild is involved: these tests resolve the bundles as sibling sources, not through `dist`. | # | mutation | assertions reddened | |:--|:--|:--| | A | re-fill `zh-CN hook.fields.retryPolicy.label` with its `en` | `zh-CN: every decided leaf matches its verdict`; `no leaf on this panel reads its en source…` | | B | reword the `en` source under the pinned row | `every row is pinned to the live en source`; `the echo predicate can say "echo"` | | C | put a decided leaf's provenance row back | `zh-CN: no decided leaf is still recorded as an extractor fill` | | D | render `body.memoryMb` differently on the two panels | **round 5's landed invariant** `the half NO single-panel pin can see`; `30 of 30 pairs agree`; `the invariant can fire` | | E | drop the `N` placeholder from the es-ES tooltip | `the machine tokens… are still verbatim`; `the token predicate can say NO` | ## Changeset — measured, not assumed `@objectstack/platform-objects` is `private: false` with `files: ["dist", …]`, and the decided strings reach `dist`: each appears in **6** built files, escaped (`\uXXXX` upper-case hex, and `\xNN` for U+0080–U+00FF — `Pol\xEDtica de reintentos`). A **raw un-escaped negative control** reads **0 including for the positive controls**, so a zero in the raw column means "escaped", not "absent", and a never-written string reads 0 in both columns. ⇒ a **`patch`** changeset; `skip-changeset` is measurably wrong. ## Acceptance notes **Zero cards to file, and that is a reading rather than a silence.** The leaf that could have carried the known #19430 trap is `hook.fields.timeoutMs.helpText`, whose `abort` **is** a real `HookSchema.onError` enum value — it was checked at the schema, found to describe a numeric key, and cleared, with the check asserted in the ledger so a schema change reds it. `retryPolicy.helpText`'s `async` was checked the same way and is a boolean. Neither is a defect, and neither is a card. Noted, not filed: - **`hook.label` is `Gancho` in es-ES while every es-ES sentence on the panel says `hook`** (`hook.sections.identity.description`, `hook.fields.condition.helpText`, `hook.fields.async.helpText`, and now `timeoutMs.helpText`, which copies that convention). This is a wording inconsistency inside one panel, not a reproducible defect, not a contract violation, and not a metadata-authoring trap — the author writes neither word. Carrier: 无 (no PR or person is queued to touch this file for it); it belongs to whichever round of #19403 takes a family that renders the type's own display pair. Dedupe words: `es-ES`, `Gancho`, `hook.label`, `metadata-forms`, `panel vocabulary`. - **`permission.fields.systemPermissions.helpText` renders "system capability keys" as システム機能キー in ja-JP**, which is the word this PR just replaced for the hook body's capability tokens — but that leaf is a *permission* capability, a different sense, and it is authored and outside this family. Recorded so a later round does not read this PR's reword as a sweep. Carrier: 无. Dedupe words: `ja-JP`, `機能`, `ケイパビリティ`, `systemPermissions`, `capability wording`. Neither carries `class: a|b|c` evidence, so by this round's reporting contract both stay here as prose. --- _Generated by [Claude Code](https://claude.ai/code/session_01NcPSwnmJHczmTu6FG7NMjE)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 61170fa commit ecf56e7

9 files changed

Lines changed: 990 additions & 76 deletions
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
"@objectstack/platform-objects": patch
3+
---
4+
5+
The `hook` metadata-form panel no longer prints English field names and tooltips to a Chinese, Japanese or Spanish author: five keys — ten string leaves — were decided leaf by leaf and rendered in `zh-CN`, `ja-JP` and `es-ES` (#19403). With them the panel is finished: **zero** of its 47 string leaves now echoes its English source in all three locales.
6+
7+
The keys are the execution controls — `Retry Policy` and its `Max Retries` / `Backoff Ms` children, the hook-level `Timeout Ms`, and `Memory Mb` on the `body` composite. Four of the five labels are the extractor's humanize of a camelCase key rather than authored English, so each is rendered as the concept with its unit in a parenthetical (`Backoff Ms` → 退避(毫秒) / バックオフ(ms) / Retroceso (ms)) instead of being touched up in English. An en-echo is not automatically a defect, so every leaf carries a recorded reason in `hook-execution-panel-echo-decisions.test.ts`, naming the authored leaf its wording came from.
8+
9+
- **Machine tokens stay English — and one near-miss was read at the schema and cleared.** `timeoutMs.helpText` reads "Abort the hook after N milliseconds", and `abort` *is* a legal value of `HookSchema.onError` (`z.enum(['abort','log'])`) — but the key this tooltip describes takes a **number**, so no rendered word can land in it, and the schema's own description uses the word as the runtime's verb. Rendered. `retryPolicy.helpText` names `async`, which is `z.boolean().default(false)`, not an enum member — rendered, taking the panel's own authored 异步 / 非同期 / Asíncrono. The placeholder `N` and the bound `256` stay as written, and all four readings are asserted against the live `HookSchema` rather than described.
10+
- **`body.capabilities` is reworded on both panels that declare it.** zh-CN 功能 and ja-JP 機能 read "feature" for what is a capability **token** from the `HookBodyCapability` enum. Every authored leaf of the objects catalog that names a capability renders it 能力 (zh-CN) and ケイパビリティ (ja-JP), so those are the words now used — on `hook` **and** `action` in one act, because both forms declare the same schema key. es-ES already read Capacidades and is unchanged.
11+
- **Values only.** No key was added or removed: the full flattened key sets are identical on all four bundles (893 keys, 0 added, 0 removed) with a negative control proving the comparator sees a one-key delta, and `en` is untouched. Regenerated with `pnpm i18n:extract`, which dropped exactly the 10 provenance rows per locale that recorded these leaves as unauthored extractor fills, and added none.
12+
- **A debt the previous round wrote down is paid.** Its cross-panel invariant compared 30 `HookBodySchema` pairs and excluded six of them, because `hook.fields.body.memoryMb` was an echo on both panels and an unauthored twin carries no evidence. Deciding it here empties the exclusion set: 30 of 30 pairs compared, `memoryMb` guarded on both panels.
13+
14+
Measured on the metadata-form catalogs: label keys echoing in all three locales fall **23 → 18** while the genuinely-translated control rises **515 → 520** (`zh-CN`) and **499 → 504** (`ja-JP`, `es-ES`), same population (893 string leaves, 538 of them labels), same run.

‎packages/platform-objects/src/apps/translations/action-body-panel-echo-decisions.test.ts‎

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,11 @@
5858
// one. So the precedent is not a same-string match found elsewhere in the
5959
// catalog: it is the other rendering of this very schema key.
6060
//
61-
// The fifth, `memoryMb`, is an echo on BOTH panels — the twin rule supplies
62-
// nothing there, and that row says so instead of borrowing evidence it does
63-
// not have.
61+
// The fifth, `memoryMb`, was an echo on BOTH panels when this round ran — the
62+
// twin rule supplied nothing there, and that row says so instead of borrowing
63+
// evidence it does not have. ⭐ #19403 round 6 then decided the hook side from
64+
// THIS round's rendering, so the exclusion at the foot of this file is now
65+
// empty and the invariant covers all thirty pairs.
6466
//
6567
// ## The #19430 trap, met and checked AT THE SCHEMA before a word was rendered
6668
//
@@ -216,7 +218,7 @@ const DECISIONS: readonly Decision[] = [
216218
en: 'Capabilities',
217219
verdict: ALL_TRANSLATE,
218220
reason:
219-
'THE AUTHORED TWIN AT THE SAME SCHEMA KEY, byte-identical en: hook.fields.body.capabilities.label is 功能 / 機能 / Capacidades. ⚠️ Recorded rather than improved: zh-CN 功能 and ja-JP 機能 read "feature", while the value is a capability TOKEN from the HookBodyCapability enum, and the catalog\'s other `Capabilities` (object.sections.capabilities.label, the capability CHECKBOXES) is 功能开关 — a third sense. The twin is the landed answer for this exact schema key, and diverging here to improve the word would BE the defect the cross-panel invariant below guards. Rewording it is a hook-family edit, not an action-family one.',
221+
'THE AUTHORED TWIN AT THE SAME SCHEMA KEY, byte-identical en: hook.fields.body.capabilities.label. ⚠️ When this round ran the twin read 功能 / 機能 / Capacidades, and this row RECORDED rather than improved it: zh-CN 功能 and ja-JP 機能 read "feature", while the value is a capability TOKEN from the HookBodyCapability enum, and the catalog\'s other `Capabilities` (object.sections.capabilities.label, the capability CHECKBOXES) is 功能开关 — a third sense. The twin is the landed answer for this exact schema key, and diverging HERE to improve the word would BE the defect the cross-panel invariant below guards; rewording it is a hook-family edit, not an action-family one. ⭐ #19403 round 6 is that hook-family edit and moved both sides in one act — 能力 / ケイパビリティ / Capacidades — so this leaf still copies its twin verbatim and the invariant below still holds. See hook-execution-panel-echo-decisions.test.ts for the derivation behind the new word.',
220222
},
221223
{
222224
scope: 'fields',
@@ -719,6 +721,7 @@ describe('#19403 round 5 — the blind spot, FIFTH shape: one schema, two forms,
719721
const en = enMetadataForms as Record<string, any>;
720722
const divergent: string[] = [];
721723
const noTwinEvidence: string[] = [];
724+
let compared = 0;
722725
for (const child of SHARED_BODY_CHILDREN) {
723726
for (const prop of ['label', 'helpText'] as const) {
724727
const enAction = en.action?.fields?.[`body.${child}`]?.[prop];
@@ -735,6 +738,7 @@ describe('#19403 round 5 — the blind spot, FIFTH shape: one schema, two forms,
735738
noTwinEvidence.push(`${child}.${prop}`);
736739
continue;
737740
}
741+
compared += 1;
738742
if (actionValue !== hookValue) divergent.push(`${locale} body.${child}.${prop}`);
739743
}
740744
}
@@ -744,16 +748,17 @@ describe('#19403 round 5 — the blind spot, FIFTH shape: one schema, two forms,
744748
'one schema key rendered two ways on the two panels that declare it — make them agree, do not pick a favourite',
745749
).toEqual([]);
746750
// Lit — the invariant above is not vacuous: it really compared leaves.
747-
// 5 children x 2 props x 3 locales = 30 pairs, of which the `memoryMb`
748-
// pair carries no authored twin in any locale (6 exclusions).
749-
expect(noTwinEvidence.length).toBe(6);
750-
expect([...new Set(noTwinEvidence)].sort()).toEqual(['memoryMb.helpText', 'memoryMb.label']);
751-
// …and that exclusion is exactly the family a later round of this card
752-
// still owes. When it lands, this assertion starts covering `memoryMb`
753-
// too, and reds if that round renders it differently from this one.
751+
// 5 children x 2 props x 3 locales = 30 pairs. ⭐ When this round landed,
752+
// SIX of them were excluded because `memoryMb` carried no authored twin in
753+
// any locale, and this file said a later round of the card still owed it.
754+
// #19403 round 6 paid it: the exclusion set is now EMPTY and every pair is
755+
// compared, so a round that renders `memoryMb` differently on the two
756+
// panels reds here as well as in its own ledger.
757+
expect(noTwinEvidence).toEqual([]);
758+
expect(compared, 'the invariant compared 5 children x 2 props x 3 locales').toBe(30);
754759
const stillEchoingOnHook = SHARED_BODY_CHILDREN.filter((c) =>
755760
TRANSLATED_LOCALES.some(([, forms]) => forms.hook?.fields?.[`body.${c}`]?.label === en.hook?.fields?.[`body.${c}`]?.label),
756761
);
757-
expect(stillEchoingOnHook).toEqual(['memoryMb']);
762+
expect(stillEchoingOnHook).toEqual([]);
758763
});
759764
});

‎packages/platform-objects/src/apps/translations/es-ES.metadata-forms.generated.ts‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -567,8 +567,8 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
567567
helpText: "Tiempo de espera por invocación (ms)"
568568
},
569569
"body.memoryMb": {
570-
label: "Memory Mb",
571-
helpText: "Per-invocation memory cap (MB, max 256)"
570+
label: "Memoria (MB)",
571+
helpText: "Límite de memoria por invocación (MB, máx. 256)"
572572
},
573573
handler: {
574574
label: "Manejador",
@@ -582,8 +582,8 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
582582
label: "Al error"
583583
},
584584
timeoutMs: {
585-
label: "Timeout Ms",
586-
helpText: "Abort the hook after N milliseconds"
585+
label: "Tiempo de espera (ms)",
586+
helpText: "Abortar el hook después de N milisegundos"
587587
},
588588
runAs: {
589589
label: "Ejecutar como",
@@ -594,16 +594,16 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
594594
helpText: "Fórmula opcional — omite el hook cuando evalúa a false"
595595
},
596596
retryPolicy: {
597-
label: "Retry Policy",
598-
helpText: "Retry on failure — most useful for async hooks"
597+
label: "Política de reintentos",
598+
helpText: "Reintentar al fallar — especialmente útil para hooks asíncronos"
599599
},
600600
"retryPolicy.maxRetries": {
601-
label: "Max Retries",
602-
helpText: "Maximum retry attempts"
601+
label: "Reintentos máximos",
602+
helpText: "Número máximo de reintentos"
603603
},
604604
"retryPolicy.backoffMs": {
605-
label: "Backoff Ms",
606-
helpText: "Delay between retries (ms)"
605+
label: "Retroceso (ms)",
606+
helpText: "Retraso entre reintentos (ms)"
607607
}
608608
}
609609
},

‎packages/platform-objects/src/apps/translations/es-ES.source-hashes.generated.ts‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,6 @@ export const esESGeneratedSourceHashes: Readonly<Record<string, string>> = {
2727
"metadataForms.doc.description": "f233af60238b0879",
2828
"metadataForms.doc.label": "3f35cf5088b999ad",
2929
"metadataForms.email_template.fields.variables.helpText": "27197774c2cda633",
30-
"metadataForms.hook.fields.body.memoryMb.helpText": "f53c826ce3c94ad9",
31-
"metadataForms.hook.fields.body.memoryMb.label": "a1e1612eff7f82ea",
32-
"metadataForms.hook.fields.retryPolicy.backoffMs.helpText": "42137a83459ed6b7",
33-
"metadataForms.hook.fields.retryPolicy.backoffMs.label": "cad56dd875f84c22",
34-
"metadataForms.hook.fields.retryPolicy.helpText": "de59f5fbb8ad7fda",
35-
"metadataForms.hook.fields.retryPolicy.label": "7ec5dad15f687f05",
36-
"metadataForms.hook.fields.retryPolicy.maxRetries.helpText": "f7e133cfc5e64240",
37-
"metadataForms.hook.fields.retryPolicy.maxRetries.label": "422d764e2265642c",
38-
"metadataForms.hook.fields.timeoutMs.helpText": "31e114f26389aec7",
39-
"metadataForms.hook.fields.timeoutMs.label": "2b887c62238d3532",
4030
"metadataForms.mapping.description": "654a322ed6e264bb",
4131
"metadataForms.mapping.label": "9baba989f46cd1e8",
4232
"metadataForms.object.fields.enable.activities.label": "1091422f7f3133d3",

0 commit comments

Comments
 (0)