Skill 45 · K9 Ownership Byod Setup
Subchapter 45.1
references/schema.mdMarkdown6 KBView on GitHub
| Column | Used By | Required | Description |
|---|---|---|---|
id | All | Yes | Unique row identifier (sequential integer) |
preference_type | All | Yes | Row discriminator: tag_mapping, exclusion, or prompt_text |
tag_key | tag_mapping | Yes | Tag key to match |
tag_value | tag_mapping | No | Tag value to match. Empty = matches any value for that key (wildcard) |
owner | tag_mapping | Yes | Owner handle to assign |
confidence | tag_mapping | Yes | high, medium, or low |
owner_type | tag_mapping | Yes | Owner type: team, user, or service |
handle | exclusion | Yes | Owner handle to exclude |
exclusion_type | exclusion | No | Owner type filter. Empty = all types |
exclusion_resource_type | exclusion | No | Resource type filter. Empty = all resource types |
prompt_text | prompt_text | Yes | Custom guidance text for the ownership engine |
priority | prompt_text | No | Ordering: high, medium, or low |
id,preference_type,tag_key,tag_value,owner,confidence,owner_type,handle,exclusion_type,exclusion_resource_type,prompt_text,priorityEach row gets a unique sequential id and fills columns relevant to its preference_type, leaving the rest empty.
A tag mapping says: “When a resource has tag X:Y, it belongs to this owner.”
The agent checks cloud resource tags against your mappings. When a match is found, the specified owner is added as a candidate. Multiple mappings can match the same resource, producing multiple candidates ranked alongside other data sources.
Tag mappings complement existing data sources — they do not override a direct ownership tag (like dd-team) already on the resource.
Columns: id (required), preference_type=tag_mapping, tag_key (required), tag_value (optional, empty=wildcard), owner (required), confidence (required: high/medium/low), owner_type (required: team/user/service).
Owner type guidance:
| Value | When to use |
|---|---|
team | The owner is a team handle (e.g., team-platform, sre-team) |
user | The owner is an individual (e.g., alice@example.com) |
service | The owner is a service or automation account (e.g., payment-svc) |
Confidence guidance:
| Level | When to use |
|---|---|
high | The tag reliably identifies the owner. Example: a cost-center tag that maps 1:1 to a team |
medium | The tag is a good indicator but may not always be correct. Example: a project tag shared across teams |
low | The tag provides a hint but needs corroboration. Example: an env tag that loosely correlates with a team |
Matching behavior:
Cost-Center matches cost-center.tag_value matches any value for that tag key (wildcard).Example rows:
1,tag_mapping,cost-center,CC-100,team-platform,high,team,,,,,
2,tag_mapping,managed-by,,team-infra,low,team,,,,,An exclusion says: “Never assign this handle as a resource owner.”
Bot accounts, CI runners, and shared service accounts often appear in cloud resource metadata. Exclusions remove these from ownership results.
Columns: id (required), preference_type=exclusion, handle (required), exclusion_type (optional), exclusion_resource_type (optional).
Matching behavior:
handle is matched case-insensitively.exclusion_type and exclusion_resource_type empty to exclude from all results (most common).Example rows:
1,exclusion,,,,,,deploy-bot,,,,
2,exclusion,,,,,,ci-runner,service,,,
3,exclusion,,,,,,k8s-node-controller,service,aws_ec2_instance,,Custom prompt text provides free-form guidance to the AI inference engine. Use it to share organizational context: naming conventions, team structures, which data sources to prioritize.
Up to 3 entries, one per priority level (high, medium, low). Entries with the same priority are concatenated.
Columns: id (required), preference_type=prompt_text, prompt_text (required, up to 4096 bytes), priority (optional, default: low).
Tips for effective guidance:
Example rows:
1,prompt_text,,,,,,,,,Our organization assigns ownership by cost center.,high
2,prompt_text,,,,,,,,,Shared infrastructure accounts should never be resource owners.,mediumAll-or-nothing: If any row fails validation, the entire preference set is rejected for that sync cycle. Preferences are left empty until a valid set is uploaded.
| Field type | Allowed characters | Applies to |
|---|---|---|
| Structured fields | Letters, digits, - _ . : / @ | tag_key, owner, handle, exclusion_type, exclusion_resource_type, owner_type, confidence, priority |
| Tag values | Same as structured fields, plus spaces | tag_value |
| Prompt text | Same as above, plus # , ; ! ? ( ) ' " backticks, spaces, tabs, newlines | prompt_text |
Not allowed in any field: Angle brackets (< >), curly braces ({ }), pipe characters (|).
| Limit | Value |
|---|---|
| Max tag mappings | 50 rows |
| Max exclusions | 20 rows |
| Max prompt text entries | 3 (one per priority: high, medium, low) |
| Max field length | 1,024 bytes |
| Max prompt text per entry | 4,096 bytes |
The agent rejects the entire set if it contains conflicts:
tag_key+tag_value with different owner = conflict. Same key+value+owner with different confidence = conflict. Exact duplicates are allowed.handle+exclusion_type+exclusion_resource_type = duplicate. Case-insensitive.