/** * Stage 3.5 — Feature derivation. * * Pure data→data over the catalog + indexes. A *plain view* by default * (ADR-0006): only the columns the caller requests are computed * (lazy/needed-only), and the in-engine rules consume the result without it * ever being persisted for their sake. The dashboard columns (blast / scc / * packageCoupling) are materialized into the catalog JSON only when the * producing run requests them. * * Algorithms here are ports of analyses that first lived in dashboard-side * JavaScript (`code-paths/indexes.ts` blast, `code-paths/scc.ts` Tarjan, * `code-paths/view-coupling.ts` coupling) or inline inside individual rules * (the `endLine − line + 1` span, `orphan-subtree`'s reachability BFS, * `test-only-reachable`'s prod BFS). The engine is now the canonical home for * computed feature columns; dashboard helpers still assemble view-local * indexes and drilldowns from the catalog plus the precomputed features. */ import type { Catalog, FeatureColumn, FeatureTable, GraphConfig, Indexes, PersistedFeatures, SccFeatures } from '../types.js'; /** * Compute the requested feature columns over the catalog + indexes. Only the * entities whose driving columns are present are populated; everything else * is the shared empty value. An empty `requested` ⇒ an all-empty table. */ export declare function buildFeatures(catalog: Catalog, indexes: Indexes, config: GraphConfig, requested: readonly FeatureColumn[]): FeatureTable; /** * Occurrence-level SCCs via the shared Tarjan primitive + occurrence call graph. * Singletons included; members sorted; package-crossing labels preserved. */ export declare function computeSccs(indexes: Indexes): SccFeatures[]; /** * Project a `FeatureTable` to the JSON-safe `PersistedFeatures`, OMITTING any * entity whose driving column was not requested (so an empty-request table * projects to `{}` and a lean default-run persists no blob). Maps → records; * arrays pass through. */ export declare function toPersistedFeatures(table: FeatureTable, requested: readonly FeatureColumn[]): PersistedFeatures; /** True when no entity is present (or every present entity is empty). */ export declare function isPersistedFeaturesEmpty(persisted: PersistedFeatures): boolean; //# sourceMappingURL=features.d.ts.map