Repository navigation
Releases: noru-tech/noru-grc-engineering
Release list
v0.17.0
v0.16.1
Privacy workflows now detect and verify existing Python installations on Windows, macOS and Linux, including executables not named python3.
- Use the resolved Python and Node paths consistently in nested processes.
- Handle paths containing spaces and normalize Windows evidence paths.
- Report missing prerequisites and execution failures clearly.
- Keep Git, Node 18+ and Python 3.9+ as prerequisites. No runtime is bundled, downloaded or installed.
Validation: full local verification and all release PR checks passed, including native Windows, macOS and Linux runtime tests.
See CHANGELOG.md for details.
v0.16.0
-
Add read-only investigation status, small summary pages, entity detail lookup and explicit
candidate-mode assertions. Preserve source-scoped gap decisions across unrelated structural
additions; clarify investigation checkpoints, dependency registries and open-content errors.
Align non-personal system proposal schema with implementation and accept string cache paths.
Retain authenticated open-content assessments across policy refreshes when their structural
observations and source evidence remain unchanged, without retaining privacy classifications. -
Give multi-use processing declarations unique per-use names and reject duplicate names during
review and validation. Preserve single-use names and recognize unchanged legacy expansions as
mechanical renames rather than processing-scope removals. -
Preserve structural provenance for newly projected supplemental members and calculate applied
candidate source digests from an offline observation of the resulting manifest inputs.
Decode quoted-string escapes in the install-free YAML reader so rendered structural shapes
retain their values when reloaded. -
Resolve literal, unconditional C# Compile links while preserving investigation for conditional
and multiply-owned sources. -
Preserve evidence-bound gap resolutions across unrelated dataset edits; support shared semantic
reasoning and grouped migration submissions without removing per-finding accounting. Project system
activities and explicit non-personal reviews, refresh composite signatures and add recoverable
candidate application. Reuse modeled .NET runtime links and supply typed serialization/device
contract suggestions for agent investigation without adding publication gates. -
Add compact privacy investigation output with a shared field/gap page limit, deduplicated
evidence and facts, shared instructions and page-scoped uncertainty templates. Keep full output
available for compatibility; scan instructions use compact output during enrichment.
Full changes: v0.15.0...v0.16.0
v0.15.0
v0.14.0
v0.13.0
-
Add explicit scoped uncertainty acceptance for investigated fields and coverage findings. Preserve
unknown meaning, reviewer attribution and map impact through review, sealing and Fides export;
reopen changed evidence and retain acceptance history. Supply a batch command and review templates. -
Permit evidenced, reviewed open content through classification and sealing without requiring
bounded values; preserve residual uncertainty in exported descriptions and retain evidence checks. -
Keep collector gaps in the agent investigation queue even when all fields are classified. Supply
supplemental-model fallback steps and require actionable evidence investigations instead of
plugin-development outcomes
without clearing structural, semantic or approval gates. -
Model supported authentication-ticket and RabbitMQ header structures independently of database
records, using pinned framework contracts and retaining open-content and customization gaps. -
Trace injected default propagators through referenced projects and evidenced SDK initialization;
retain blockers for custom overrides, conditional activation and unsupported header decoding. -
Discover Aspire YARP forwarding runtimes and source-defined routes separately from provisioners;
permit evidenced supplemental provisioned systems without labeling them external recipients. -
Count enrichment-discovered storage gaps as technical blockers across the shared review gates.
Allow evidenced known-open record structure to resolve extraction without accepting its meaning. -
Resolve explicitly scoped runtime findings against evidenced systems and flows; reopen them on
structural changes without requiring a fabricated dataset or accepting privacy meaning. -
Privacy: add a pinned ASP.NET Identity 10.0.12 field contract and provisional default Identity tables. Configuration and framework model diagnostics still require evidence-backed investigation.
-
Privacy: discover C# web, worker, Aspire and MAUI runtime entrypoints from lexical source evidence and project boundaries.
-
Honor evidence-bound extraction-gap dispositions consistently across review, validation, sealing,
export, publication preflight and CI. Preserve observed diagnostics, resolution history and active
blockers; reopen stale or incomplete evidence instead of clearing acceptance safeguards. -
Replace migration directory-proximity coverage with explicit context/configuration adapters and
separate datastore-identity and current-schema checks, including cross-project EF models. -
Discover .NET entities through explicit model-builder registrations and bounded source extension
calls, retaining provenance and diagnosing cycles, ambiguity and conditional bindings. Separate
CLR, storage and serialization facts, source/adapter-backed inheritance and entity relationships. -
Carry stable categorized .NET diagnostics and all grouped source occurrences through collection
and canonical review; show extraction counts separately from classification and acceptance.
Add synthetic feature tests and a repeatable multi-repository before/after comparison tool. -
Apply bounded, explicitly registered EF configurations for stored names, exclusions, backing
and typed shadow fields, simple owned-object columns and enum-to-string conversions. Keep
conditional mappings, custom converters and unsupported configuration as review gaps. -
Recover source-defined inherited fields with origin evidence and Identity custom user fields;
leave unavailable framework definitions and ambiguous inheritance as explicit gaps. -
Trace literal PostgreSQL registrations across project references and straight-line Aspire
PostgreSQL database wiring, keeping ambiguous or dynamic connections unresolved. -
Keep C# declarations when diagnostic strings use interpolation or raw literals; resolve
source-declared enums while retaining gaps for malformed literals and ambiguous types. -
Resolve Entity Framework global namespace imports from separate C# files within the same
project, retaining import evidence on extracted datastore relationships. -
Discover .NET projects and relevant dependencies, extract bounded C# persisted model fields,
and trace modeled Entity Framework, MongoDB, DynamoDB and literal typed SQL relationships.
Report unresolved configuration and extraction gaps with source evidence; preserve nested
member review and C# source freshness. Support SQL schema-qualified names, .NET review routing
and .NET AI dependency signatures without running target code. -
New piece,
findings-ingest: SARIF 2.1.0 and OSV-Scanner JSON reports your CI writes and does
not upload anywhere become reviewed security findings, through the samecreateSecurityFinding
upsert asiac-scan, and findings no input reports any more are closed. The committed
.noru/findings-ingest.inputs.jsonnames each report, its format and class, and declares
reaches_forge_alert_store: false; the collector and validator refuse anything else, because a
result something else already imports would be filed twice. A missing report stops the run rather
than closing everything. Findings are keyed on the input, rule, file and logical location (or the
advisory and package), never on a line number or a content fingerprint, and no result message or
snippet is ever recorded. A class or a finding may only be filed against a risk in the queue
snapshot, and no finding carries a due date: the queue records the due date of the linked risk's
treatment as Noru holds it (new queue toolgetRiskTreatments), and--as-ofreports an open
finding past it. -
change-controlcan take its change history from an agent-change-control manifest instead of its
own exporter:scripts/export/acc.mjs --manifest=acc-manifest.json [--forge-export=…]writes the
same.noru/.cache/change-events.json, offline, with acc's verdict on each change. ACC002, ACC003
and ACC001 then decideapprover_is_author,merged_without_independent_approvaland
agent_change_without_independent_human, and ACC005, when acc assessed it, decidesbypass_used
(new bypass kindruleset_bypass). An accunknownis a violation a person must disposition.
deployer_is_authorstays computed here. The manifest recordssource.inputand
source.acc_manifest_sha256, and each change's verdicts underacc.Migrating: nothing changes for a manifest built from the forge exporter; its derived digest
is the same. A manifest rebuilt from acc can show more violations than before in one case: an
agent's change approved only by the person who ran the agent is, to acc, also a self-approval
without independent approval. Disposition the new exceptions, or keep the forge exporter. Keep
the exporters for laptop use, and pass--forge-exportfor deployments and branch settings. -
Confirmation by a reviewed plan. On a pull request,
write-reviewed-planstores the plan the
diff step built, with a digest of what it does and a summary for reviewers, for the workflow to
upload. After the merge,fetch-reviewed-plan(orreviewed-plan),acc-manifestand
publish-workflowmake the push write that plan or nothing: it refuses unless the pull request
came from this repository, its plan came from the declared workflow and the merge did not change
that workflow, acc found the merge independently approved, the merge changed the manifest, and
the plan rebuilt after the merge has the same digest. A merge with no reviewed plan (a fork, a
direct push) skips the push.scripts/reviewed_plan.pyholds the digest, the checks and the
fetch. Merge approval alone is still never permission to publish, and/repo-enforcement:apply
is unchanged. -
Run the publication half from CI. A new
statestep builds.noru/.cache/noru-state.jsonfrom
the read tools a piece declares in itspiece.json(new requiredstatefield), with the
connection taken fromgetMcpCapabilities. WithNORU_API_KEYin the job environment, thepush
step now executes an MCP piece's confirmed call list throughscripts/mcp_exec.mjsand reports it
written only with a receipt (.noru/.cache/<piece>.receipt.json) that says every call succeeded.
The executor refuses an edited call list, a plan bound to another endpoint or organization, and
missing scopes or tools before the first write, sends the key only toNORU_API_URL(https), and
stops at the first failing call.ai-inventoryandprivacy-datamapdeclare that a person has to
build their snapshot and keep reading one passed withstate:. -
The contract's non-goal is now "no credential handling in a piece": the toolkit's executor is the
MCP client in CI and reads the key at the point of use, as the REST path already does. -
Fix
change-control's:push, which droppeddepends_onfrom the call list, so a
linkEvidenceToControlcall carried a nullevidenceIdwith no instruction to fill it in. -
Let an agent renew a
privacy-datamapcollection a person signed, and nothing else. The
interpretation block gainsowner_kind,operator(a named person),policy_refandrenews;
the grant comes from a committed.noru/interpretation-policy.yml(new
contract/interpretation-policy.schema.json). The validator refuses an agent's claim on a new or
changed collection, on a privacy declaration, or on a collection an agent renewed last, and caps it
at 90 days (45 for special-category data) or the grant's shortermax_days. A policy that grants
anything but renewals, or grants anything inchange-control,audit-packorreview-signoff,
is invalid. CI mode reads the base manifest and the policy from the base revision and passes them
as--baseand--interpretation-policy; a base it cannot read refuses every agent's claim. -
Contract requirement 8 now reads "someone who can be asked": a person, or an agent with a named
person as operator where a piece declares `interpretat...
v0.12.2
-
Explain recursive member coverage in privacy reviews without assigning child categories to
containers. Reject resolved demographic classifications that contradict declared delivery or
queue-state meaning; retain uncertainty rather than guessing a replacement category. -
Separate privacy scan progress into collection, agent investigation, missing source facts,
human approval and publication. Show known JSON members and extraction limitations, record
user corrections for reconsideration, and support explicit local-code routing scope. -
Discover literal Python store/schema bindings without executing target code, keeping distinct
stores and their same-named tables separate on a fresh scan.
v0.12.1
Changes
- Clarify privacy classification guidance for invoice events, mixed individual/company values, broad categories, and unconstrained content.
- Add contextual examples and regression coverage preserving processing purposes, subjects, and native flows through acceptance and export.
No retention handling or export schema changes are included.
See CHANGELOG.md for details.
v0.12.0
This release adds the consolidated privacy map and evidence-backed classification workflow from #56 and #74.
- Investigate field meaning and nested objects using source evidence, including offline TypeScript compiler analysis.
- Ask human review questions only when answers change the exported data map.
- Reuse unaffected analysis while requiring current evidence before acceptance, export, and push.
- Improve current-schema scope, migration handling, and static module resolution.
Existing privacy maps may require renewed classification review and sealing.
See the changelog for details. The release workflow publishes matching versions of noru-ci-action, noru-review-action, and noru-enforce-action.
v0.11.0
Provider-neutral privacy CI
- Add
privacy-datamap/scripts/check_privacy.pyfor offline baseline, taxonomy, review expiry, registered processing evidence and Fides export checks. - Add
privacy-datamap/scripts/publish_datamap.pyfor explicit REST publication from any CI provider. - Supply provenance through
--branchand--commit-sha, or neutralNORU_SOURCE_BRANCHandNORU_SOURCE_COMMIT_SHAvariables. - Parse generated block YAML and JSON without installing dependencies; reject duplicate keys and unsupported input.
- Add regression coverage and portable CI documentation.
Use the same Python minor version to create and check AST-based baselines. Publication replaces a complete source snapshot and requires an explicit --publish flag.
Documentation: https://github.com/noru-tech/noru-grc-engineering/blob/v0.11.0/docs/privacy-ci.md