Imported from Zezolas2798/stackblitz-starters-lvhktmos (
domainspec/.claude/skills/domainspec-instrument-otel/SKILL.md). Install upstream withnpx skills add Zezolas2798/stackblitz-starters-lvhktmos --skill domainspec-instrument-otel. Copyright stays with the author.
Outputs:
- Modified use-case and infrastructure files with OTel metric recording
- Optional feature-specific instrument file at backend/src/infrastructure/telemetry/{feature}.ts
- Compilation verification via
tsc --noEmit
import {
operationInvocation,
operationDuration,
} from "../../infrastructure/telemetry/instruments";
export const myOperation =
(deps: Deps) =>
async (input: Input): Promise<Output> => {
const start = performance.now();
try {
// ... original logic ...
operationInvocation.add(1, {
feature: "my-feature",
operation: "MyOperation",
result: "success",
});
return result;
} catch (err) {
operationInvocation.add(1, {
feature: "my-feature",
operation: "MyOperation",
result: "error",
});
throw err;
} finally {
operationDuration.record((performance.now() - start) / 1000, {
feature: "my-feature",
operation: "MyOperation",
});
}
};
O5: Rule violation (catch at use-case boundary)
import { ruleViolation } from "../../infrastructure/telemetry/instruments";
// In the catch block or validation result check:
ruleViolation.add(1, {
feature: "my-feature",
operation: "MyOperation",
rule_id: "R1",
});
O1: State transition (after successful transition)
import { stateTransition } from "../../infrastructure/telemetry/instruments";
stateTransition.add(1, {
feature: "my-feature",
entity: "MyEntity",
from: previousState,
to: newState,
event: "EventName",
});
O10: Event emission (after event is dispatched)
import { eventEmit } from "../../infrastructure/telemetry/instruments";
eventEmit.add(1, { feature: "my-feature", event_type: "MyEvent" });
O13: Business KPI (feature-specific counter)
// In backend/src/infrastructure/telemetry/my-feature.ts
import { createCounter } from "./instruments";
export const businessMyKpi = createCounter("business.my_kpi", {
unit: "{unit}",
description: "What this KPI measures (O13)",
});