Compare commits

..

1 Commits

Author SHA1 Message Date
9d818712fe refactor(dotfiles): separate registry validation 2026-10-04 21:26:20 -04:00
3 changed files with 32 additions and 28 deletions

View File

@@ -110,8 +110,6 @@
Use `git -C <repository-root>` or top-anchored pathspecs for repository-wide history searches.
- A `**/*.nix` Git pathspec does not include Nix files directly in its starting directory.
Include both `*.nix` and `**/*.nix`, or use a recursive `*.nix` pathspec, when linting every Nix file.
- Nix `let` bindings are recursive; their source order does not determine binding availability.
Treat Natu `let_order` as a readability rule, not an evaluation dependency.
- Ariadne extraction must preserve the game-root season prefix for archived source.
Different game installs can contain compiled scripts with the same internal path.
- Clew owns Ren'Py extraction, preparation, and compiled-script AST export. Ariadne owns analysis over Clew-produced data.

View File

@@ -19,7 +19,7 @@ let
];
}).config;
validation = import ./registry/validation.nix { inherit data definitions lib; };
validate = import ./registry/validation.nix { inherit definitions lib; };
data = lib.mapAttrs (
registryName: _registry:
@@ -44,7 +44,7 @@ in
};
collected =
assert validation;
assert validate data;
data
// {
join =

View File

@@ -1,34 +1,40 @@
{
data,
definitions,
lib,
}:
let
checkResults = lib.concatLists (
lib.mapAttrsToList (
registryName: definition:
map (check: {
assertion = check.assertion (entriesForRegistry registryName);
inherit (check) message;
}) definition.checks
) definitions
);
entriesForRegistry =
registryName:
validationAssertions =
data:
lib.concatLists (
lib.mapAttrsToList (host: entries: entriesForHost registryName host entries) data.${registryName}
lib.mapAttrsToList (
registryName: registry:
let
entries = flattenRegistryEntries registryName data.${registryName};
in
map (check: {
assertion = check.assertion entries;
inherit (check) message;
}) registry.checks
) definitions
);
entriesForHost =
registryName: host: entries:
lib.mapAttrsToList (entry: value: {
path = "registry.${registryName}.${host}.${entry}";
inherit host entry value;
}) entries;
failures = lib.filter (result: !result.assertion) checkResults;
flattenRegistryEntries =
registryName: data:
lib.concatLists (
lib.mapAttrsToList (
host: entries:
lib.mapAttrsToList (entry: value: {
path = "registry.${registryName}.${host}.${entry}";
inherit host entry value;
}) entries
) data
);
in
lib.assertMsg (lib.all (result: result.assertion) checkResults) (
lib.concatMapStringsSep "\n" (result: result.message) failures
data:
let
assertions = validationAssertions data;
failures = lib.filter (assertion: !assertion.assertion) assertions;
in
lib.assertMsg (lib.all (assertion: assertion.assertion) assertions) (
lib.concatMapStringsSep "\n" (assertion: assertion.message) failures
)