/**
 * Port: ArtifactWriter — writes run artifacts + the run manifest to external storage.
 *
 * D0033 / W0049 unifies the writer API around a single caller-facing method:
 *
 *   - `emit(type, association, payload)` — the canonical write. Dispatch on
 *     `descriptor.layout` is internal; callers never pick a shape.
 *   - `appendNdjson(type, association, rows)` — streaming-append variant used
 *     only by the `traces` artifact. Semantics differ from `emit` (repeated
 *     append vs. single-shot write) so it gets its own method rather than an
 *     overload.
 *   - `writeManifest(runId, manifest)` — writes the run manifest at
 *     `runs/{runId}/manifest.json`.
 *   - `writeBulk` / `writePerEntry` — @deprecated legacy surface retained for
 *     producer code that has not migrated to `emit`. Removal scheduled for
 *     W0052 (see `docs/decisions/D0033-unified-run-anchored-artifact-capture.md`).
 *
 * @see docs/decisions/D0032-run-anchored-artifact-store.md
 * @see docs/decisions/D0033-unified-run-anchored-artifact-capture.md
 * @see packages/core/src/artifact-registry.ts
 */
/**
 * Thrown by writers that can't satisfy a method — e.g. an
 * `ApiGatewayArtifactWriter` cannot implement `appendNdjson` until the batch
 * signing endpoint (W0052) lands. Callers should treat this as an explicit
 * failure rather than a silent no-op so the gap surfaces in logs.
 */
export class NotImplementedError extends Error {
    constructor(message) {
        super(message);
        this.name = "NotImplementedError";
    }
}
/** No-op writer — every method returns null. Used when no storage is configured. */
export class NoOpArtifactWriter {
    async emit() {
        return null;
    }
    async appendNdjson() {
        return null;
    }
    async writeManifest() {
        return null;
    }
    async writeBulk() {
        return null;
    }
    async writePerEntry() {
        return null;
    }
}
