@elevasis/sdk 1.6.0 → 1.8.0
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/dist/cli.cjs +527 -4564
- package/dist/index.d.ts +72 -16
- package/package.json +2 -2
- package/reference/claude-config/hooks/post-edit-validate.mjs +0 -11
- package/reference/claude-config/hooks/scaffold-registry-reminder.mjs +188 -0
- package/reference/claude-config/logs/pre-edit-vibe-gate.log +40 -0
- package/reference/claude-config/logs/scaffold-registry-reminder.log +17 -0
- package/reference/claude-config/rules/active-change-index.md +80 -0
- package/reference/claude-config/rules/agent-start-here.md +254 -0
- package/reference/claude-config/rules/deployment.md +0 -1
- package/reference/claude-config/rules/observability.md +2 -2
- package/reference/claude-config/rules/operations.md +64 -0
- package/reference/claude-config/rules/organization-model.md +44 -0
- package/reference/claude-config/rules/organization-os.md +56 -11
- package/reference/claude-config/rules/task-tracking.md +4 -4
- package/reference/claude-config/rules/ui.md +202 -0
- package/reference/claude-config/rules/vibe.md +202 -0
- package/reference/claude-config/settings.json +4 -0
- package/reference/claude-config/skills/configure/SKILL.md +98 -0
- package/reference/claude-config/skills/configure/operations/codify-level-a.md +100 -0
- package/reference/claude-config/skills/configure/operations/codify-level-b.md +158 -0
- package/reference/claude-config/skills/configure/operations/customers.md +150 -0
- package/reference/claude-config/skills/configure/operations/features.md +161 -0
- package/reference/claude-config/skills/configure/operations/goals.md +147 -0
- package/reference/claude-config/skills/configure/operations/identity.md +133 -0
- package/reference/claude-config/skills/configure/operations/labels.md +128 -0
- package/reference/claude-config/skills/configure/operations/offerings.md +159 -0
- package/reference/claude-config/skills/configure/operations/roles.md +153 -0
- package/reference/claude-config/skills/configure/operations/techStack.md +139 -0
- package/reference/claude-config/skills/deploy/SKILL.md +3 -13
- package/reference/claude-config/skills/dsp/SKILL.md +2 -2
- package/reference/claude-config/skills/elevasis/SKILL.md +0 -4
- package/reference/claude-config/skills/explore/SKILL.md +5 -5
- package/reference/claude-config/skills/project/SKILL.md +1 -1
- package/reference/claude-config/skills/save/SKILL.md +5 -19
- package/reference/claude-config/skills/setup/SKILL.md +105 -40
- package/reference/claude-config/skills/status/SKILL.md +2 -3
- package/reference/claude-config/skills/submit-request/SKILL.md +1 -1
- package/reference/deployment/command-center.mdx +0 -17
- package/reference/framework/project-structure.mdx +1 -5
- package/reference/packages/core/src/organization-model/README.md +16 -12
- package/reference/packages/ui/src/hooks/README.md +1 -2
- package/reference/scaffold/core/organization-graph.mdx +1 -0
- package/reference/scaffold/core/organization-model.mdx +84 -19
- package/reference/scaffold/operations/propagation-pipeline.md +10 -11
- package/reference/scaffold/operations/scaffold-maintenance.md +1 -4
- package/reference/scaffold/recipes/add-a-feature.md +1 -1
- package/reference/scaffold/recipes/add-a-resource.md +3 -12
- package/reference/scaffold/recipes/customize-organization-model.md +5 -5
- package/reference/scaffold/recipes/gate-by-feature-or-admin.md +3 -3
- package/reference/scaffold/reference/contracts.md +115 -7
- package/reference/scaffold/reference/glossary.md +25 -4
- package/reference/claude-config/rules/docs.md +0 -26
package/dist/index.d.ts
CHANGED
|
@@ -2425,10 +2425,8 @@ type Database = {
|
|
|
2425
2425
|
};
|
|
2426
2426
|
deployments: {
|
|
2427
2427
|
Row: {
|
|
2428
|
-
compiled_docs: Json | null;
|
|
2429
2428
|
created_at: string;
|
|
2430
2429
|
deployment_version: string | null;
|
|
2431
|
-
documentation: Json | null;
|
|
2432
2430
|
error_message: string | null;
|
|
2433
2431
|
id: string;
|
|
2434
2432
|
organization_id: string;
|
|
@@ -2440,10 +2438,8 @@ type Database = {
|
|
|
2440
2438
|
updated_at: string;
|
|
2441
2439
|
};
|
|
2442
2440
|
Insert: {
|
|
2443
|
-
compiled_docs?: Json | null;
|
|
2444
2441
|
created_at?: string;
|
|
2445
2442
|
deployment_version?: string | null;
|
|
2446
|
-
documentation?: Json | null;
|
|
2447
2443
|
error_message?: string | null;
|
|
2448
2444
|
id?: string;
|
|
2449
2445
|
organization_id: string;
|
|
@@ -2455,10 +2451,8 @@ type Database = {
|
|
|
2455
2451
|
updated_at?: string;
|
|
2456
2452
|
};
|
|
2457
2453
|
Update: {
|
|
2458
|
-
compiled_docs?: Json | null;
|
|
2459
2454
|
created_at?: string;
|
|
2460
2455
|
deployment_version?: string | null;
|
|
2461
|
-
documentation?: Json | null;
|
|
2462
2456
|
error_message?: string | null;
|
|
2463
2457
|
id?: string;
|
|
2464
2458
|
organization_id?: string;
|
|
@@ -2970,6 +2964,13 @@ type Database = {
|
|
|
2970
2964
|
updated_at?: string;
|
|
2971
2965
|
};
|
|
2972
2966
|
Relationships: [
|
|
2967
|
+
{
|
|
2968
|
+
foreignKeyName: "fk_milestones_project";
|
|
2969
|
+
columns: ["project_id"];
|
|
2970
|
+
isOneToOne: false;
|
|
2971
|
+
referencedRelation: "prj_projects";
|
|
2972
|
+
referencedColumns: ["id"];
|
|
2973
|
+
},
|
|
2973
2974
|
{
|
|
2974
2975
|
foreignKeyName: "prj_milestones_organization_id_fkey";
|
|
2975
2976
|
columns: ["organization_id"];
|
|
@@ -3030,6 +3031,34 @@ type Database = {
|
|
|
3030
3031
|
type?: string;
|
|
3031
3032
|
};
|
|
3032
3033
|
Relationships: [
|
|
3034
|
+
{
|
|
3035
|
+
foreignKeyName: "fk_notes_created_by";
|
|
3036
|
+
columns: ["created_by"];
|
|
3037
|
+
isOneToOne: false;
|
|
3038
|
+
referencedRelation: "users";
|
|
3039
|
+
referencedColumns: ["id"];
|
|
3040
|
+
},
|
|
3041
|
+
{
|
|
3042
|
+
foreignKeyName: "fk_notes_milestone";
|
|
3043
|
+
columns: ["milestone_id"];
|
|
3044
|
+
isOneToOne: false;
|
|
3045
|
+
referencedRelation: "prj_milestones";
|
|
3046
|
+
referencedColumns: ["id"];
|
|
3047
|
+
},
|
|
3048
|
+
{
|
|
3049
|
+
foreignKeyName: "fk_notes_project";
|
|
3050
|
+
columns: ["project_id"];
|
|
3051
|
+
isOneToOne: false;
|
|
3052
|
+
referencedRelation: "prj_projects";
|
|
3053
|
+
referencedColumns: ["id"];
|
|
3054
|
+
},
|
|
3055
|
+
{
|
|
3056
|
+
foreignKeyName: "fk_notes_task";
|
|
3057
|
+
columns: ["task_id"];
|
|
3058
|
+
isOneToOne: false;
|
|
3059
|
+
referencedRelation: "prj_tasks";
|
|
3060
|
+
referencedColumns: ["id"];
|
|
3061
|
+
},
|
|
3033
3062
|
{
|
|
3034
3063
|
foreignKeyName: "prj_notes_created_by_fkey";
|
|
3035
3064
|
columns: ["created_by"];
|
|
@@ -3120,6 +3149,20 @@ type Database = {
|
|
|
3120
3149
|
updated_at?: string;
|
|
3121
3150
|
};
|
|
3122
3151
|
Relationships: [
|
|
3152
|
+
{
|
|
3153
|
+
foreignKeyName: "fk_projects_company";
|
|
3154
|
+
columns: ["client_company_id"];
|
|
3155
|
+
isOneToOne: false;
|
|
3156
|
+
referencedRelation: "acq_companies";
|
|
3157
|
+
referencedColumns: ["id"];
|
|
3158
|
+
},
|
|
3159
|
+
{
|
|
3160
|
+
foreignKeyName: "fk_projects_deal";
|
|
3161
|
+
columns: ["deal_id"];
|
|
3162
|
+
isOneToOne: false;
|
|
3163
|
+
referencedRelation: "acq_deals";
|
|
3164
|
+
referencedColumns: ["id"];
|
|
3165
|
+
},
|
|
3123
3166
|
{
|
|
3124
3167
|
foreignKeyName: "prj_projects_client_company_id_fkey";
|
|
3125
3168
|
columns: ["client_company_id"];
|
|
@@ -3202,6 +3245,27 @@ type Database = {
|
|
|
3202
3245
|
updated_at?: string;
|
|
3203
3246
|
};
|
|
3204
3247
|
Relationships: [
|
|
3248
|
+
{
|
|
3249
|
+
foreignKeyName: "fk_tasks_milestone";
|
|
3250
|
+
columns: ["milestone_id"];
|
|
3251
|
+
isOneToOne: false;
|
|
3252
|
+
referencedRelation: "prj_milestones";
|
|
3253
|
+
referencedColumns: ["id"];
|
|
3254
|
+
},
|
|
3255
|
+
{
|
|
3256
|
+
foreignKeyName: "fk_tasks_parent";
|
|
3257
|
+
columns: ["parent_task_id"];
|
|
3258
|
+
isOneToOne: false;
|
|
3259
|
+
referencedRelation: "prj_tasks";
|
|
3260
|
+
referencedColumns: ["id"];
|
|
3261
|
+
},
|
|
3262
|
+
{
|
|
3263
|
+
foreignKeyName: "fk_tasks_project";
|
|
3264
|
+
columns: ["project_id"];
|
|
3265
|
+
isOneToOne: false;
|
|
3266
|
+
referencedRelation: "prj_projects";
|
|
3267
|
+
referencedColumns: ["id"];
|
|
3268
|
+
},
|
|
3205
3269
|
{
|
|
3206
3270
|
foreignKeyName: "prj_tasks_milestone_id_fkey";
|
|
3207
3271
|
columns: ["milestone_id"];
|
|
@@ -6569,8 +6633,8 @@ declare const ProjectSchemas: {
|
|
|
6569
6633
|
type: z.ZodOptional<z.ZodEnum<{
|
|
6570
6634
|
code: "code";
|
|
6571
6635
|
other: "other";
|
|
6572
|
-
documentation: "documentation";
|
|
6573
6636
|
research: "research";
|
|
6637
|
+
documentation: "documentation";
|
|
6574
6638
|
report: "report";
|
|
6575
6639
|
design: "design";
|
|
6576
6640
|
refactor: "refactor";
|
|
@@ -6605,8 +6669,8 @@ declare const ProjectSchemas: {
|
|
|
6605
6669
|
type: z.ZodOptional<z.ZodEnum<{
|
|
6606
6670
|
code: "code";
|
|
6607
6671
|
other: "other";
|
|
6608
|
-
documentation: "documentation";
|
|
6609
6672
|
research: "research";
|
|
6673
|
+
documentation: "documentation";
|
|
6610
6674
|
report: "report";
|
|
6611
6675
|
design: "design";
|
|
6612
6676
|
refactor: "refactor";
|
|
@@ -8677,14 +8741,6 @@ interface ElevasConfig {
|
|
|
8677
8741
|
dev?: {
|
|
8678
8742
|
port?: number;
|
|
8679
8743
|
};
|
|
8680
|
-
/**
|
|
8681
|
-
* Directory (relative to CWD) to scan for deployable documentation.
|
|
8682
|
-
* Defaults to 'docs'. Use '../docs' when running the SDK from a subdirectory
|
|
8683
|
-
* and wanting to consolidate docs at the project root.
|
|
8684
|
-
*
|
|
8685
|
-
* Set to `false` to disable documentation scanning entirely.
|
|
8686
|
-
*/
|
|
8687
|
-
docsDir?: string | false;
|
|
8688
8744
|
}
|
|
8689
8745
|
|
|
8690
8746
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elevasis/sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "SDK for building Elevasis organization resources",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"tsup": "^8.0.0",
|
|
45
45
|
"typescript": "5.9.2",
|
|
46
46
|
"zod": "^4.1.0",
|
|
47
|
-
"@repo/core": "0.
|
|
47
|
+
"@repo/core": "0.7.0",
|
|
48
48
|
"@repo/typescript-config": "0.0.0"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
@@ -42,17 +42,6 @@ try {
|
|
|
42
42
|
|
|
43
43
|
const results = []
|
|
44
44
|
|
|
45
|
-
// 0. Frontmatter check for docs/*.md (except docs/index.md which is auto-generated)
|
|
46
|
-
const docsDir = normalize(join(ROOT, 'docs'))
|
|
47
|
-
const indexPath = normalize(join(docsDir, 'index.md'))
|
|
48
|
-
if (ext === '.md' && absPath.startsWith(docsDir) && absPath !== indexPath) {
|
|
49
|
-
const content = readFileSync(absPath, 'utf-8')
|
|
50
|
-
if (!content.startsWith('---\n') && !content.startsWith('---\r\n')) {
|
|
51
|
-
const rel = relative(ROOT, absPath).replace(/\\/g, '/')
|
|
52
|
-
results.push(`Missing frontmatter in ${rel}. All docs require:\n---\ntitle: ...\ndescription: ...\n---`)
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
45
|
// 1. Prettier (skip silently if not installed yet, e.g. before first pnpm install)
|
|
57
46
|
if (PRETTIER_EXTENSIONS.has(ext)) {
|
|
58
47
|
try {
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// scaffold-registry-reminder.mjs
|
|
3
|
+
// PostToolUse hook — reads the compiled scaffold registry and emits advisory
|
|
4
|
+
// reminders when an edited file matches a registry source pattern.
|
|
5
|
+
//
|
|
6
|
+
// Template twin of the monorepo hook. Gracefully no-ops when the compiled
|
|
7
|
+
// registry is absent (e.g. before SDK delivers scaffold-registry.compiled.json
|
|
8
|
+
// to external projects — Step 7/SDK milestone).
|
|
9
|
+
//
|
|
10
|
+
// Exit 0 always (advisory hook — never blocks).
|
|
11
|
+
|
|
12
|
+
import { readFileSync, writeFileSync, mkdirSync, appendFileSync } from 'node:fs'
|
|
13
|
+
import { join, normalize, relative } from 'node:path'
|
|
14
|
+
|
|
15
|
+
const ROOT = process.env.CLAUDE_PROJECT_DIR ?? process.cwd()
|
|
16
|
+
const LOG_DIR = join(ROOT, '.claude', 'logs')
|
|
17
|
+
const LOG_FILE = join(LOG_DIR, 'scaffold-registry-reminder.log')
|
|
18
|
+
const STATE_FILE = join(LOG_DIR, 'scaffold-registry-reminder.state.json')
|
|
19
|
+
const REGISTRY_FILE = join(ROOT, '.claude', 'scaffold-registry.compiled.json')
|
|
20
|
+
|
|
21
|
+
const DEFAULT_COOLDOWN_MS = 300_000 // 5 minutes
|
|
22
|
+
|
|
23
|
+
const GENERATED_DIR_SEGMENTS = ['_generated', '_gen']
|
|
24
|
+
const GENERATED_CONTENT_MARKER = '@generated'
|
|
25
|
+
|
|
26
|
+
function log(msg) {
|
|
27
|
+
try {
|
|
28
|
+
mkdirSync(LOG_DIR, { recursive: true })
|
|
29
|
+
appendFileSync(LOG_FILE, `[${new Date().toISOString()}] ${msg}\n`)
|
|
30
|
+
} catch {}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function pathMatchesPattern(filePath, pattern) {
|
|
34
|
+
const normalizedFile = filePath.replace(/\\/g, '/')
|
|
35
|
+
const normalizedPattern = pattern.replace(/\\/g, '/')
|
|
36
|
+
|
|
37
|
+
if (normalizedFile === normalizedPattern) return true
|
|
38
|
+
|
|
39
|
+
if (normalizedPattern.endsWith('/**') || normalizedPattern.endsWith('/*')) {
|
|
40
|
+
const prefix = normalizedPattern.slice(0, normalizedPattern.lastIndexOf('/*'))
|
|
41
|
+
return normalizedFile.startsWith(prefix + '/')
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (normalizedPattern.includes('*')) {
|
|
45
|
+
const escaped = normalizedPattern.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '[^/]*')
|
|
46
|
+
return new RegExp(`^${escaped}$`).test(normalizedFile)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return normalizedFile.startsWith(normalizedPattern + '/')
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function loadState() {
|
|
53
|
+
try {
|
|
54
|
+
return JSON.parse(readFileSync(STATE_FILE, 'utf-8'))
|
|
55
|
+
} catch {
|
|
56
|
+
return {}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function saveState(state) {
|
|
61
|
+
try {
|
|
62
|
+
mkdirSync(LOG_DIR, { recursive: true })
|
|
63
|
+
writeFileSync(STATE_FILE, JSON.stringify(state, null, 2) + '\n', 'utf-8')
|
|
64
|
+
} catch {}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function throttleKey(entryId, filePath) {
|
|
68
|
+
return `${entryId}:${filePath}`
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function isCoolingDown(state, key, cooldownMs) {
|
|
72
|
+
const last = state[key]
|
|
73
|
+
if (!last) return false
|
|
74
|
+
return Date.now() - last < cooldownMs
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function formatDependentLine(dep) {
|
|
78
|
+
const regen = dep.regen === 'manual' ? 'manual check' : dep.regen
|
|
79
|
+
const hint = dep.hint ? ` [${dep.hint}]` : ''
|
|
80
|
+
return ` - ${dep.path} -> ${regen}${hint}`
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function emitReminder(entry, relFilePath) {
|
|
84
|
+
const lines = [
|
|
85
|
+
`\uD83D\uDD14 Scaffold reminder -- ${entry.id} (${relFilePath})`,
|
|
86
|
+
` Downstream scaffolds that may need updating:`
|
|
87
|
+
]
|
|
88
|
+
for (const dep of entry.dependents) {
|
|
89
|
+
lines.push(formatDependentLine(dep))
|
|
90
|
+
}
|
|
91
|
+
lines.push(
|
|
92
|
+
` If this is a scaffold-sensitive pattern not in the registry, also add an entry to .claude/scaffold-registry.yml.`
|
|
93
|
+
)
|
|
94
|
+
return lines.join('\n')
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function emitMissingEntryHint(relFilePath) {
|
|
98
|
+
return [
|
|
99
|
+
`\uD83D\uDD14 Scaffold reminder -- unregistered generated path (${relFilePath})`,
|
|
100
|
+
` This path looks scaffold-generated but has no registry entry.`,
|
|
101
|
+
` If it is scaffold-sensitive, add a new entry to .claude/scaffold-registry.yml`,
|
|
102
|
+
` so the reminder hook and /work handoff can track it.`
|
|
103
|
+
].join('\n')
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function looksLikeGeneratedPath(filePath) {
|
|
107
|
+
const normalizedFile = filePath.replace(/\\/g, '/')
|
|
108
|
+
const segments = normalizedFile.split('/')
|
|
109
|
+
return segments.some((seg) => GENERATED_DIR_SEGMENTS.includes(seg))
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function looksLikeGeneratedContent(absFilePath) {
|
|
113
|
+
try {
|
|
114
|
+
const content = readFileSync(absFilePath, 'utf-8').slice(0, 500)
|
|
115
|
+
return content.includes(GENERATED_CONTENT_MARKER)
|
|
116
|
+
} catch {
|
|
117
|
+
return false
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
try {
|
|
122
|
+
const chunks = []
|
|
123
|
+
for await (const chunk of process.stdin) chunks.push(chunk)
|
|
124
|
+
const input = JSON.parse(Buffer.concat(chunks).toString())
|
|
125
|
+
|
|
126
|
+
const rawFilePath = input.tool_input?.file_path
|
|
127
|
+
if (!rawFilePath) process.exit(0)
|
|
128
|
+
|
|
129
|
+
const absFilePath = normalize(rawFilePath)
|
|
130
|
+
const relFilePath = relative(ROOT, absFilePath).replace(/\\/g, '/')
|
|
131
|
+
|
|
132
|
+
// Graceful no-op when registry is absent (pre-SDK-delivery state)
|
|
133
|
+
let registry
|
|
134
|
+
try {
|
|
135
|
+
const raw = readFileSync(REGISTRY_FILE, 'utf-8')
|
|
136
|
+
registry = JSON.parse(raw)
|
|
137
|
+
} catch {
|
|
138
|
+
log(`SKIP — registry not found (pre-SDK-delivery)`)
|
|
139
|
+
process.exit(0)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const entries = registry?.entries ?? []
|
|
143
|
+
|
|
144
|
+
const matched = entries.filter((entry) =>
|
|
145
|
+
(entry.sources ?? []).some((pattern) => pathMatchesPattern(relFilePath, pattern))
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
const state = loadState()
|
|
149
|
+
const now = Date.now()
|
|
150
|
+
const messages = []
|
|
151
|
+
|
|
152
|
+
if (matched.length > 0) {
|
|
153
|
+
for (const entry of matched) {
|
|
154
|
+
const key = throttleKey(entry.id, relFilePath)
|
|
155
|
+
const cooldown = entry.cooldown_ms ?? DEFAULT_COOLDOWN_MS
|
|
156
|
+
if (isCoolingDown(state, key, cooldown)) {
|
|
157
|
+
log(`THROTTLED — ${entry.id} for ${relFilePath}`)
|
|
158
|
+
continue
|
|
159
|
+
}
|
|
160
|
+
messages.push(emitReminder(entry, relFilePath))
|
|
161
|
+
state[key] = now
|
|
162
|
+
log(`EMITTED — ${entry.id} for ${relFilePath}`)
|
|
163
|
+
}
|
|
164
|
+
} else {
|
|
165
|
+
const isGenerated = looksLikeGeneratedPath(relFilePath) || looksLikeGeneratedContent(absFilePath)
|
|
166
|
+
|
|
167
|
+
if (isGenerated) {
|
|
168
|
+
const key = throttleKey('__missing__', relFilePath)
|
|
169
|
+
if (!isCoolingDown(state, key, DEFAULT_COOLDOWN_MS)) {
|
|
170
|
+
messages.push(emitMissingEntryHint(relFilePath))
|
|
171
|
+
state[key] = now
|
|
172
|
+
log(`EMITTED missing-entry hint for ${relFilePath}`)
|
|
173
|
+
} else {
|
|
174
|
+
log(`THROTTLED missing-entry hint for ${relFilePath}`)
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (messages.length > 0) {
|
|
180
|
+
saveState(state)
|
|
181
|
+
process.stderr.write(messages.join('\n\n') + '\n')
|
|
182
|
+
process.exit(2)
|
|
183
|
+
}
|
|
184
|
+
} catch (err) {
|
|
185
|
+
log(`ERROR: ${err.message}`)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
process.exit(0)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
[2026-04-20T09:29:53.658Z] tool=Write path=../../foundations/config/organization-model.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
2
|
+
[2026-04-20T09:29:53.702Z] tool=Edit path=../../foundations/config/extensions/deal-ecom.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
3
|
+
[2026-04-20T09:29:53.747Z] tool=MultiEdit path=../../foundations/config/organization-model.override.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
4
|
+
[2026-04-20T09:29:53.793Z] tool=Write path=../../foundations/config/organization-model.ts protected=false VIBE_APPROVED=true decision=ALLOW
|
|
5
|
+
[2026-04-20T09:29:53.837Z] tool=Edit path=../../foundations/config/extensions/deal-ecom.ts protected=false VIBE_APPROVED=true decision=ALLOW
|
|
6
|
+
[2026-04-20T09:29:53.890Z] tool=Write path=../../ui/src/routes/__root.tsx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
7
|
+
[2026-04-20T09:29:53.934Z] tool=Edit path=../../operations/src/index.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
8
|
+
[2026-04-20T09:32:06.844Z] tool=Write path=../../foundations/config/organization-model.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
9
|
+
[2026-04-20T09:32:06.890Z] tool=Edit path=../../foundations/config/extensions/deal-ecom.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
10
|
+
[2026-04-20T09:32:06.934Z] tool=MultiEdit path=../../foundations/config/organization-model.override.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
11
|
+
[2026-04-20T09:32:06.978Z] tool=Write path=../../foundations/config/organization-model.ts protected=false VIBE_APPROVED=true decision=ALLOW
|
|
12
|
+
[2026-04-20T09:32:07.021Z] tool=Edit path=../../foundations/config/extensions/deal-ecom.ts protected=false VIBE_APPROVED=true decision=ALLOW
|
|
13
|
+
[2026-04-20T09:32:07.065Z] tool=Write path=../../ui/src/routes/__root.tsx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
14
|
+
[2026-04-20T09:32:07.109Z] tool=Edit path=../../operations/src/index.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
15
|
+
[2026-04-20T09:32:30.340Z] tool=Write path=../../foundations/config/organization-model.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
16
|
+
[2026-04-20T09:38:14.624Z] tool=Write path=../../foundations/config/organization-model.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
17
|
+
[2026-04-20T09:40:20.586Z] tool=Write path=foundations/config/organization-model.ts protected=true VIBE_APPROVED=false decision=BLOCK
|
|
18
|
+
[2026-04-20T09:40:20.631Z] tool=Edit path=foundations/config/extensions/deal-ecom.ts protected=true VIBE_APPROVED=false decision=BLOCK
|
|
19
|
+
[2026-04-20T09:40:20.674Z] tool=MultiEdit path=foundations/config/organization-model.override.ts protected=true VIBE_APPROVED=false decision=BLOCK
|
|
20
|
+
[2026-04-20T09:40:20.718Z] tool=Write path=foundations/config/organization-model.ts protected=true VIBE_APPROVED=true decision=ALLOW
|
|
21
|
+
[2026-04-20T09:40:20.762Z] tool=Edit path=foundations/config/extensions/deal-ecom.ts protected=true VIBE_APPROVED=true decision=ALLOW
|
|
22
|
+
[2026-04-20T09:40:20.807Z] tool=Write path=ui/src/routes/__root.tsx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
23
|
+
[2026-04-20T09:40:20.905Z] tool=Edit path=operations/src/index.ts protected=false VIBE_APPROVED=false decision=ALLOW
|
|
24
|
+
[2026-04-21T02:33:54.792Z] tool=Write path=../../apps/docs/content/docs/in-progress/active-development/elevasis-sdk-cli-audit/index.mdx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
25
|
+
[2026-04-21T02:34:53.555Z] tool=Edit path=CLAUDE.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
26
|
+
[2026-04-21T02:34:54.867Z] tool=Edit path=.claude/skills/deploy/SKILL.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
27
|
+
[2026-04-21T02:35:01.437Z] tool=Edit path=.claude/skills/project/SKILL.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
28
|
+
[2026-04-21T02:35:12.254Z] tool=Edit path=.claude/skills/deploy/SKILL.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
29
|
+
[2026-04-21T02:35:14.878Z] tool=Edit path=.claude/skills/status/SKILL.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
30
|
+
[2026-04-21T02:35:16.589Z] tool=Edit path=.claude/rules/observability.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
31
|
+
[2026-04-21T02:35:22.331Z] tool=Edit path=.claude/skills/save/SKILL.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
32
|
+
[2026-04-21T02:35:23.493Z] tool=Edit path=.claude/skills/save/SKILL.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
33
|
+
[2026-04-21T02:35:24.652Z] tool=Edit path=.claude/skills/save/SKILL.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
34
|
+
[2026-04-21T02:35:40.826Z] tool=Edit path=.claude/skills/submit-request/SKILL.md protected=false VIBE_APPROVED=false decision=ALLOW
|
|
35
|
+
[2026-04-21T02:35:46.042Z] tool=Edit path=../../apps/docs/content/docs/in-progress/active-development/elevasis-sdk-cli-audit/index.mdx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
36
|
+
[2026-04-21T02:35:52.609Z] tool=Edit path=../../apps/docs/content/docs/in-progress/active-development/elevasis-sdk-cli-audit/index.mdx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
37
|
+
[2026-04-21T02:38:11.027Z] tool=Edit path=../../apps/docs/content/docs/in-progress/active-development/elevasis-sdk-cli-audit/index.mdx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
38
|
+
[2026-04-21T02:40:59.364Z] tool=Edit path=../../apps/docs/content/docs/in-progress/active-development/elevasis-sdk-cli-audit/index.mdx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
39
|
+
[2026-04-21T02:46:47.829Z] tool=Edit path=../../apps/docs/content/docs/in-progress/active-development/elevasis-sdk-cli-audit/index.mdx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
40
|
+
[2026-04-21T02:46:54.250Z] tool=Edit path=../../apps/docs/content/docs/in-progress/active-development/elevasis-sdk-cli-audit/index.mdx protected=false VIBE_APPROVED=false decision=ALLOW
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
[2026-04-21T02:33:54.962Z] SKIP — registry not found (pre-SDK-delivery)
|
|
2
|
+
[2026-04-21T02:34:53.682Z] SKIP — registry not found (pre-SDK-delivery)
|
|
3
|
+
[2026-04-21T02:35:00.720Z] SKIP — registry not found (pre-SDK-delivery)
|
|
4
|
+
[2026-04-21T02:35:01.648Z] SKIP — registry not found (pre-SDK-delivery)
|
|
5
|
+
[2026-04-21T02:35:12.366Z] SKIP — registry not found (pre-SDK-delivery)
|
|
6
|
+
[2026-04-21T02:35:15.057Z] SKIP — registry not found (pre-SDK-delivery)
|
|
7
|
+
[2026-04-21T02:35:16.874Z] SKIP — registry not found (pre-SDK-delivery)
|
|
8
|
+
[2026-04-21T02:35:22.469Z] SKIP — registry not found (pre-SDK-delivery)
|
|
9
|
+
[2026-04-21T02:35:23.677Z] SKIP — registry not found (pre-SDK-delivery)
|
|
10
|
+
[2026-04-21T02:35:24.831Z] SKIP — registry not found (pre-SDK-delivery)
|
|
11
|
+
[2026-04-21T02:35:41.027Z] SKIP — registry not found (pre-SDK-delivery)
|
|
12
|
+
[2026-04-21T02:35:46.206Z] SKIP — registry not found (pre-SDK-delivery)
|
|
13
|
+
[2026-04-21T02:35:52.776Z] SKIP — registry not found (pre-SDK-delivery)
|
|
14
|
+
[2026-04-21T02:38:11.201Z] SKIP — registry not found (pre-SDK-delivery)
|
|
15
|
+
[2026-04-21T02:40:59.696Z] SKIP — registry not found (pre-SDK-delivery)
|
|
16
|
+
[2026-04-21T02:46:47.986Z] SKIP — registry not found (pre-SDK-delivery)
|
|
17
|
+
[2026-04-21T02:46:54.532Z] SKIP — registry not found (pre-SDK-delivery)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Bridge between stable scaffold docs and higher-volatility in-progress architecture work that may override assumptions for agents working in the template
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Active Change Index
|
|
6
|
+
|
|
7
|
+
Use this rule to decide whether stable scaffold docs are enough, or whether you also need to load in-progress platform architecture docs from the monorepo.
|
|
8
|
+
|
|
9
|
+
> **Note:** Paths prefixed with `apps/` or `packages/` are monorepo-internal and unavailable in standalone projects. For those areas, use the stable scaffold docs under `node_modules/@elevasis/sdk/reference/scaffold/` as the primary reference. The monorepo paths are retained for contributors working within the monorepo.
|
|
10
|
+
|
|
11
|
+
## Current Watch Areas
|
|
12
|
+
|
|
13
|
+
### Organization OS
|
|
14
|
+
|
|
15
|
+
Use when the task touches:
|
|
16
|
+
|
|
17
|
+
- organization model semantics
|
|
18
|
+
- feature/provider runtime
|
|
19
|
+
- feature manifests or shell composition
|
|
20
|
+
- graph or command-view concepts
|
|
21
|
+
- downstream propagation of scaffold contract changes
|
|
22
|
+
|
|
23
|
+
Load:
|
|
24
|
+
|
|
25
|
+
- `apps/docs/content/docs/technical/architecture/core/organization-model/index.mdx`
|
|
26
|
+
- `apps/docs/content/docs/technical/architecture/core/organization-model/graph.mdx`
|
|
27
|
+
- `apps/docs/content/docs/technical/architecture/ui/feature-shell.mdx`
|
|
28
|
+
- `apps/docs/content/docs/technical/architecture/ui/composition-extensibility.mdx`
|
|
29
|
+
|
|
30
|
+
Stable scaffold docs affected:
|
|
31
|
+
|
|
32
|
+
- `node_modules/@elevasis/sdk/reference/scaffold/reference/contracts.md`
|
|
33
|
+
- `.claude/rules/ui.md`
|
|
34
|
+
- `node_modules/@elevasis/sdk/reference/scaffold/ui/customization.md`
|
|
35
|
+
- `node_modules/@elevasis/sdk/reference/scaffold/ui/feature-flags-and-gating.md`
|
|
36
|
+
|
|
37
|
+
### Package Surface / Reference System
|
|
38
|
+
|
|
39
|
+
Use when the task touches:
|
|
40
|
+
|
|
41
|
+
- published `@elevasis/core`, `@elevasis/ui`, or `@elevasis/sdk` surfaces
|
|
42
|
+
- generated package maps
|
|
43
|
+
- contract drift between source and scaffold docs
|
|
44
|
+
|
|
45
|
+
Load:
|
|
46
|
+
|
|
47
|
+
- `packages/core/src/organization-model/README.md`
|
|
48
|
+
- `packages/ui/src/provider/README.md`
|
|
49
|
+
- `packages/ui/src/features/README.md`
|
|
50
|
+
- `packages/sdk/reference/_navigation.md`
|
|
51
|
+
|
|
52
|
+
Stable scaffold docs affected:
|
|
53
|
+
|
|
54
|
+
- `node_modules/@elevasis/sdk/reference/scaffold/reference/contracts.md`
|
|
55
|
+
|
|
56
|
+
### Resource / Topology Mapping
|
|
57
|
+
|
|
58
|
+
Use when the task touches:
|
|
59
|
+
|
|
60
|
+
- resource registration
|
|
61
|
+
- triggers, integrations, relationships, human checkpoints
|
|
62
|
+
- topology-aware navigation or impact analysis
|
|
63
|
+
|
|
64
|
+
Load:
|
|
65
|
+
|
|
66
|
+
- `operations/src/README.md`
|
|
67
|
+
- `operations/src/index.ts`
|
|
68
|
+
|
|
69
|
+
Stable scaffold docs affected:
|
|
70
|
+
|
|
71
|
+
- `.claude/rules/operations.md`
|
|
72
|
+
|
|
73
|
+
## Working Rule
|
|
74
|
+
|
|
75
|
+
When a task touches one of the watch areas above:
|
|
76
|
+
|
|
77
|
+
1. Read the stable scaffold doc.
|
|
78
|
+
2. Read the listed in-progress or package-local source-of-truth docs.
|
|
79
|
+
3. Prefer source and in-progress architecture docs if they disagree with scaffold prose.
|
|
80
|
+
4. Flag drift instead of silently trusting the scaffold doc.
|