From 270145f6897678db2c74ae1df899d80699d898b7 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 7 Sep 2026 11:22:42 +0000 Subject: [PATCH 1/2] docs(skills): teach the calendar-hours rule where a hook stamps a deadline The data-hooks sandbox section now carries the hook-deadline rule: a deadline stamped from an hours table is calendar hours, the table is named `*_CALENDAR_HOURS` (or its camelCase), the arithmetic adds elapsed milliseconds, and wall-clock arithmetic is never labelled "business hours". Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_018dxq7YqsLDMeZDZ5AzsgJX --- skills/objectstack-data/references/data-hooks.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/skills/objectstack-data/references/data-hooks.md b/skills/objectstack-data/references/data-hooks.md index f35f86633a..283168f557 100644 --- a/skills/objectstack-data/references/data-hooks.md +++ b/skills/objectstack-data/references/data-hooks.md @@ -452,6 +452,10 @@ The body runs in an isolated QuickJS VM, **not** Node: the hook. A `body` must be **self-contained**: inline the helper, or keep that hook as a bundled `handler`. +> **A deadline stamped from an hours table is calendar hours** — nights, weekends and +> holidays count. Name it `SLA_CALENDAR_HOURS` (or its camelCase) and add elapsed +> milliseconds (`hours * 3_600_000`); never label it "business hours". + ### ⚠️ Gotcha 1 — `ctx.result` is a *partial* record on afterUpdate On `afterUpdate`, both `ctx.result` and `ctx.input` carry only the fields this From 3fcc79e17841a5ff8d39cbd55e8e8cf029642b36 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 7 Sep 2026 11:39:49 +0000 Subject: [PATCH 2/2] docs(skills): state the hours-table naming rule as a suffix pattern, not one name Review point: the rule read `SLA_CALENDAR_HOURS`, a concrete table name, where the spec is a naming pattern. A published skill is copied verbatim by agents, so a non-SLA hours table would have inherited the SLA name. The pattern now leads and the concrete name is the parenthesised example. Same three lines, same +4 net. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_018dxq7YqsLDMeZDZ5AzsgJX --- skills/objectstack-data/references/data-hooks.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skills/objectstack-data/references/data-hooks.md b/skills/objectstack-data/references/data-hooks.md index 283168f557..7ea17981ee 100644 --- a/skills/objectstack-data/references/data-hooks.md +++ b/skills/objectstack-data/references/data-hooks.md @@ -453,8 +453,8 @@ The body runs in an isolated QuickJS VM, **not** Node: hook as a bundled `handler`. > **A deadline stamped from an hours table is calendar hours** — nights, weekends and -> holidays count. Name it `SLA_CALENDAR_HOURS` (or its camelCase) and add elapsed -> milliseconds (`hours * 3_600_000`); never label it "business hours". +> holidays count. Name it `*_CALENDAR_HOURS` (`SLA_CALENDAR_HOURS`, or its camelCase) +> and add elapsed milliseconds (`hours * 3_600_000`); never label it "business hours". ### ⚠️ Gotcha 1 — `ctx.result` is a *partial* record on afterUpdate