/**
 * Analyse-verify detectors — pure predicates shared with the demo-self harness.
 *
 * `isProgrammingStep` / `programmingSignals` are a verbatim port of
 * `specverse-demo-self/harness/scoring/step-abstraction.mjs` (TODO #92): the
 * measurement scorer and the enforcement verifier share ONE predicate, so a
 * rule provably matches what the regression metric measures. Keep the two in
 * sync if either changes.
 *
 * `isNonDomainEvent` flags a `publishes` entry whose NAME reads as a query /
 * read / render / helper rather than a domain state-change. We deliberately do
 * NOT use subscriber-count: a published event with no in-spec subscriber is
 * not dead (external services / event bus / webhooks may consume it), so the
 * discriminator is the event KIND encoded in its name.
 */
/** True if a step reads as transcribed code rather than business intent. */
export declare function isProgrammingStep(step: string): boolean;
/** Which signal(s) fired — for diagnostics + the correction message. */
export declare function programmingSignals(step: string): string[];
/** True if an event NAME reads as a non-domain (query/render/helper) event. */
export declare function isNonDomainEvent(eventName: string): boolean;
/** Which restatement signal(s) a `requires:` entry trips — empty = substantive. */
export declare function requireRestatementSignals(req: string): string[];
/** True if a `requires:` entry merely restates signature / CURVED-implicit
 *  guarantees (parameter-presence / entity-existence / connection-init) rather
 *  than a genuine business precondition. */
export declare function isExistenceRestatingRequire(req: string): boolean;
//# sourceMappingURL=detectors.d.ts.map