# configuration/strings/config.strings.ts

> 10 lines of code and 4 definitions.

Tree: GovLab Quality
Language: typescript
Layer: product
Canonical: https://banes-lab.com/anatomy/quality#file-quality-configuration-strings-config-strings-ts
Source text: https://banes-lab.com/source/quality/configuration/strings/config.strings.ts.txt

Listed in [configuration/strings](https://banes-lab.com/api/source/quality/configuration/strings.md), after [configuration/strings/comment.strings.ts](https://banes-lab.com/source/quality/configuration/strings/comment.strings.ts.md) and before [configuration/strings/dependency.strings.ts](https://banes-lab.com/source/quality/configuration/strings/dependency.strings.ts.md).

## Definitions

- `forbiddenConfig` (lexical_declaration, line 1, exported)
- `unsanctionedConfig` (lexical_declaration, line 5, exported)
- `CONFIG_DRIFT_FAILED` (lexical_declaration, line 9, exported)
- `configDriftClean` (lexical_declaration, line 11, exported)

## Contained in

- [configuration/strings](https://banes-lab.com/anatomy/quality/folder-quality-configuration-strings.md)

## Source

```typescript
export const forbiddenConfig = function forbiddenConfig(file: string): string {
    return `${file}: an ecosystem config file exists, and every tool reads its config from govlab.config through the govlab runner. Delete the file and move its data into govlab.config.`;
};

export const unsanctionedConfig = function unsanctionedConfig(file: string, registry: string): string {
    return `${file}: a native tool config exists that the sanctioned-exception registry ${registry} does not list. Add it to the registry or delete it.`;
};

export const CONFIG_DRIFT_FAILED = "config-drift: validation failed, because govlab.config is the one config truth.\n";

export const configDriftClean = function configDriftClean(scanned: number): string {
    return `config-drift: clean. ${String(scanned)} files scanned, and no ecosystem config file exists.\n`;
};
```
