FAQ / Troubleshooting
Why are my assets not creating relationships automatically?
Make sure the column header exactly matches the target CSV filename. If you want a different relation type or target, use the explicit [[retype_relation]] directive in a model.
Why is an automatic relationship forming when I don’t want it to?
Auto-linking runs if a property name matches a known resource type. If you want to prevent this, prefix the property name with an underscore (_) in your CSV header or model property.
My numeric values are acting like floats instead of strings.
Rescile auto-converts values like “true” to booleans and “1.0” to floats. If you need them to stay strings (like a version number), prefix the CSV column header or the model property name with a tilde (~).
My quoted CSV cell with commas became an array.
Any comma-containing cell is auto-converted to an array — CSV quoting does not opt out, by design. Prefix the header with ~ (or declare the column type = "string" in a schema / [assets."<file>.csv".columns]) to keep the raw string. See Asset Management.
How do I view orphaned resources?
Run the rescile-ce binary without --remove-orphaned-assets. Orphans will appear in the graph, usually resulting from CSV rows that were never linked by models.
Why is my match_on condition failing for complex JSON?
Ensure you are using the expression operator with the jmespath filter. Simple value checks do not deeply parse JSON objects.
My model rules silently stopped applying after I added origin_resource.
origin_resource must be declared at column zero, before any rule tables such as [create_resource.properties]. If it appears after an opened rule table, the parser treats the remainder of the file as a new rule block with no origin — and the rules do nothing. A model file may contain several origin chunks; rescile starts a new chunk at every column-zero origin_resource = declaration. See Creating Resources.
The Vault Synchronizer registered the wrong client for my secret.
For USES_SECRET edges, the consumer (client) must always be the origin of the edge, pointing to the secret. When your model’s origin_resource is the secret itself, the default local_to_remote direction creates the edge backwards. Fix it with direction = "remote_to_local", or flip the context so the intended client is the origin. See Secrets & Vault.
Why do my model properties overwrite each other, but compliance properties merge into arrays?
In the model phase, later rules replace earlier properties on the same resource (last write wins). In the compliance phase, [[control]] properties are always aggregated: scalars are converted to arrays, duplicates are removed, and single-item arrays collapse back to scalars. This lets multiple control sources accumulate on the same resource without overwrites. See Graph Behavior and Merging Behavior.
I updated my asset but the graph didn’t update in the UI.
By default, rescile-ce serve watches local files and hot-reloads. If you modify a remote module’s git repo, you must restart or pull the latest changes.
How should I handle secrets or passwords in the graph?
Cryptographic material and secrets should not be stored as plaintext properties in your assets or models. Instead, Rescile promotes a Graph-Native Secrets Architecture. You should create logical secret nodes and link them to vault nodes using a STORED_IN edge. Your generated output artifacts (like shell scripts or Terraform) can then query the graph for the vault path and fetch the secret securely at execution time. See the Secrets & Vault reference for examples.