/** * THE STREAM DIRECTORIES — `/logs//--.log`. * * The stream is the DIRECTORY and the writer is the FILE. That split is the whole point: it puts the * LAYER in the path, so "show me every L1 decision this session" is one glob * (`logs/L1-location/-*`) instead of a question no glob could answer — every layer used to be * either a suffix on a flat name or, for L1, nothing at all. * * These live in ai-hook-rules beside LogStream, because all FOUR writers are here of this layout and * not all of them are TypeScript: the L0 `ai-hook.sh` is POSIX sh * rendered from `bin/shim-audit-log.ts`, and it must spell these * directories identically or the layers scatter. One constant, four consumers — the same reason * LogStream itself lives here. * * NOT in rules-config, and that is load-bearing rather than tidiness: the `wp-*` bins are SPAWNED as * processes with no tsconfig path mapping, so they resolve `@webpieces/rules-config` to the PUBLISHED * copy in node_modules — a release behind local source. A stream name defined there would render as * `undefined` inside a spawned `wp-upgrade-shim` while the in-process renderer used the real value, * and the two shims would differ by exactly the constant. Same-package means same source, always. * * Nesting by STREAM is not the nesting that was rejected. What `logs/` refused was nesting by * IDENTITY (`sessions///…`), which breaks every cross-session question. A one-level * wildcard recovers the flat view here — `ls -t logs/[star]/-*` is still every stream in time * order, across every layer at once. */ export declare const L0_SHIM_STREAM = "L0-shim"; export declare const L1_LOCATION_STREAM = "L1-location"; export declare const L2_DECISIONS_STREAM = "L2-decisions"; export declare const CALLS_STREAM = "calls"; export declare const ASYNC_REFRESH_STREAM = "async-refresh"; export declare const REJECTIONS_STREAM = "rejections"; /** * Every stream directory, for the sweeps and specs that must enumerate them rather than name one. * A new stream that is not added here is invisible to retention — which is why this is a list and not * a doc sentence. */ export declare const ALL_LOG_STREAMS: readonly string[]; /** * Stream directories an OLDER release wrote and this one never will. Kept beside the live list because a * directory that is in neither is invisible to every sweep, so its files would sit on disk forever. * * `SWEEPABLE_LOG_STREAMS` — live + retired — is what retention and the layout specs must enumerate; * `ALL_LOG_STREAMS` stays the answer to "what may be WRITTEN". Keeping the two separate is what stops a * retired name from quietly becoming a writable one again. */ export declare const RETIRED_LOG_STREAMS: readonly string[]; /** Every directory retention may reap: what this release writes, plus what older ones left behind. */ export declare const SWEEPABLE_LOG_STREAMS: readonly string[];