@rizom/ops 0.2.0-alpha.275 → 0.2.0-alpha.277
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/dist/brains-ops.js +142 -141
- package/dist/deploy.js +1 -1
- package/dist/directory-sync-stress-system.d.ts +21 -0
- package/dist/directory-sync-stress.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +231 -230
- package/dist/load-registry.d.ts +2 -0
- package/dist/run-command.d.ts +2 -1
- package/dist/schema.d.ts +2 -0
- package/package.json +1 -1
- package/templates/rover-pilot/.github/workflows/directory-sync-stress.yml +17 -1
- package/templates/rover-pilot/docs/operator-playbook.md +9 -2
package/dist/load-registry.d.ts
CHANGED
|
@@ -83,6 +83,8 @@ export interface ResolvedUserIdentity {
|
|
|
83
83
|
cloudflareZoneId?: string | undefined;
|
|
84
84
|
contentRepo: string;
|
|
85
85
|
profileKind?: string | undefined;
|
|
86
|
+
embeddingEnabled?: boolean | undefined;
|
|
87
|
+
topicExtractionEnabled?: boolean | undefined;
|
|
86
88
|
siteOverride?: ResolvedSiteOverride;
|
|
87
89
|
discordEnabled: boolean;
|
|
88
90
|
discordAnchorUserId?: string;
|
package/dist/run-command.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { type LookupHost } from "./observed-status";
|
|
|
5
5
|
import { type RunCommand as OpsRunCommand } from "./run-subprocess";
|
|
6
6
|
import { type SshKeygen } from "./ssh-key-bootstrap";
|
|
7
7
|
import type { UserRunner } from "./user-runner";
|
|
8
|
-
import type { cleanupDirectorySyncStress, runDeployedDirectorySyncStress } from "./directory-sync-stress-system";
|
|
8
|
+
import type { cleanupDirectorySyncStress, runDeployedDirectorySyncStress, verifyDirectorySyncStressAccess } from "./directory-sync-stress-system";
|
|
9
9
|
export interface CommandResult {
|
|
10
10
|
success: boolean;
|
|
11
11
|
message?: string;
|
|
@@ -19,6 +19,7 @@ export interface CommandDependencies extends LoadPilotRegistryOptions {
|
|
|
19
19
|
bootstrapRunCommand?: OpsRunCommand | undefined;
|
|
20
20
|
sshKeygen?: SshKeygen | undefined;
|
|
21
21
|
directorySyncStressRunner?: typeof runDeployedDirectorySyncStress | undefined;
|
|
22
|
+
directorySyncStressAccessRunner?: typeof verifyDirectorySyncStressAccess | undefined;
|
|
22
23
|
directorySyncStressCleanupRunner?: typeof cleanupDirectorySyncStress | undefined;
|
|
23
24
|
}
|
|
24
25
|
export declare const globalFlags: FlagDefinitions;
|
package/dist/schema.d.ts
CHANGED
|
@@ -118,6 +118,8 @@ export declare const userSchema: z.ZodObject<{
|
|
|
118
118
|
cloudflareZoneId: z.ZodOptional<z.ZodString>;
|
|
119
119
|
contentRepoOverride: z.ZodOptional<z.ZodString>;
|
|
120
120
|
profileKind: z.ZodOptional<typeof profileKindSchema>;
|
|
121
|
+
embeddingEnabled: z.ZodOptional<z.ZodBoolean>;
|
|
122
|
+
topicExtractionEnabled: z.ZodOptional<z.ZodBoolean>;
|
|
121
123
|
addOverride: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
122
124
|
removeOverride: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
123
125
|
siteOverride: z.ZodOptional<typeof siteOverrideSchema>;
|
package/package.json
CHANGED
|
@@ -23,6 +23,11 @@ on:
|
|
|
23
23
|
description: Type stress:<handle> to confirm reversible content writes
|
|
24
24
|
required: true
|
|
25
25
|
type: string
|
|
26
|
+
verify_only:
|
|
27
|
+
description: Verify the content credential path without remote writes or a workload
|
|
28
|
+
required: false
|
|
29
|
+
type: boolean
|
|
30
|
+
default: false
|
|
26
31
|
|
|
27
32
|
permissions:
|
|
28
33
|
contents: read
|
|
@@ -48,7 +53,18 @@ jobs:
|
|
|
48
53
|
env:
|
|
49
54
|
BWS_ACCESS_TOKEN: ${{ secrets.BWS_ACCESS_TOKEN }}
|
|
50
55
|
|
|
56
|
+
- name: Verify smoke directory-sync credential path
|
|
57
|
+
if: ${{ github.event_name != 'schedule' && inputs.verify_only }}
|
|
58
|
+
env:
|
|
59
|
+
HANDLE_INPUT: ${{ inputs.handle }}
|
|
60
|
+
CONFIRM_INPUT: ${{ inputs.confirm }}
|
|
61
|
+
run: |
|
|
62
|
+
bunx brains-ops stress:directory-sync:verify-access "$GITHUB_WORKSPACE" "$HANDLE_INPUT" \
|
|
63
|
+
--confirm "$CONFIRM_INPUT" \
|
|
64
|
+
--artifacts-dir "$RUNNER_TEMP/directory-sync-stress"
|
|
65
|
+
|
|
51
66
|
- name: Run smoke directory-sync stress profile
|
|
67
|
+
if: ${{ github.event_name == 'schedule' || !inputs.verify_only }}
|
|
52
68
|
env:
|
|
53
69
|
HANDLE_INPUT: ${{ github.event_name == 'schedule' && 'smoke' || inputs.handle }}
|
|
54
70
|
PROFILE_INPUT: ${{ github.event_name == 'schedule' && 'regression' || inputs.profile }}
|
|
@@ -69,7 +85,7 @@ jobs:
|
|
|
69
85
|
|
|
70
86
|
cleanup:
|
|
71
87
|
needs: stress
|
|
72
|
-
if: always()
|
|
88
|
+
if: ${{ always() && (github.event_name == 'schedule' || !inputs.verify_only) }}
|
|
73
89
|
runs-on: ubuntu-latest
|
|
74
90
|
timeout-minutes: 20
|
|
75
91
|
steps:
|
|
@@ -69,7 +69,14 @@ If any gate fails, disable all three workflows again. Restore the prior pilot de
|
|
|
69
69
|
|
|
70
70
|
## Directory-sync stress gate
|
|
71
71
|
|
|
72
|
-
Use the manual `Directory Sync Stress` workflow only against a disposable smoke user. It refuses a target unless the handle, domain, and content repository all identify smoke
|
|
72
|
+
Use the manual `Directory Sync Stress` workflow only against a disposable smoke user. It refuses a target unless the handle, domain, and content repository all identify smoke, the confirmation input exactly matches `stress:<handle>`, and the user desired state declares the hermetic posture below. Reconcile and deploy this posture before running the workload:
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
embeddingEnabled: false
|
|
76
|
+
topicExtractionEnabled: false
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Before authorizing a workload, dispatch the workflow once with `verify_only: true`. That mode loads the same Bitwarden/Varlock content credential, clones the smoke content repository, and runs `git push --dry-run` against a temporary stress ref. It creates no ref, performs no content write, does not contact the deployed runtime, and skips cleanup because no probes were created.
|
|
73
80
|
|
|
74
81
|
Profiles are deterministic and reversible:
|
|
75
82
|
|
|
@@ -77,7 +84,7 @@ Profiles are deterministic and reversible:
|
|
|
77
84
|
- `load`: ramps to 350 probes, updates all, renames 100, updates again, then deletes all;
|
|
78
85
|
- `stress`: ramps to 700 probes and renames 200 before cleanup.
|
|
79
86
|
|
|
80
|
-
The workflow loads operator credentials through Bitwarden/Varlock, but it is separate from Deploy and cannot deploy an image. It creates a rollback branch before the first content write, gates on health timeouts during the monitored workload window, preserves warmup and cleanup samples as evidence, uploads JSON/Markdown/runtime artifacts, and runs an independent idempotent cleanup job with `if: always()`. Once cleanup confirms that no probes remain, it also prunes retained `ops/directory-sync-stress-backup-*` branches; if probes remain, the branches stay available for recovery.
|
|
87
|
+
The workflow loads operator credentials through Bitwarden/Varlock, but it is separate from Deploy and cannot deploy an image. It creates a rollback branch before the first content write, gates on health timeouts, watchdog restarts, and external AI usage during the monitored workload window, preserves warmup and cleanup samples as evidence, uploads JSON/Markdown/runtime artifacts, and runs an independent idempotent cleanup job with `if: always()`. Once cleanup confirms that no probes remain, it also prunes retained `ops/directory-sync-stress-backup-*` branches; if probes remain, the branches stay available for recovery.
|
|
81
88
|
|
|
82
89
|
Treat any gated health failure, restart, OOM, residual probe, or entity-baseline drift as a failed gate. Do not restart the target during measurement. Recovery is a separate operator action after evidence collection.
|
|
83
90
|
|