# core/plugins/manifest.quality.plugin.ts

> 36 lines of code and 10 definitions.

Tree: GovLab Docs
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/docs#file-docs-core-plugins-manifest-quality-plugin-ts
Source text: https://banes-lab.com/source/docs/core/plugins/manifest.quality.plugin.ts.txt

Listed in [core/plugins](https://banes-lab.com/api/source/docs/core/plugins.md), after [core/plugins/manifest.principle.plugin.ts](https://banes-lab.com/source/docs/core/plugins/manifest.principle.plugin.ts.md) and before [core/plugins/manifest.readme.plugin.ts](https://banes-lab.com/source/docs/core/plugins/manifest.readme.plugin.ts.md).

## Definitions

- `conceptIds` (lexical_declaration, line 11)
- `validate` (method_definition, line 27, exported)
- `SECTION` (lexical_declaration, line 7)
- `deriveGovernedBy` (lexical_declaration, line 8)
- `known` (lexical_declaration, line 9)
- `plugin` (lexical_declaration, line 16, exported)
- `contribute` (method_definition, line 17, exported)
- `declared` (lexical_declaration, line 18, exported)
- `governedBy` (lexical_declaration, line 28, exported)
- `ids` (lexical_declaration, line 35, exported)

## Contained in

- [core/plugins](https://banes-lab.com/anatomy/docs/folder-docs-core-plugins.md)

## Uses

- [core/loaders/quality.loader.ts](https://banes-lab.com/source/docs/core/loaders/quality.loader.ts.md)
- [core/selectors/record.selector.ts](https://banes-lab.com/source/docs/core/selectors/record.selector.ts.md)

## Linked from

- [core/loaders](https://banes-lab.com/anatomy/docs/folder-docs-core-loaders.md)
- [core/selectors](https://banes-lab.com/anatomy/docs/folder-docs-core-selectors.md)

## Source

```typescript
import { MANIFEST_ERRORS, unknownConcept } from "#configuration/strings/manifest.strings";
import { isNonEmptyStringArray, stringsOf } from "#core/selectors/record.selector";
import { loadConceptIds, loadGovernanceDeriver } from "#core/loaders/quality.loader";
import type { ManifestPlugin } from "#types/manifest.types";
import { absolutePath } from "@ssot/paths";

const SECTION = "governedBy";
const deriveGovernedBy = loadGovernanceDeriver(absolutePath("govlab.quality.generated.rules"));
const known: { ids?: ReadonlySet<string> } = {};

const conceptIds = function conceptIds(): ReadonlySet<string> {
    known.ids ??= loadConceptIds(absolutePath("govlab.quality.generated.concepts"));
    return known.ids;
};

export const plugin: ManifestPlugin = {
    contribute(manifest, entry) {
        const declared = stringsOf(manifest[SECTION]);
        const governedBy = declared.length > 0 ? declared : deriveGovernedBy(entry.value);
        if (governedBy !== null) {
            entry[SECTION] = governedBy;
        }
    },
    name: "quality-governance",
    section: {
        keys: [SECTION],
        validate(manifest) {
            const governedBy = manifest[SECTION];
            if (governedBy === undefined) {
                return [];
            }
            if (!isNonEmptyStringArray(governedBy)) {
                return [MANIFEST_ERRORS.governedByShape];
            }
            const ids = conceptIds();
            return ids.size === 0 ? [] : governedBy.filter((id) => !ids.has(id)).map(unknownConcept);
        },
    },
};
```
