thumbgate 0.9.9 → 0.9.11

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.
Files changed (160) hide show
  1. package/.claude-plugin/README.md +4 -4
  2. package/.claude-plugin/marketplace.json +4 -2
  3. package/.claude-plugin/plugin.json +1 -1
  4. package/.well-known/mcp/server-card.json +1 -1
  5. package/README.md +115 -312
  6. package/adapters/README.md +2 -2
  7. package/adapters/amp/skills/{rlhf-feedback → thumbgate-feedback}/SKILL.md +1 -1
  8. package/adapters/chatgpt/openapi.yaml +2 -2
  9. package/adapters/claude/.mcp.json +3 -3
  10. package/adapters/codex/config.toml +4 -4
  11. package/adapters/gemini/function-declarations.json +1 -1
  12. package/adapters/mcp/server-stdio.js +66 -6
  13. package/adapters/opencode/opencode.json +4 -2
  14. package/bin/cli.js +188 -39
  15. package/config/e2e-critical-flows.json +4 -0
  16. package/config/gates/default.json +74 -2
  17. package/config/github-about.json +1 -1
  18. package/config/mcp-allowlists.json +33 -6
  19. package/config/skill-packs/react-testing.json +1 -1
  20. package/config/tessl-tiles.json +3 -3
  21. package/openapi/openapi.yaml +2 -2
  22. package/package.json +23 -9
  23. package/plugins/amp-skill/INSTALL.md +3 -2
  24. package/plugins/amp-skill/SKILL.md +1 -0
  25. package/plugins/claude-codex-bridge/.claude-plugin/plugin.json +1 -1
  26. package/plugins/claude-codex-bridge/.mcp.json +5 -3
  27. package/plugins/claude-codex-bridge/README.md +1 -1
  28. package/plugins/claude-codex-bridge/skills/setup/SKILL.md +1 -1
  29. package/plugins/claude-skill/INSTALL.md +4 -3
  30. package/plugins/claude-skill/SKILL.md +1 -1
  31. package/plugins/codex-profile/.codex-plugin/plugin.json +1 -1
  32. package/plugins/codex-profile/.mcp.json +5 -3
  33. package/plugins/codex-profile/INSTALL.md +2 -2
  34. package/plugins/codex-profile/README.md +1 -1
  35. package/plugins/cursor-marketplace/.cursor-plugin/plugin.json +1 -1
  36. package/plugins/cursor-marketplace/README.md +5 -5
  37. package/plugins/cursor-marketplace/mcp.json +4 -2
  38. package/plugins/cursor-marketplace/rules/pre-action-gates.mdc +1 -1
  39. package/plugins/cursor-marketplace/scripts/gate-check.sh +15 -5
  40. package/plugins/gemini-extension/INSTALL.md +4 -4
  41. package/plugins/opencode-profile/INSTALL.md +5 -5
  42. package/public/dashboard.html +15 -8
  43. package/public/index.html +134 -375
  44. package/public/js/buyer-intent.js +252 -0
  45. package/public/pro.html +1085 -0
  46. package/scripts/__pycache__/train_from_feedback.cpython-312.pyc +0 -0
  47. package/scripts/adk-consolidator.js +17 -5
  48. package/scripts/agent-readiness.js +3 -1
  49. package/scripts/agent-security-hardening.js +4 -4
  50. package/scripts/auto-promote-gates.js +8 -0
  51. package/scripts/auto-wire-hooks.js +105 -21
  52. package/scripts/billing.js +111 -7
  53. package/scripts/build-metadata.js +14 -0
  54. package/scripts/check-congruence.js +1 -1
  55. package/scripts/context-engine.js +2 -1
  56. package/scripts/daemon-manager.js +2 -2
  57. package/scripts/dashboard.js +2 -2
  58. package/scripts/data-governance.js +1 -1
  59. package/scripts/deploy-gcp.sh +1 -1
  60. package/scripts/deploy-policy.js +22 -4
  61. package/scripts/dispatch-brief.js +1 -1
  62. package/scripts/ensure-repo-bootstrap.js +1 -1
  63. package/scripts/feedback-attribution.js +22 -10
  64. package/scripts/feedback-fallback.js +3 -2
  65. package/scripts/feedback-inbox-read.js +1 -1
  66. package/scripts/feedback-loop.js +41 -3
  67. package/scripts/feedback-paths.js +8 -8
  68. package/scripts/feedback-schema.js +1 -1
  69. package/scripts/feedback-to-memory.js +2 -2
  70. package/scripts/filesystem-search.js +2 -2
  71. package/scripts/gates-engine.js +765 -34
  72. package/scripts/generate-paperbanana-diagrams.sh +3 -3
  73. package/scripts/github-about.js +1 -1
  74. package/scripts/gtm-revenue-loop.js +20 -1
  75. package/scripts/hook-runtime.js +89 -0
  76. package/scripts/hook-stop-self-score.sh +3 -3
  77. package/scripts/hook-thumbgate-cache-updater.js +98 -37
  78. package/scripts/hosted-config.js +12 -10
  79. package/scripts/hybrid-feedback-context.js +54 -13
  80. package/scripts/install-mcp.js +14 -1
  81. package/scripts/intent-router.js +1 -1
  82. package/scripts/internal-agent-bootstrap.js +1 -1
  83. package/scripts/lesson-inference.js +6 -1
  84. package/scripts/license.js +54 -16
  85. package/scripts/mcp-config.js +69 -7
  86. package/scripts/memory-migration.js +1 -1
  87. package/scripts/money-watcher.js +166 -16
  88. package/scripts/operational-integrity.js +480 -0
  89. package/scripts/optimize-context.js +1 -1
  90. package/scripts/perplexity-marketing.js +1 -1
  91. package/scripts/post-everywhere.js +7 -12
  92. package/scripts/post-to-x.js +1 -1
  93. package/scripts/pr-manager.js +14 -11
  94. package/scripts/problem-detail.js +10 -10
  95. package/scripts/profile-router.js +2 -0
  96. package/scripts/prompt-dlp.js +1 -0
  97. package/scripts/prove-adapters.js +6 -6
  98. package/scripts/prove-automation.js +1 -1
  99. package/scripts/prove-autoresearch.js +1 -1
  100. package/scripts/prove-claim-verification.js +3 -3
  101. package/scripts/prove-data-pipeline.js +5 -5
  102. package/scripts/prove-data-quality.js +1 -1
  103. package/scripts/prove-evolution.js +7 -7
  104. package/scripts/prove-harnesses.js +2 -2
  105. package/scripts/prove-lancedb.js +2 -2
  106. package/scripts/prove-local-intelligence.js +1 -1
  107. package/scripts/prove-loop-closure.js +1 -1
  108. package/scripts/prove-predictive-insights.js +2 -2
  109. package/scripts/prove-runtime.js +6 -6
  110. package/scripts/prove-seo-gsd.js +1 -1
  111. package/scripts/prove-settings.js +4 -4
  112. package/scripts/prove-subway-upgrades.js +1 -1
  113. package/scripts/prove-tessl.js +2 -2
  114. package/scripts/prove-xmemory.js +2 -2
  115. package/scripts/publish-decision.js +10 -0
  116. package/scripts/published-cli.js +34 -0
  117. package/scripts/rate-limiter.js +2 -2
  118. package/scripts/reddit-monitor-cron.sh +2 -2
  119. package/scripts/reminder-engine.js +1 -1
  120. package/scripts/schedule-manager.js +3 -3
  121. package/scripts/self-healing-check.js +1 -1
  122. package/scripts/shieldcortex-memory-firewall-runner.mjs +1 -1
  123. package/scripts/skill-quality-tracker.js +1 -1
  124. package/scripts/social-analytics/db/social-analytics.db-shm +0 -0
  125. package/scripts/social-analytics/db/social-analytics.db-wal +0 -0
  126. package/scripts/social-analytics/engagement-audit.js +202 -0
  127. package/scripts/social-analytics/generate-instagram-card.js +1 -1
  128. package/scripts/social-analytics/instagram-thumbgate-post.js +5 -1
  129. package/scripts/social-analytics/install-growth-automation.js +114 -0
  130. package/scripts/social-analytics/publish-instagram-thumbgate.js +8 -2
  131. package/scripts/social-analytics/publish-thumbgate-launch.js +1 -1
  132. package/scripts/social-analytics/publishers/reddit.js +7 -12
  133. package/scripts/social-analytics/publishers/zernio.js +19 -0
  134. package/scripts/social-analytics/reconcile-thumbgate-campaign.js +165 -0
  135. package/scripts/social-analytics/schedule-thumbgate-campaign.js +275 -0
  136. package/scripts/social-analytics/sync-launch-assets.js +185 -0
  137. package/scripts/social-pipeline.js +2 -2
  138. package/scripts/social-post-hourly.js +185 -0
  139. package/scripts/social-quality-gate.js +119 -3
  140. package/scripts/social-reply-monitor.js +150 -34
  141. package/scripts/statusline-cache-path.js +27 -0
  142. package/scripts/statusline-meta.js +22 -0
  143. package/scripts/statusline.sh +24 -32
  144. package/scripts/sync-version.js +24 -12
  145. package/scripts/telemetry-analytics.js +4 -4
  146. package/scripts/tessl-export.js +1 -1
  147. package/scripts/test-coverage.js +20 -13
  148. package/scripts/thumbgate-search.js +2 -2
  149. package/scripts/tool-registry.js +98 -1
  150. package/scripts/train_from_feedback.py +1 -1
  151. package/scripts/user-profile.js +4 -4
  152. package/scripts/validate-feedback.js +1 -1
  153. package/scripts/vector-store.js +1 -1
  154. package/scripts/verification-loop.js +1 -1
  155. package/scripts/verify-run.js +1 -1
  156. package/scripts/weekly-auto-post.js +1 -1
  157. package/skills/{rlhf-feedback → thumbgate-feedback}/SKILL.md +1 -1
  158. package/src/api/server.js +291 -41
  159. package/scripts/__pycache__/train_from_feedback.cpython-314.pyc +0 -0
  160. package/scripts/social-analytics/db/social-analytics.db +0 -0
@@ -10,7 +10,7 @@ const {
10
10
  } = require('./analytics-window');
11
11
  const {
12
12
  getLegacyFeedbackDir,
13
- getRlhfFeedbackDir,
13
+ getFallbackFeedbackDir,
14
14
  resolveFallbackArtifactPath,
15
15
  } = require('./feedback-paths');
16
16
 
@@ -20,8 +20,8 @@ function shouldIncludeLegacyTelemetry() {
20
20
  if (
21
21
  process.env._TEST_LEGACY_FEEDBACK_DIR ||
22
22
  process.env.THUMBGATE_LEGACY_FEEDBACK_DIR ||
23
- process.env._TEST_RLHF_FEEDBACK_DIR ||
24
- process.env.THUMBGATE_RLHF_FEEDBACK_DIR
23
+ process.env._TEST_THUMBGATE_FALLBACK_FEEDBACK_DIR ||
24
+ process.env.THUMBGATE_FALLBACK_FEEDBACK_DIR
25
25
  ) {
26
26
  return true;
27
27
  }
@@ -121,7 +121,7 @@ function getTelemetrySourceDiagnostics(feedbackDir) {
121
121
  fileName: TELEMETRY_FILE_NAME,
122
122
  primaryPath,
123
123
  legacyPath,
124
- rlhfPath: path.join(getRlhfFeedbackDir({ feedbackDir }), TELEMETRY_FILE_NAME),
124
+ fallbackPath: path.join(getFallbackFeedbackDir({ feedbackDir }), TELEMETRY_FILE_NAME),
125
125
  legacyFeedbackPath: path.join(getLegacyFeedbackDir({ feedbackDir }), TELEMETRY_FILE_NAME),
126
126
  primaryExists,
127
127
  legacyExists,
@@ -235,7 +235,7 @@ function exportTiles({
235
235
  }
236
236
 
237
237
  function verifyTiles(options = {}) {
238
- const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'rlhf-tessl-verify-'));
238
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'thumbgate-tessl-verify-'));
239
239
 
240
240
  try {
241
241
  const results = exportTiles({
@@ -16,6 +16,7 @@ const COVERAGE_INCLUDE_GLOBS = [
16
16
  const COVERAGE_EXCLUDE_GLOBS = [
17
17
  'tests/**/*.js',
18
18
  ];
19
+ let cachedCoverageFilterSupport;
19
20
 
20
21
  function findCoverageTestFiles({
21
22
  dir = TESTS_DIR,
@@ -39,29 +40,35 @@ function findCoverageTestFiles({
39
40
  return files.sort();
40
41
  }
41
42
 
42
- function supportsCoveragePatternFlags({
43
- spawn = spawnSync,
44
- } = {}) {
43
+ function detectCoverageFilterSupport({ spawn = spawnSync } = {}) {
44
+ if (spawn === spawnSync && cachedCoverageFilterSupport !== undefined) {
45
+ return cachedCoverageFilterSupport;
46
+ }
47
+
45
48
  const result = spawn(process.execPath, ['--help'], {
46
49
  encoding: 'utf8',
47
50
  });
51
+ const helpText = `${result.stdout || ''}\n${result.stderr || ''}`;
52
+ const supported = helpText.includes('--test-coverage-include') && helpText.includes('--test-coverage-exclude');
48
53
 
49
- if (result.error) {
50
- return false;
54
+ if (spawn === spawnSync) {
55
+ cachedCoverageFilterSupport = supported;
51
56
  }
52
57
 
53
- const help = `${result.stdout || ''}\n${result.stderr || ''}`;
54
- return help.includes('--test-coverage-include') && help.includes('--test-coverage-exclude');
58
+ return supported;
55
59
  }
56
60
 
57
- function buildCoverageArgs(files, { supportsPatternFlags = true } = {}) {
61
+ function buildCoverageArgs(files, { spawn = spawnSync, supportsFilters } = {}) {
58
62
  const args = [
59
63
  '--test',
60
64
  '--test-concurrency=1',
61
65
  '--experimental-test-coverage',
62
66
  ];
63
67
 
64
- if (supportsPatternFlags) {
68
+ const useFilterFlags = supportsFilters === undefined
69
+ ? detectCoverageFilterSupport({ spawn })
70
+ : supportsFilters;
71
+ if (useFilterFlags) {
65
72
  args.push(
66
73
  ...COVERAGE_INCLUDE_GLOBS.flatMap((pattern) => ['--test-coverage-include', pattern]),
67
74
  ...COVERAGE_EXCLUDE_GLOBS.flatMap((pattern) => ['--test-coverage-exclude', pattern]),
@@ -76,17 +83,17 @@ function runCoverage({
76
83
  files = findCoverageTestFiles(),
77
84
  cwd = PROJECT_ROOT,
78
85
  spawn = spawnSync,
79
- supportsPatternFlags = supportsCoveragePatternFlags({ spawn }),
86
+ supportsFilters,
80
87
  } = {}) {
81
88
  if (files.length === 0) {
82
89
  return {
83
90
  exitCode: 1,
84
91
  error: 'No test files found for coverage run.',
85
- args: buildCoverageArgs(files, { supportsPatternFlags }),
92
+ args: buildCoverageArgs(files, { spawn, supportsFilters }),
86
93
  };
87
94
  }
88
95
 
89
- const args = buildCoverageArgs(files, { supportsPatternFlags });
96
+ const args = buildCoverageArgs(files, { spawn, supportsFilters });
90
97
  const result = spawn(process.execPath, args, {
91
98
  cwd,
92
99
  env: process.env,
@@ -113,8 +120,8 @@ module.exports = {
113
120
  COVERAGE_INCLUDE_GLOBS,
114
121
  PROJECT_ROOT,
115
122
  TESTS_DIR,
123
+ detectCoverageFilterSupport,
116
124
  findCoverageTestFiles,
117
125
  buildCoverageArgs,
118
126
  runCoverage,
119
- supportsCoveragePatternFlags,
120
127
  };
@@ -144,7 +144,7 @@ function getRuleResults(query, limit) {
144
144
  return searchPreventionRulesSync(query, limit).map(mapRuleResult);
145
145
  }
146
146
 
147
- function searchRlhf({ query, source = 'all', limit = 10, signal = null } = {}) {
147
+ function searchThumbgate({ query, source = 'all', limit = 10, signal = null } = {}) {
148
148
  const trimmedQuery = String(query || '').trim();
149
149
  if (!trimmedQuery) {
150
150
  throw new Error('query is required');
@@ -185,5 +185,5 @@ module.exports = {
185
185
  VALID_SOURCES,
186
186
  normalizeSearchSource: normalizeSource,
187
187
  normalizeSearchSignal: normalizeSignal,
188
- searchRlhf,
188
+ searchThumbgate,
189
189
  };
@@ -121,7 +121,7 @@ const TOOLS = [
121
121
  },
122
122
  }),
123
123
  readOnlyTool({
124
- name: 'search_rlhf',
124
+ name: 'search_thumbgate',
125
125
  description: 'Search raw ThumbGate state across feedback logs, ContextFS memory, and prevention rules.',
126
126
  inputSchema: {
127
127
  type: 'object',
@@ -512,6 +512,89 @@ const TOOLS = [
512
512
  },
513
513
  },
514
514
  }),
515
+ destructiveTool({
516
+ name: 'set_task_scope',
517
+ description: 'Declare or clear the current task scope so ThumbGate can compare affected files and diffs against the approved path set.',
518
+ inputSchema: {
519
+ type: 'object',
520
+ properties: {
521
+ taskId: { type: 'string', description: 'Optional stable task identifier (ticket, issue, or work item id)' },
522
+ summary: { type: 'string', description: 'Short summary of the task being worked' },
523
+ allowedPaths: {
524
+ type: 'array',
525
+ items: { type: 'string' },
526
+ description: 'Glob patterns that define the allowed file scope for this task',
527
+ },
528
+ protectedPaths: {
529
+ type: 'array',
530
+ items: { type: 'string' },
531
+ description: 'Optional protected-file globs that require explicit approval before editing or publishing',
532
+ },
533
+ repoPath: { type: 'string', description: 'Optional repo root used when evaluating git diff scope' },
534
+ localOnly: { type: 'boolean', description: 'When true, also marks the task as local-only' },
535
+ clear: { type: 'boolean', description: 'Clear the current task scope instead of setting one' },
536
+ },
537
+ },
538
+ }),
539
+ readOnlyTool({
540
+ name: 'get_scope_state',
541
+ description: 'Return the active task scope and any unexpired protected-file approvals.',
542
+ inputSchema: {
543
+ type: 'object',
544
+ properties: {},
545
+ },
546
+ }),
547
+ destructiveTool({
548
+ name: 'set_branch_governance',
549
+ description: 'Declare or clear branch and release governance so PR, merge, release, and publish actions can be evaluated against explicit workflow state.',
550
+ inputSchema: {
551
+ type: 'object',
552
+ properties: {
553
+ branchName: { type: 'string', description: 'Optional branch name the governance applies to' },
554
+ baseBranch: { type: 'string', description: 'Protected base branch for merge and release operations (defaults to main)' },
555
+ prRequired: { type: 'boolean', description: 'Whether this lane must go through a pull request (defaults to true)' },
556
+ prNumber: { type: 'string', description: 'Optional pull request number once a PR exists' },
557
+ prUrl: { type: 'string', description: 'Optional pull request URL once a PR exists' },
558
+ queueRequired: { type: 'boolean', description: 'Whether the target branch requires a merge queue' },
559
+ localOnly: { type: 'boolean', description: 'When true, PR, merge, release, and publish actions are blocked for this lane' },
560
+ releaseVersion: { type: 'string', description: 'Expected package version for release or publish actions' },
561
+ releaseEvidence: { type: 'string', description: 'Optional evidence or release plan note for the governed version' },
562
+ releaseSensitiveGlobs: {
563
+ type: 'array',
564
+ items: { type: 'string' },
565
+ description: 'Optional custom globs that define release-sensitive files for this branch lane',
566
+ },
567
+ clear: { type: 'boolean', description: 'Clear the current branch governance state instead of setting it' },
568
+ },
569
+ },
570
+ }),
571
+ readOnlyTool({
572
+ name: 'get_branch_governance',
573
+ description: 'Return the active branch and release governance state.',
574
+ inputSchema: {
575
+ type: 'object',
576
+ properties: {},
577
+ },
578
+ }),
579
+ destructiveTool({
580
+ name: 'approve_protected_action',
581
+ description: 'Grant a time-limited approval for edits or publish actions that touch protected files.',
582
+ inputSchema: {
583
+ type: 'object',
584
+ required: ['pathGlobs', 'reason'],
585
+ properties: {
586
+ pathGlobs: {
587
+ type: 'array',
588
+ items: { type: 'string' },
589
+ description: 'Protected-file globs covered by this approval',
590
+ },
591
+ reason: { type: 'string', description: 'Why this protected-file action is approved' },
592
+ evidence: { type: 'string', description: 'Optional supporting evidence or approval note' },
593
+ taskId: { type: 'string', description: 'Optional task id this approval is tied to' },
594
+ ttlMs: { type: 'number', description: 'Optional approval lifetime in milliseconds (defaults to 1 hour, max 24 hours)' },
595
+ },
596
+ },
597
+ }),
515
598
  destructiveTool({
516
599
  name: 'track_action',
517
600
  description: 'Record a verification action in the current session (for example figma_verified or tests_passed). Session actions expire after one hour.',
@@ -535,6 +618,20 @@ const TOOLS = [
535
618
  },
536
619
  },
537
620
  }),
621
+ readOnlyTool({
622
+ name: 'check_operational_integrity',
623
+ description: 'Evaluate whether the current repo state is safe for PR, merge, release, and publish operations.',
624
+ inputSchema: {
625
+ type: 'object',
626
+ properties: {
627
+ repoPath: { type: 'string', description: 'Optional repository path to inspect' },
628
+ baseBranch: { type: 'string', description: 'Protected base branch to compare against (defaults to main)' },
629
+ command: { type: 'string', description: 'Optional git, PR, or publish command to evaluate against the current governance state' },
630
+ requirePrForReleaseSensitive: { type: 'boolean', description: 'When true, release-sensitive changes on non-base branches require an open PR' },
631
+ requireVersionNotBehindBase: { type: 'boolean', description: 'When true, release-sensitive changes cannot lag behind the base branch package version' },
632
+ },
633
+ },
634
+ }),
538
635
  destructiveTool({
539
636
  name: 'register_claim_gate',
540
637
  description: 'Register a custom claim verification rule in local runtime state without editing tracked repo config.',
@@ -246,7 +246,7 @@ def is_positive(entry: Dict) -> bool:
246
246
  """Determine if a feedback entry is positive."""
247
247
  if entry.get("reward", 0) > 0:
248
248
  return True
249
- # rlhf uses signal field: 'positive' or 'negative'
249
+ # ThumbGate uses signal field: 'positive' or 'negative'
250
250
  signal = entry.get("signal", "").lower()
251
251
  if signal in ("positive", "up", "thumbsup"):
252
252
  return True
@@ -12,11 +12,11 @@ function getProfilePath() {
12
12
  if (process.env.THUMBGATE_FEEDBACK_DIR) {
13
13
  return path.join(process.env.THUMBGATE_FEEDBACK_DIR, PROFILE_FILENAME);
14
14
  }
15
- const localRlhf = path.join(process.cwd(), '.rlhf');
16
- if (fs.existsSync(localRlhf)) {
17
- return path.join(localRlhf, PROFILE_FILENAME);
15
+ const localFallback = path.join(process.cwd(), '.thumbgate');
16
+ if (fs.existsSync(localFallback)) {
17
+ return path.join(localFallback, PROFILE_FILENAME);
18
18
  }
19
- return path.join(os.homedir(), '.rlhf', PROFILE_FILENAME);
19
+ return path.join(os.homedir(), '.thumbgate', PROFILE_FILENAME);
20
20
  }
21
21
 
22
22
  function loadProfile() {
@@ -8,7 +8,7 @@
8
8
  * 3. Anomaly detection (suspicious patterns, sensitive data)
9
9
  * 4. Self-correction (auto-correct fixable errors)
10
10
  *
11
- * Ported from Subway_RN_Demo with rlhf schema adaptations:
11
+ * Ported from Subway_RN_Demo with ThumbGate schema adaptations:
12
12
  * - Uses 'signal' (not 'feedback') with values 'positive'/'negative'
13
13
  * - Uses 'id' as required field (not 'source')
14
14
  * - THUMBGATE_FEEDBACK_DIR env var for path resolution
@@ -18,7 +18,7 @@ let _lancedbLoader = null;
18
18
  const _pipelineCache = new Map();
19
19
  let _lastEmbeddingProfile = null;
20
20
  let _pipelineLoader = null;
21
- const TABLE_NAME = 'rlhf_memories';
21
+ const TABLE_NAME = 'thumbgate_memories';
22
22
 
23
23
  async function getLanceDB() {
24
24
  if (!_lancedb) {
@@ -17,7 +17,7 @@ const {
17
17
  const { getEffectiveSetting } = require('./evolution-state');
18
18
 
19
19
  const MAX_RETRIES = 3;
20
- const DEFAULT_MODEL_PATH = path.join(__dirname, '..', '.rlhf', 'verification-model.json');
20
+ const DEFAULT_MODEL_PATH = path.join(__dirname, '..', '.thumbgate', 'verification-model.json');
21
21
 
22
22
  /**
23
23
  * Run a single verification step against prevention rules.
@@ -230,7 +230,7 @@ function recordVerifyWorkflowRun(mode = 'quick', cwd = process.cwd(), feedbackDi
230
230
  }
231
231
 
232
232
  function runVerify(mode = 'quick', baseEnv = process.env, cwd = process.cwd()) {
233
- const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'rlhf-verify-'));
233
+ const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'thumbgate-verify-'));
234
234
  const env = {
235
235
  ...baseEnv,
236
236
  THUMBGATE_PROOF_DIR: path.join(tempRoot, 'proof-adapters'),
@@ -15,7 +15,7 @@ const os = require('os');
15
15
  const { generateWeeklyStatsPost } = require('./daily-digest');
16
16
  const { createSchedule } = require('./schedule-manager');
17
17
 
18
- const POSTS_DIR = path.join(os.homedir(), '.rlhf', 'weekly-posts');
18
+ const POSTS_DIR = path.join(os.homedir(), '.thumbgate', 'weekly-posts');
19
19
 
20
20
  function ensureDir(p) { if (!fs.existsSync(p)) fs.mkdirSync(p, { recursive: true }); }
21
21
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: rlhf-feedback
2
+ name: thumbgate-feedback
3
3
  description: >
4
4
  Capture thumbs up/down feedback into structured memories and prevention rules.
5
5
  Require one sentence of why before claiming memory promotion.