tillerhand 3.48.1 → 3.49.1
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/.claude/agents/board-chair.md +1 -1
- package/.claude/agents/security-auditor.md +1 -1
- package/.claude/agents/test-writer.md +1 -1
- package/.claude/board/board-product.md +1 -1
- package/.claude/board/council.md +1 -1
- package/.claude/board/rules.md +6 -6
- package/.claude/commands/adopt.md +3 -3
- package/.claude/commands/ask-mode.md +4 -4
- package/.claude/commands/board.md +1 -1
- package/.claude/commands/build.md +1 -1
- package/.claude/commands/design.md +4 -4
- package/.claude/commands/findings-business.md +1 -1
- package/.claude/commands/findings-legal.md +1 -1
- package/.claude/commands/findings-perf.md +1 -1
- package/.claude/commands/findings-security.md +2 -2
- package/.claude/commands/findings-tech.md +1 -1
- package/.claude/commands/findings-ux.md +1 -1
- package/.claude/commands/fix-bug.md +2 -2
- package/.claude/commands/handoff.md +2 -2
- package/.claude/commands/kit-update.md +2 -2
- package/.claude/commands/qa.md +1 -1
- package/.claude/commands/release.md +2 -2
- package/.claude/commands/research.md +3 -3
- package/.claude/commands/retro.md +1 -1
- package/.claude/commands/rollback.md +3 -3
- package/.claude/commands/start.md +4 -4
- package/.claude/commands/tools.md +1 -1
- package/.claude/commands/user-feedback.md +1 -1
- package/.claude/findings/lenses/business.md +1 -1
- package/.claude/findings/protocol.md +2 -2
- package/.claude/hooks/budget.mjs +1 -1
- package/.claude/hooks/checkpoint.mjs +2 -2
- package/.claude/hooks/commit-gate.mjs +18 -17
- package/.claude/hooks/council.mjs +37 -52
- package/.claude/hooks/dashboard-data.mjs +34 -42
- package/.claude/hooks/dashboard.mjs +18 -20
- package/.claude/hooks/destructive-guard.mjs +2 -2
- package/.claude/hooks/flow.mjs +1 -1
- package/.claude/hooks/freeze-guard.mjs +2 -2
- package/.claude/hooks/gate.mjs +21 -13
- package/.claude/hooks/labels.mjs +92 -152
- package/.claude/hooks/lang.mjs +25 -9
- package/.claude/hooks/messages.mjs +497 -494
- package/.claude/hooks/notify.mjs +1 -1
- package/.claude/hooks/prefs.mjs +10 -18
- package/.claude/hooks/preview.mjs +1 -1
- package/.claude/hooks/progress.mjs +7 -9
- package/.claude/hooks/qa-report.mjs +1 -3
- package/.claude/hooks/session-start.mjs +2 -3
- package/.claude/hooks/status-read.mjs +5 -5
- package/.claude/hooks/statusline.mjs +4 -4
- package/.claude/hooks/tools.mjs +3 -7
- package/.claude/hooks/usage.mjs +2 -2
- package/.claude/i18n/tr.json +496 -0
- package/.claude/security-patterns.json +1 -1
- package/.claude/skills/logo-design/SKILL.md +2 -2
- package/.claude/skills/motion-video/SKILL.md +1 -1
- package/.claude/skills/source-research/SKILL.md +1 -1
- package/.claude/skills/ui-motion/SKILL.md +1 -1
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +1 -1
- package/README.md +2 -2
- package/README.tr.md +2 -2
- package/docs/architecture/overview.md +1 -1
- package/docs/decisions/log.md +1 -1
- package/docs/legal/privacy-kvkk.md +35 -35
- package/docs/operations/deploy-setup.md +1 -1
- package/docs/operations/feature-flags.md +1 -1
- package/docs/product/glossary.md +3 -3
- package/docs/product/launch.md +1 -1
- package/docs/product/prd.md +2 -2
- package/docs/product/roadmap.md +1 -1
- package/docs/product/specs/_template.md +1 -1
- package/docs/product/unit-economics.md +1 -1
- package/docs/quality/test-plan.md +5 -5
- package/docs/workflow/decision-protocol.md +1 -2
- package/docs/workflow/mcp-catalog.md +1 -1
- package/docs/workflow/skills.md +2 -2
- package/docs/workflow/usage-limits.md +1 -1
- package/kit/CHANGELOG.md +34 -0
- package/kit/VERSION +1 -1
- package/kit/guide.html +56 -56
- package/kit/guide.tr.html +10 -10
- package/kit/kit.mjs +7 -42
- package/kit/templates/addons/ai/.env.example.append +3 -3
- package/kit/templates/addons/tr/docs/legal/turkiye.md +55 -55
- package/kit/templates/addons/tr/types/backend/.env.example.append +2 -2
- package/kit/templates/addons/tr/types/backend/app/shared/payments.py +1 -1
- package/kit/templates/addons/tr/types/backend/tests/security/test_payment_webhook.py +3 -3
- package/kit/templates/addons/tr/types/web-saas/.env.example.append +2 -2
- package/kit/templates/addons/tr/types/web-saas/.github/workflows/payment-webhook.yml +3 -3
- package/kit/templates/addons/tr/types/web-saas/src/lib/payments/webhook-signature.ts +1 -1
- package/kit/templates/addons/tr/types/web-saas/tests/security/payment-webhook.mjs +4 -4
- package/kit/templates/backend/.github/dependabot.yml +1 -1
- package/kit/templates/backend/.github/workflows/live-monitoring.yml +1 -1
- package/kit/templates/backend/docs/architecture/stack.md +3 -3
- package/kit/templates/mobile/.github/dependabot.yml +1 -1
- package/kit/templates/mobile/.github/workflows/ci.yml +2 -2
- package/kit/templates/mobile/docs/architecture/stack.md +4 -4
- package/kit/templates/mobile/docs/architecture/structure.md +1 -1
- package/kit/templates/mobile/docs/design/design-guide.md +1 -1
- package/kit/templates/web-saas/.github/dependabot.yml +1 -1
- package/kit/templates/web-saas/.github/workflows/ci.yml +2 -2
- package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +1 -1
- package/kit/templates/web-saas/docs/architecture/stack.md +4 -4
- package/kit/templates/web-saas/docs/design/design-guide.md +1 -1
- package/kit/tools/antigravity/.agents/hooks.json +5 -5
- package/package.json +1 -1
|
@@ -1,496 +1,499 @@
|
|
|
1
|
-
// Text hooks show the user directly, in
|
|
2
|
-
// (node .claude/hooks/lang.mjs --export → translate → --write).
|
|
1
|
+
// Text hooks show the user directly, in English. Every other language (Turkish included) is .claude/i18n/<lang>.json:
|
|
2
|
+
// tr ships with the kit; others are written once by the AI (node .claude/hooks/lang.mjs --export → translate → --write).
|
|
3
|
+
// Words in braces ({command}, {step}) are placeholders; keep them in every translation.
|
|
3
4
|
export const MESSAGES = {
|
|
4
|
-
'session.begin': {
|
|
5
|
-
'session.resume': {
|
|
6
|
-
'session.next': {
|
|
7
|
-
'session.handoff': {
|
|
8
|
-
'session.handoffThen': {
|
|
9
|
-
'dashboard.title': {
|
|
10
|
-
'dashboard.sevCritical': {
|
|
11
|
-
'dashboard.sevWarn': {
|
|
12
|
-
'dashboard.sevInfo': {
|
|
13
|
-
'dashboard.sevGood': {
|
|
14
|
-
'dashboard.healthWarn': {
|
|
15
|
-
'dashboard.healthCritical': {
|
|
16
|
-
'dashboard.kitNotInstalled': {
|
|
17
|
-
'dashboard.kitVersion': {
|
|
18
|
-
'dashboard.autoRefresh': {
|
|
19
|
-
'dashboard.now': {
|
|
20
|
-
'dashboard.questionMode': {
|
|
21
|
-
'dashboard.profile': {
|
|
22
|
-
'dashboard.lastUpdate': {
|
|
23
|
-
'dashboard.startStep': {
|
|
24
|
-
'dashboard.nextStep': {
|
|
25
|
-
'dashboard.pasteHint': {
|
|
26
|
-
'dashboard.status': {
|
|
27
|
-
'dashboard.attention': {
|
|
28
|
-
'dashboard.moreItems': {
|
|
29
|
-
'dashboard.allGood': {
|
|
30
|
-
'dashboard.allGoodText': {
|
|
31
|
-
'dashboard.copy': {
|
|
32
|
-
'dashboard.copied': {
|
|
33
|
-
'dashboard.copyFailed': {
|
|
34
|
-
'dashboard.copyAria': {
|
|
35
|
-
'dashboard.startIdeaCode': {
|
|
36
|
-
'dashboard.kpiTasks': {
|
|
37
|
-
'dashboard.donePct': {
|
|
38
|
-
'dashboard.acceptanceTests': {
|
|
39
|
-
'dashboard.criteriaTested': {
|
|
40
|
-
'dashboard.kpiMvp': {
|
|
41
|
-
'dashboard.featuresCount': {
|
|
42
|
-
'dashboard.kpiDecisions': {
|
|
43
|
-
'dashboard.usersAuto': {
|
|
44
|
-
'dashboard.board': {
|
|
45
|
-
'dashboard.rejects': {
|
|
46
|
-
'dashboard.kpiRejects': {
|
|
47
|
-
'dashboard.membersCount': {
|
|
48
|
-
'dashboard.kpiCommits7': {
|
|
49
|
-
'dashboard.filesWaiting': {
|
|
50
|
-
'dashboard.noGit': {
|
|
51
|
-
'dashboard.kpiLimit': {
|
|
52
|
-
'dashboard.weeklyLevel': {
|
|
53
|
-
'dashboard.unknown': {
|
|
54
|
-
'dashboard.tabsLabel': {
|
|
55
|
-
'dashboard.tabOverview': {
|
|
56
|
-
'dashboard.tabRoadmap': {
|
|
57
|
-
'dashboard.tabDecisions': {
|
|
58
|
-
'dashboard.tabFindings': {
|
|
59
|
-
'dashboard.tabQuality': {
|
|
60
|
-
'dashboard.tabActivity': {
|
|
61
|
-
'dashboard.tabProduct': {
|
|
62
|
-
'dashboard.tabOperations': {
|
|
63
|
-
'dashboard.tabLimit': {
|
|
64
|
-
'dashboard.footer': {
|
|
65
|
-
'dashboard.statusSummary': {
|
|
66
|
-
'dashboard.noSummary': {
|
|
67
|
-
'dashboard.lastSession': {
|
|
68
|
-
'dashboard.noRecords': {
|
|
69
|
-
'dashboard.recentActivity': {
|
|
70
|
-
'dashboard.noActivity': {
|
|
71
|
-
'dashboard.stages': {
|
|
72
|
-
'dashboard.stageStart': {
|
|
73
|
-
'dashboard.stageStartLetter': {
|
|
74
|
-
'dashboard.feedCommit': {
|
|
75
|
-
'dashboard.feedDecision': {
|
|
76
|
-
'dashboard.feedBoard': {
|
|
77
|
-
'dashboard.feedMaintenance': {
|
|
78
|
-
'dashboard.commitKindOther': {
|
|
79
|
-
'dashboard.noRoadmap': {
|
|
80
|
-
'dashboard.topicFilter': {
|
|
81
|
-
'dashboard.all': {
|
|
82
|
-
'dashboard.auto': {
|
|
83
|
-
'dashboard.oneWay': {
|
|
84
|
-
'dashboard.user': {
|
|
85
|
-
'dashboard.noDecisions': {
|
|
86
|
-
'dashboard.members': {
|
|
87
|
-
'dashboard.boardSetUp': {
|
|
88
|
-
'dashboard.notSetUp': {
|
|
89
|
-
'dashboard.boardNotSetUp': {
|
|
90
|
-
'dashboard.commitReview': {
|
|
91
|
-
'dashboard.on': {
|
|
92
|
-
'dashboard.off': {
|
|
93
|
-
'dashboard.summary': {
|
|
94
|
-
'dashboard.kpiMeetings': {
|
|
95
|
-
'dashboard.kpiApproval': {
|
|
96
|
-
'dashboard.criticalFinding': {
|
|
97
|
-
'dashboard.councilHeading': {
|
|
98
|
-
'dashboard.noDecision': {
|
|
99
|
-
'dashboard.latestCouncil': {
|
|
100
|
-
'dashboard.low': {
|
|
101
|
-
'dashboard.kpiDisputed': {
|
|
102
|
-
'dashboard.kpiEliminated': {
|
|
103
|
-
'dashboard.byCrossVote': {
|
|
104
|
-
'dashboard.overallRanking': {
|
|
105
|
-
'dashboard.opinion': {
|
|
106
|
-
'dashboard.avg': {
|
|
107
|
-
'dashboard.open': {
|
|
108
|
-
'dashboard.noCouncil': {
|
|
109
|
-
'dashboard.meetingLog': {
|
|
110
|
-
'dashboard.noMeetings': {
|
|
111
|
-
'dashboard.checklists': {
|
|
112
|
-
'dashboard.codeHealth': {
|
|
113
|
-
'dashboard.fixRate': {
|
|
114
|
-
'dashboard.uncommitted': {
|
|
115
|
-
'dashboard.fixRateNote': {
|
|
116
|
-
'dashboard.lastQa': {
|
|
117
|
-
'dashboard.passed': {
|
|
118
|
-
'dashboard.failed': {
|
|
119
|
-
'dashboard.notRun': {
|
|
120
|
-
'dashboard.withEvidence': {
|
|
121
|
-
'dashboard.openReport': {
|
|
122
|
-
'dashboard.kpiTested': {
|
|
123
|
-
'dashboard.kpiPassing': {
|
|
124
|
-
'dashboard.reportTime': {
|
|
125
|
-
'dashboard.noJunit': {
|
|
126
|
-
'dashboard.noAcceptanceIds': {
|
|
127
|
-
'dashboard.metricsMonthly': {
|
|
128
|
-
'dashboard.noMetrics': {
|
|
129
|
-
'dashboard.criticalFlowTests': {
|
|
130
|
-
'dashboard.present': {
|
|
131
|
-
'dashboard.missing': {
|
|
132
|
-
'dashboard.noTestPlan': {
|
|
133
|
-
'dashboard.maintenanceLog': {
|
|
134
|
-
'dashboard.noMaintenance': {
|
|
135
|
-
'dashboard.lastRetro': {
|
|
136
|
-
'dashboard.commitsLast14': {
|
|
137
|
-
'dashboard.totalParen': {
|
|
138
|
-
'dashboard.sparkAria': {
|
|
139
|
-
'dashboard.commitTip': {
|
|
140
|
-
'dashboard.today': {
|
|
141
|
-
'dashboard.showTable': {
|
|
142
|
-
'dashboard.feed': {
|
|
143
|
-
'dashboard.product': {
|
|
144
|
-
'dashboard.problem': {
|
|
145
|
-
'dashboard.noPrd': {
|
|
146
|
-
'dashboard.valueProp': {
|
|
147
|
-
'dashboard.outOfScope': {
|
|
148
|
-
'dashboard.mvpFeatures': {
|
|
149
|
-
'dashboard.noMvp': {
|
|
150
|
-
'dashboard.criteriaResults': {
|
|
151
|
-
'dashboard.passedBadge': {
|
|
152
|
-
'dashboard.failedBadge': {
|
|
153
|
-
'dashboard.noResult': {
|
|
154
|
-
'dashboard.noTest': {
|
|
155
|
-
'dashboard.technology': {
|
|
156
|
-
'dashboard.noStack': {
|
|
157
|
-
'dashboard.design': {
|
|
158
|
-
'dashboard.noDesign': {
|
|
159
|
-
'dashboard.previews': {
|
|
160
|
-
'dashboard.unitEconomics': {
|
|
161
|
-
'dashboard.kpiMargin': {
|
|
162
|
-
'dashboard.perPayingUserMonth': {
|
|
163
|
-
'dashboard.kpiBreakEven': {
|
|
164
|
-
'dashboard.payingUsers': {
|
|
165
|
-
'dashboard.negativeMargin': {
|
|
166
|
-
'dashboard.atTarget': {
|
|
167
|
-
'dashboard.monthlyProfitLoss': {
|
|
168
|
-
'dashboard.variableOverPrice': {
|
|
169
|
-
'dashboard.over30': {
|
|
170
|
-
'dashboard.noInputs': {
|
|
171
|
-
'dashboard.userFeedback': {
|
|
172
|
-
'dashboard.kpiTotal': {
|
|
173
|
-
'dashboard.kpiNew': {
|
|
174
|
-
'dashboard.kpiPlanned': {
|
|
175
|
-
'dashboard.topThemes': {
|
|
176
|
-
'dashboard.noFeedback': {
|
|
177
|
-
'dashboard.learning': {
|
|
178
|
-
'dashboard.kpiRight': {
|
|
179
|
-
'dashboard.kpiWrong': {
|
|
180
|
-
'dashboard.kpiSuccess': {
|
|
181
|
-
'dashboard.oftenMissed': {
|
|
182
|
-
'dashboard.brandPack': {
|
|
183
|
-
'dashboard.filesCount': {
|
|
184
|
-
'dashboard.usageRules': {
|
|
185
|
-
'dashboard.noLogo': {
|
|
186
|
-
'dashboard.promoResearch': {
|
|
187
|
-
'dashboard.videos': {
|
|
188
|
-
'dashboard.noRender': {
|
|
189
|
-
'dashboard.noVideos': {
|
|
190
|
-
'dashboard.researchNotes': {
|
|
191
|
-
'dashboard.noNotes': {
|
|
192
|
-
'dashboard.unreleased': {
|
|
193
|
-
'dashboard.noUnreleased': {
|
|
194
|
-
'dashboard.limit5h': {
|
|
195
|
-
'dashboard.limitWeeklyLower': {
|
|
196
|
-
'dashboard.limitWeekly': {
|
|
197
|
-
'dashboard.yellowThreshold': {
|
|
198
|
-
'dashboard.redThreshold': {
|
|
199
|
-
'dashboard.resetsLabel': {
|
|
200
|
-
'dashboard.resetsParen': {
|
|
201
|
-
'dashboard.renewed': {
|
|
202
|
-
'dashboard.thresholdsNote': {
|
|
203
|
-
'dashboard.usageLimit': {
|
|
204
|
-
'dashboard.contextWindow': {
|
|
205
|
-
'dashboard.lastSessionShort': {
|
|
206
|
-
'dashboard.contextHint': {
|
|
207
|
-
'dashboard.noContext': {
|
|
208
|
-
'dashboard.modelEffort': {
|
|
209
|
-
'dashboard.modelsHint': {
|
|
210
|
-
'dashboard.tokenCost': {
|
|
211
|
-
'dashboard.totalTokens': {
|
|
212
|
-
'dashboard.apiEquivalent': {
|
|
213
|
-
'dashboard.notBilled': {
|
|
214
|
-
'dashboard.dailyAvg': {
|
|
215
|
-
'dashboard.activeDays': {
|
|
216
|
-
'dashboard.ccusageNote': {
|
|
217
|
-
'dashboard.noData': {
|
|
218
|
-
'dashboard.costLog': {
|
|
219
|
-
'dashboard.avgSize': {
|
|
220
|
-
'dashboard.recordsCount': {
|
|
221
|
-
'dashboard.noCostRecords': {
|
|
222
|
-
'dashboard.accountsDeadlines': {
|
|
223
|
-
'dashboard.noAccounts': {
|
|
224
|
-
'dashboard.none': {
|
|
225
|
-
'dashboard.daysOverdue': {
|
|
226
|
-
'dashboard.daysLeft': {
|
|
227
|
-
'dashboard.dateExpiry': {
|
|
228
|
-
'dashboard.dateKeyRotation': {
|
|
229
|
-
'dashboard.spendAlarms': {
|
|
230
|
-
'dashboard.noSpendAlarms': {
|
|
231
|
-
'dashboard.notSet': {
|
|
232
|
-
'dashboard.checkIt': {
|
|
233
|
-
'dashboard.flagsHeading': {
|
|
234
|
-
'dashboard.overdue': {
|
|
235
|
-
'dashboard.untested': {
|
|
236
|
-
'dashboard.tested': {
|
|
237
|
-
'dashboard.noFlags': {
|
|
238
|
-
'dashboard.liveMonitoring': {
|
|
239
|
-
'dashboard.liveLastRun': {
|
|
240
|
-
'dashboard.liveUrlHint': {
|
|
241
|
-
'dashboard.succeeded': {
|
|
242
|
-
'dashboard.failedRun': {
|
|
243
|
-
'dashboard.logLink': {
|
|
244
|
-
'dashboard.liveBroken': {
|
|
245
|
-
'dashboard.recentWorkflows': {
|
|
246
|
-
'dashboard.noRuns': {
|
|
247
|
-
'dashboard.openPrs': {
|
|
248
|
-
'dashboard.draft': {
|
|
249
|
-
'dashboard.noPrs': {
|
|
250
|
-
'dashboard.ghNote': {
|
|
251
|
-
'dashboard.noGithub': {
|
|
252
|
-
'dashboard.healthHealthy': {
|
|
253
|
-
'dashboard.healthGood': {
|
|
254
|
-
'dashboard.healthRisky': {
|
|
255
|
-
'dashboard.areaScores': {
|
|
256
|
-
'dashboard.findingsLine': {
|
|
257
|
-
'dashboard.findingsCritical': {
|
|
258
|
-
'dashboard.noReportYet': {
|
|
259
|
-
'dashboard.noFindingReports': {
|
|
260
|
-
'dashboard.reportHistory': {
|
|
261
|
-
'dashboard.noReports': {
|
|
262
|
-
'dashboard.scoringNote': {
|
|
263
|
-
'dashboard.findingKind.tech': {
|
|
264
|
-
'dashboard.findingKind.business': {
|
|
265
|
-
'dashboard.findingKind.security': {
|
|
266
|
-
'dashboard.findingKind.ux': {
|
|
267
|
-
'dashboard.findingKind.perf': {
|
|
268
|
-
'dashboard.findingKind.legal': {
|
|
269
|
-
'dashboard.th.date': {
|
|
270
|
-
'dashboard.th.stage': {
|
|
271
|
-
'dashboard.th.topic': {
|
|
272
|
-
'dashboard.th.question': {
|
|
273
|
-
'dashboard.th.chosen': {
|
|
274
|
-
'dashboard.th.door': {
|
|
275
|
-
'dashboard.th.decidedBy': {
|
|
276
|
-
'dashboard.th.kind': {
|
|
277
|
-
'dashboard.th.decision': {
|
|
278
|
-
'dashboard.th.consensus': {
|
|
279
|
-
'dashboard.th.minutes': {
|
|
280
|
-
'dashboard.th.scope': {
|
|
281
|
-
'dashboard.th.attendees': {
|
|
282
|
-
'dashboard.th.result': {
|
|
283
|
-
'dashboard.th.critical': {
|
|
284
|
-
'dashboard.th.userDecision': {
|
|
285
|
-
'dashboard.th.period': {
|
|
286
|
-
'dashboard.th.task': {
|
|
287
|
-
'dashboard.th.avgMinutes': {
|
|
288
|
-
'dashboard.th.avgLimit': {
|
|
289
|
-
'dashboard.th.fixes': {
|
|
290
|
-
'dashboard.th.reverts': {
|
|
291
|
-
'dashboard.th.duplicateCode': {
|
|
292
|
-
'dashboard.th.openCritical': {
|
|
293
|
-
'dashboard.th.acceptance': {
|
|
294
|
-
'dashboard.th.flow': {
|
|
295
|
-
'dashboard.th.testKind': {
|
|
296
|
-
'dashboard.th.file': {
|
|
297
|
-
'dashboard.th.day': {
|
|
298
|
-
'dashboard.th.commit': {
|
|
299
|
-
'dashboard.th.criterion': {
|
|
300
|
-
'dashboard.th.test': {
|
|
301
|
-
'dashboard.th.job': {
|
|
302
|
-
'dashboard.th.size': {
|
|
303
|
-
'dashboard.th.usage5h': {
|
|
304
|
-
'dashboard.th.service': {
|
|
305
|
-
'dashboard.th.purpose': {
|
|
306
|
-
'dashboard.th.owner': {
|
|
307
|
-
'dashboard.th.dates': {
|
|
308
|
-
'dashboard.th.amount': {
|
|
309
|
-
'dashboard.th.alertThresholds': {
|
|
310
|
-
'dashboard.th.lastCheck': {
|
|
311
|
-
'dashboard.th.flag': {
|
|
312
|
-
'dashboard.th.removal': {
|
|
313
|
-
'dashboard.th.killSwitch': {
|
|
314
|
-
'dashboard.th.workflow': {
|
|
315
|
-
'dashboard.th.branch': {
|
|
316
|
-
'dashboard.th.time': {
|
|
317
|
-
'dashboard.th.health': {
|
|
318
|
-
'dashboard.th.change': {
|
|
319
|
-
'dashboard.th.finding': {
|
|
320
|
-
'dashboard.th.report': {
|
|
321
|
-
'dashboard.alert.kitPending': {
|
|
322
|
-
'dashboard.act.startIdea': {
|
|
323
|
-
'dashboard.alert.handoffPending': {
|
|
324
|
-
'dashboard.alert.
|
|
325
|
-
'dashboard.
|
|
326
|
-
'dashboard.
|
|
327
|
-
'dashboard.
|
|
328
|
-
'dashboard.
|
|
329
|
-
'dashboard.
|
|
330
|
-
'dashboard.
|
|
331
|
-
'dashboard.
|
|
332
|
-
'dashboard.
|
|
333
|
-
'dashboard.
|
|
334
|
-
'dashboard.
|
|
335
|
-
'dashboard.alert.
|
|
336
|
-
'dashboard.alert.
|
|
337
|
-
'dashboard.
|
|
338
|
-
'dashboard.
|
|
339
|
-
'dashboard.alert.
|
|
340
|
-
'dashboard.
|
|
341
|
-
'dashboard.
|
|
342
|
-
'dashboard.alert.
|
|
343
|
-
'dashboard.
|
|
344
|
-
'dashboard.
|
|
345
|
-
'dashboard.
|
|
346
|
-
'dashboard.
|
|
347
|
-
'dashboard.
|
|
348
|
-
'dashboard.
|
|
349
|
-
'dashboard.alert.
|
|
350
|
-
'dashboard.
|
|
351
|
-
'dashboard.
|
|
352
|
-
'dashboard.alert.
|
|
353
|
-
'dashboard.alert.
|
|
354
|
-
'dashboard.
|
|
355
|
-
'dashboard.
|
|
356
|
-
'dashboard.alert.
|
|
357
|
-
'dashboard.alert.
|
|
358
|
-
'dashboard.
|
|
359
|
-
'dashboard.
|
|
360
|
-
'dashboard.
|
|
361
|
-
'dashboard.
|
|
362
|
-
'dashboard.alert.
|
|
363
|
-
'dashboard.
|
|
364
|
-
'dashboard.
|
|
365
|
-
'dashboard.
|
|
366
|
-
'dashboard.
|
|
367
|
-
'dashboard.
|
|
368
|
-
'dashboard.
|
|
369
|
-
'dashboard.
|
|
370
|
-
'dashboard.
|
|
371
|
-
'dashboard.
|
|
372
|
-
'dashboard.
|
|
373
|
-
'dashboard.
|
|
374
|
-
'dashboard.
|
|
375
|
-
'
|
|
376
|
-
'dashboardData.
|
|
377
|
-
'dashboardData.
|
|
378
|
-
'dashboardData.
|
|
379
|
-
'
|
|
380
|
-
'guard.commit.
|
|
381
|
-
'guard.commit.
|
|
382
|
-
'guard.
|
|
383
|
-
'guard.
|
|
384
|
-
'guard.destructive.
|
|
385
|
-
'guard.destructive.
|
|
386
|
-
'guard.destructive.
|
|
387
|
-
'guard.destructive.
|
|
388
|
-
'guard.destructive.
|
|
389
|
-
'guard.destructive.
|
|
390
|
-
'guard.destructive.
|
|
391
|
-
'guard.destructive.
|
|
392
|
-
'guard.destructive.
|
|
393
|
-
'guard.destructive.
|
|
394
|
-
'guard.destructive.
|
|
395
|
-
'guard.destructive.
|
|
396
|
-
'guard.destructive.
|
|
397
|
-
'guard.destructive.
|
|
398
|
-
'guard.destructive.perm.
|
|
399
|
-
'guard.destructive.perm.
|
|
400
|
-
'guard.destructive.perm.
|
|
401
|
-
'guard.destructive.perm.
|
|
402
|
-
'guard.destructive.perm.
|
|
403
|
-
'guard.destructive.perm.
|
|
404
|
-
'guard.destructive.perm.
|
|
405
|
-
'guard.destructive.
|
|
406
|
-
'guard.destructive.
|
|
407
|
-
'guard.destructive.
|
|
408
|
-
'guard.destructive.
|
|
409
|
-
'guard.destructive.
|
|
410
|
-
'guard.destructive.
|
|
411
|
-
'guard.destructive.
|
|
412
|
-
'guard.destructive.
|
|
413
|
-
'guard.destructive.
|
|
414
|
-
'guard.destructive.
|
|
415
|
-
'guard.destructive.
|
|
416
|
-
'guard.destructive.
|
|
417
|
-
'guard.destructive.
|
|
418
|
-
'guard.destructive.
|
|
419
|
-
'guard.destructive.
|
|
420
|
-
'guard.destructive.
|
|
421
|
-
'guard.destructive.
|
|
422
|
-
'guard.destructive.
|
|
423
|
-
'guard.destructive.
|
|
424
|
-
'guard.
|
|
425
|
-
'guard.
|
|
426
|
-
'guard.freeze.
|
|
427
|
-
'guard.freeze.
|
|
428
|
-
'guard.freeze.
|
|
429
|
-
'guard.
|
|
430
|
-
'guard.
|
|
431
|
-
'guard.package.
|
|
432
|
-
'guard.package.
|
|
433
|
-
'guard.package.
|
|
434
|
-
'guard.package.
|
|
435
|
-
'guard.package.
|
|
436
|
-
'guard.package.
|
|
437
|
-
'guard.package.
|
|
438
|
-
'guard.package.
|
|
439
|
-
'guard.package.
|
|
440
|
-
'guard.
|
|
441
|
-
'guard.
|
|
442
|
-
'guard.
|
|
443
|
-
'guard.
|
|
444
|
-
'guard.test.
|
|
445
|
-
'guard.test.
|
|
446
|
-
'guard.test.
|
|
447
|
-
'guard.test.
|
|
448
|
-
'guard.test.
|
|
449
|
-
'guard.test.
|
|
450
|
-
'guard.test.
|
|
451
|
-
'
|
|
452
|
-
'
|
|
453
|
-
'statusRead.
|
|
454
|
-
'statusRead.checklist.
|
|
455
|
-
'statusRead.checklist.
|
|
456
|
-
'statusRead.checklist.
|
|
457
|
-
'
|
|
458
|
-
'
|
|
459
|
-
'qaReport.
|
|
460
|
-
'qaReport.
|
|
461
|
-
'
|
|
462
|
-
'
|
|
463
|
-
'models.role.
|
|
464
|
-
'models.role.
|
|
465
|
-
'models.role.
|
|
466
|
-
'models.
|
|
467
|
-
'models.
|
|
468
|
-
'
|
|
469
|
-
'
|
|
470
|
-
'statusline.
|
|
471
|
-
'statusline.
|
|
472
|
-
'statusline.
|
|
473
|
-
'statusline.
|
|
474
|
-
'statusline.
|
|
475
|
-
'statusline.
|
|
476
|
-
'statusline.
|
|
477
|
-
'statusline.
|
|
478
|
-
'statusline.
|
|
479
|
-
'statusline.
|
|
480
|
-
'
|
|
481
|
-
'
|
|
482
|
-
'usage.
|
|
483
|
-
'usage.
|
|
484
|
-
'usage.
|
|
485
|
-
'usage.
|
|
486
|
-
'usage.
|
|
487
|
-
'usage.
|
|
488
|
-
'usage.
|
|
489
|
-
'usage.
|
|
490
|
-
'usage.
|
|
491
|
-
'usage.
|
|
492
|
-
'usage.level.
|
|
493
|
-
'usage.level.
|
|
494
|
-
'
|
|
495
|
-
'
|
|
5
|
+
'session.begin': { en: 'To begin: /start [your project idea] · existing project: /adopt' },
|
|
6
|
+
'session.resume': { en: 'Continue: {command} (step {step})' },
|
|
7
|
+
'session.next': { en: 'Next: /build {code} · {title}' },
|
|
8
|
+
'session.handoff': { en: 'Handoff note waiting: /handoff take' },
|
|
9
|
+
'session.handoffThen': { en: 'Handoff note waiting: /handoff take · then {next}' },
|
|
10
|
+
'dashboard.title': { en: 'Dashboard' },
|
|
11
|
+
'dashboard.sevCritical': { en: 'Critical' },
|
|
12
|
+
'dashboard.sevWarn': { en: 'Attention' },
|
|
13
|
+
'dashboard.sevInfo': { en: 'Info' },
|
|
14
|
+
'dashboard.sevGood': { en: 'On track' },
|
|
15
|
+
'dashboard.healthWarn': { en: 'Needs attention' },
|
|
16
|
+
'dashboard.healthCritical': { en: 'Blocked' },
|
|
17
|
+
'dashboard.kitNotInstalled': { en: 'kit not set up' },
|
|
18
|
+
'dashboard.kitVersion': { en: 'kit {version}' },
|
|
19
|
+
'dashboard.autoRefresh': { en: 'Refresh every 30 s' },
|
|
20
|
+
'dashboard.now': { en: 'Now' },
|
|
21
|
+
'dashboard.questionMode': { en: 'Question mode' },
|
|
22
|
+
'dashboard.profile': { en: 'Profile' },
|
|
23
|
+
'dashboard.lastUpdate': { en: 'Last updated' },
|
|
24
|
+
'dashboard.startStep': { en: 'Start step' },
|
|
25
|
+
'dashboard.nextStep': { en: 'Next step' },
|
|
26
|
+
'dashboard.pasteHint': { en: 'Copy it and paste it into the Claude chat.' },
|
|
27
|
+
'dashboard.status': { en: 'Status' },
|
|
28
|
+
'dashboard.attention': { en: 'Needs attention' },
|
|
29
|
+
'dashboard.moreItems': { en: '{count} more' },
|
|
30
|
+
'dashboard.allGood': { en: 'All good' },
|
|
31
|
+
'dashboard.allGoodText': { en: 'No pending decision, critical finding or open issue.' },
|
|
32
|
+
'dashboard.copy': { en: 'Copy' },
|
|
33
|
+
'dashboard.copied': { en: 'Copied' },
|
|
34
|
+
'dashboard.copyFailed': { en: 'Copy failed' },
|
|
35
|
+
'dashboard.copyAria': { en: 'Copy the {command} command' },
|
|
36
|
+
'dashboard.startIdeaCode': { en: '`/start [your idea]`' },
|
|
37
|
+
'dashboard.kpiTasks': { en: 'Tasks' },
|
|
38
|
+
'dashboard.donePct': { en: '{percent}% done' },
|
|
39
|
+
'dashboard.acceptanceTests': { en: 'Acceptance tests' },
|
|
40
|
+
'dashboard.criteriaTested': { en: '{count} criteria have a test' },
|
|
41
|
+
'dashboard.kpiMvp': { en: 'MVP criteria' },
|
|
42
|
+
'dashboard.featuresCount': { en: '{count} features' },
|
|
43
|
+
'dashboard.kpiDecisions': { en: 'Decisions' },
|
|
44
|
+
'dashboard.usersAuto': { en: '{user} user · {auto} auto' },
|
|
45
|
+
'dashboard.board': { en: 'Board' },
|
|
46
|
+
'dashboard.rejects': { en: '{count} rejected' },
|
|
47
|
+
'dashboard.kpiRejects': { en: 'Rejected' },
|
|
48
|
+
'dashboard.membersCount': { en: '{count} members' },
|
|
49
|
+
'dashboard.kpiCommits7': { en: 'Commits · 7 days' },
|
|
50
|
+
'dashboard.filesWaiting': { en: '{count} files waiting' },
|
|
51
|
+
'dashboard.noGit': { en: 'no git' },
|
|
52
|
+
'dashboard.kpiLimit': { en: 'Limit' },
|
|
53
|
+
'dashboard.weeklyLevel': { en: 'weekly {percent}% · {level}' },
|
|
54
|
+
'dashboard.unknown': { en: 'unknown' },
|
|
55
|
+
'dashboard.tabsLabel': { en: 'Sections' },
|
|
56
|
+
'dashboard.tabOverview': { en: 'Overview' },
|
|
57
|
+
'dashboard.tabRoadmap': { en: 'Roadmap' },
|
|
58
|
+
'dashboard.tabDecisions': { en: 'Decisions' },
|
|
59
|
+
'dashboard.tabFindings': { en: 'Findings' },
|
|
60
|
+
'dashboard.tabQuality': { en: 'Quality' },
|
|
61
|
+
'dashboard.tabActivity': { en: 'Activity' },
|
|
62
|
+
'dashboard.tabProduct': { en: 'Product and tech' },
|
|
63
|
+
'dashboard.tabOperations': { en: 'Operations' },
|
|
64
|
+
'dashboard.tabLimit': { en: 'Limit and cost' },
|
|
65
|
+
'dashboard.footer': { en: 'Generated: {when} · Source: docs/*.md, git, .claude/state/usage.json · Updated automatically after every Claude answer (<code>node .claude/hooks/dashboard.mjs</code>)' },
|
|
66
|
+
'dashboard.statusSummary': { en: 'Status summary' },
|
|
67
|
+
'dashboard.noSummary': { en: 'No summary yet.' },
|
|
68
|
+
'dashboard.lastSession': { en: 'In the last session' },
|
|
69
|
+
'dashboard.noRecords': { en: 'No records.' },
|
|
70
|
+
'dashboard.recentActivity': { en: 'Recent activity' },
|
|
71
|
+
'dashboard.noActivity': { en: 'No activity yet.' },
|
|
72
|
+
'dashboard.stages': { en: 'Stages' },
|
|
73
|
+
'dashboard.stageStart': { en: 'Start' },
|
|
74
|
+
'dashboard.stageStartLetter': { en: 'S' },
|
|
75
|
+
'dashboard.feedCommit': { en: 'commit' },
|
|
76
|
+
'dashboard.feedDecision': { en: 'decision' },
|
|
77
|
+
'dashboard.feedBoard': { en: 'board' },
|
|
78
|
+
'dashboard.feedMaintenance': { en: 'maintenance' },
|
|
79
|
+
'dashboard.commitKindOther': { en: 'other' },
|
|
80
|
+
'dashboard.noRoadmap': { en: 'The roadmap does not exist yet. It is created in `/start` step 8.' },
|
|
81
|
+
'dashboard.topicFilter': { en: 'Topic filter' },
|
|
82
|
+
'dashboard.all': { en: 'All' },
|
|
83
|
+
'dashboard.auto': { en: 'auto' },
|
|
84
|
+
'dashboard.oneWay': { en: 'one-way' },
|
|
85
|
+
'dashboard.user': { en: 'user' },
|
|
86
|
+
'dashboard.noDecisions': { en: 'No decision made yet. Decisions start with `/start`.' },
|
|
87
|
+
'dashboard.members': { en: 'Members' },
|
|
88
|
+
'dashboard.boardSetUp': { en: 'set up' },
|
|
89
|
+
'dashboard.notSetUp': { en: 'not set up' },
|
|
90
|
+
'dashboard.boardNotSetUp': { en: 'The board is not set up.' },
|
|
91
|
+
'dashboard.commitReview': { en: 'Commit review: {value}' },
|
|
92
|
+
'dashboard.on': { en: 'on' },
|
|
93
|
+
'dashboard.off': { en: 'off' },
|
|
94
|
+
'dashboard.summary': { en: 'Summary' },
|
|
95
|
+
'dashboard.kpiMeetings': { en: 'Meetings' },
|
|
96
|
+
'dashboard.kpiApproval': { en: 'Approval rate' },
|
|
97
|
+
'dashboard.criticalFinding': { en: 'critical finding' },
|
|
98
|
+
'dashboard.councilHeading': { en: 'Council · first opinion → anonymous cross vote → chair' },
|
|
99
|
+
'dashboard.noDecision': { en: 'no decision' },
|
|
100
|
+
'dashboard.latestCouncil': { en: 'Latest: {topic}' },
|
|
101
|
+
'dashboard.low': { en: 'low' },
|
|
102
|
+
'dashboard.kpiDisputed': { en: 'Disputed' },
|
|
103
|
+
'dashboard.kpiEliminated': { en: 'Eliminated' },
|
|
104
|
+
'dashboard.byCrossVote': { en: 'by cross vote' },
|
|
105
|
+
'dashboard.overallRanking': { en: 'Overall ranking' },
|
|
106
|
+
'dashboard.opinion': { en: 'Opinion {letter}' },
|
|
107
|
+
'dashboard.avg': { en: 'avg. {average}' },
|
|
108
|
+
'dashboard.open': { en: 'open' },
|
|
109
|
+
'dashboard.noCouncil': { en: 'No council has met yet. It meets automatically for plans, end of phase, going live and one-way decisions.' },
|
|
110
|
+
'dashboard.meetingLog': { en: 'Meeting log' },
|
|
111
|
+
'dashboard.noMeetings': { en: 'No meeting held yet.' },
|
|
112
|
+
'dashboard.checklists': { en: 'Checklists' },
|
|
113
|
+
'dashboard.codeHealth': { en: 'Code health · last 30 days' },
|
|
114
|
+
'dashboard.fixRate': { en: 'Fix rate' },
|
|
115
|
+
'dashboard.uncommitted': { en: 'Uncommitted' },
|
|
116
|
+
'dashboard.fixRateNote': { en: 'A high fix rate can mean new features break often; discuss it in the retro.' },
|
|
117
|
+
'dashboard.lastQa': { en: 'Last QA · {name}' },
|
|
118
|
+
'dashboard.passed': { en: 'Passed' },
|
|
119
|
+
'dashboard.failed': { en: 'Failed' },
|
|
120
|
+
'dashboard.notRun': { en: 'Not run' },
|
|
121
|
+
'dashboard.withEvidence': { en: 'with evidence' },
|
|
122
|
+
'dashboard.openReport': { en: 'open report' },
|
|
123
|
+
'dashboard.kpiTested': { en: 'With a test' },
|
|
124
|
+
'dashboard.kpiPassing': { en: 'Passing' },
|
|
125
|
+
'dashboard.reportTime': { en: 'report: {when}' },
|
|
126
|
+
'dashboard.noJunit': { en: 'No JUnit report' },
|
|
127
|
+
'dashboard.noAcceptanceIds': { en: 'The PRD has no acceptance criteria with an id (`AC-01.1` format).' },
|
|
128
|
+
'dashboard.metricsMonthly': { en: 'Metrics · monthly' },
|
|
129
|
+
'dashboard.noMetrics': { en: 'No metrics recorded yet. `/maintain monthly` and `/retro` add them.' },
|
|
130
|
+
'dashboard.criticalFlowTests': { en: 'Critical flow tests' },
|
|
131
|
+
'dashboard.present': { en: 'present' },
|
|
132
|
+
'dashboard.missing': { en: 'missing' },
|
|
133
|
+
'dashboard.noTestPlan': { en: 'No test plan.' },
|
|
134
|
+
'dashboard.maintenanceLog': { en: 'Maintenance log' },
|
|
135
|
+
'dashboard.noMaintenance': { en: 'No maintenance done yet.' },
|
|
136
|
+
'dashboard.lastRetro': { en: 'Last retro: {value}' },
|
|
137
|
+
'dashboard.commitsLast14': { en: 'Commits · last 14 days' },
|
|
138
|
+
'dashboard.totalParen': { en: '(total {total})' },
|
|
139
|
+
'dashboard.sparkAria': { en: 'Daily commit count over the last 14 days' },
|
|
140
|
+
'dashboard.commitTip': { en: '{date}: {count} commits' },
|
|
141
|
+
'dashboard.today': { en: 'today' },
|
|
142
|
+
'dashboard.showTable': { en: 'Show as table' },
|
|
143
|
+
'dashboard.feed': { en: 'Feed' },
|
|
144
|
+
'dashboard.product': { en: 'Product' },
|
|
145
|
+
'dashboard.problem': { en: 'Problem' },
|
|
146
|
+
'dashboard.noPrd': { en: 'The PRD has not been written yet.' },
|
|
147
|
+
'dashboard.valueProp': { en: 'Value proposition' },
|
|
148
|
+
'dashboard.outOfScope': { en: 'Out of scope' },
|
|
149
|
+
'dashboard.mvpFeatures': { en: 'MVP features' },
|
|
150
|
+
'dashboard.noMvp': { en: 'The MVP is not defined yet.' },
|
|
151
|
+
'dashboard.criteriaResults': { en: 'Acceptance criteria · test result' },
|
|
152
|
+
'dashboard.passedBadge': { en: 'passed' },
|
|
153
|
+
'dashboard.failedBadge': { en: 'failed' },
|
|
154
|
+
'dashboard.noResult': { en: 'no result' },
|
|
155
|
+
'dashboard.noTest': { en: 'no test' },
|
|
156
|
+
'dashboard.technology': { en: 'Technology' },
|
|
157
|
+
'dashboard.noStack': { en: 'No stack chosen.' },
|
|
158
|
+
'dashboard.design': { en: 'Design' },
|
|
159
|
+
'dashboard.noDesign': { en: 'No design direction chosen.' },
|
|
160
|
+
'dashboard.previews': { en: 'Previews' },
|
|
161
|
+
'dashboard.unitEconomics': { en: 'Unit economics' },
|
|
162
|
+
'dashboard.kpiMargin': { en: 'Contribution margin' },
|
|
163
|
+
'dashboard.perPayingUserMonth': { en: 'per paying user / month' },
|
|
164
|
+
'dashboard.kpiBreakEven': { en: 'Break-even' },
|
|
165
|
+
'dashboard.payingUsers': { en: 'paying users' },
|
|
166
|
+
'dashboard.negativeMargin': { en: 'negative margin' },
|
|
167
|
+
'dashboard.atTarget': { en: 'At target ({target} users)' },
|
|
168
|
+
'dashboard.monthlyProfitLoss': { en: 'monthly profit / loss' },
|
|
169
|
+
'dashboard.variableOverPrice': { en: 'Variable / price' },
|
|
170
|
+
'dashboard.over30': { en: 'over 30%' },
|
|
171
|
+
'dashboard.noInputs': { en: 'Inputs are empty.' },
|
|
172
|
+
'dashboard.userFeedback': { en: 'User feedback' },
|
|
173
|
+
'dashboard.kpiTotal': { en: 'Total' },
|
|
174
|
+
'dashboard.kpiNew': { en: 'New' },
|
|
175
|
+
'dashboard.kpiPlanned': { en: 'Planned' },
|
|
176
|
+
'dashboard.topThemes': { en: 'Top themes' },
|
|
177
|
+
'dashboard.noFeedback': { en: 'No feedback yet.' },
|
|
178
|
+
'dashboard.learning': { en: 'Learning · comprehension check' },
|
|
179
|
+
'dashboard.kpiRight': { en: 'Right' },
|
|
180
|
+
'dashboard.kpiWrong': { en: 'Wrong' },
|
|
181
|
+
'dashboard.kpiSuccess': { en: 'Success rate' },
|
|
182
|
+
'dashboard.oftenMissed': { en: 'Often missed concepts' },
|
|
183
|
+
'dashboard.brandPack': { en: 'Brand pack' },
|
|
184
|
+
'dashboard.filesCount': { en: '{count} files' },
|
|
185
|
+
'dashboard.usageRules': { en: 'usage rules' },
|
|
186
|
+
'dashboard.noLogo': { en: 'No logo yet.' },
|
|
187
|
+
'dashboard.promoResearch': { en: 'Promo and research' },
|
|
188
|
+
'dashboard.videos': { en: 'Videos' },
|
|
189
|
+
'dashboard.noRender': { en: 'no render' },
|
|
190
|
+
'dashboard.noVideos': { en: 'No videos.' },
|
|
191
|
+
'dashboard.researchNotes': { en: 'Research notes' },
|
|
192
|
+
'dashboard.noNotes': { en: 'No notes.' },
|
|
193
|
+
'dashboard.unreleased': { en: 'Unreleased changes (CHANGELOG)' },
|
|
194
|
+
'dashboard.noUnreleased': { en: 'No unreleased changes.' },
|
|
195
|
+
'dashboard.limit5h': { en: '5-hour' },
|
|
196
|
+
'dashboard.limitWeeklyLower': { en: 'weekly' },
|
|
197
|
+
'dashboard.limitWeekly': { en: 'Weekly' },
|
|
198
|
+
'dashboard.yellowThreshold': { en: 'yellow threshold' },
|
|
199
|
+
'dashboard.redThreshold': { en: 'red threshold' },
|
|
200
|
+
'dashboard.resetsLabel': { en: 'Resets: {when}' },
|
|
201
|
+
'dashboard.resetsParen': { en: '(resets {when})' },
|
|
202
|
+
'dashboard.renewed': { en: 'Renewed' },
|
|
203
|
+
'dashboard.thresholdsNote': { en: 'thresholds {yellow}% / {red}%' },
|
|
204
|
+
'dashboard.usageLimit': { en: 'Usage limit' },
|
|
205
|
+
'dashboard.contextWindow': { en: 'Context window' },
|
|
206
|
+
'dashboard.lastSessionShort': { en: 'Last session' },
|
|
207
|
+
'dashboard.contextHint': { en: '/wrap-up + /clear is suggested at 50% · as of {time}' },
|
|
208
|
+
'dashboard.noContext': { en: 'No context data (the status line writes it).' },
|
|
209
|
+
'dashboard.modelEffort': { en: 'Model and effort · per role' },
|
|
210
|
+
'dashboard.modelsHint': { en: '/build asks at the start of every task (docs/workflow/models.md).' },
|
|
211
|
+
'dashboard.tokenCost': { en: 'Tokens and cost · last 30 days' },
|
|
212
|
+
'dashboard.totalTokens': { en: 'Total tokens' },
|
|
213
|
+
'dashboard.apiEquivalent': { en: 'API equivalent' },
|
|
214
|
+
'dashboard.notBilled': { en: 'not a bill on a subscription' },
|
|
215
|
+
'dashboard.dailyAvg': { en: 'Daily average' },
|
|
216
|
+
'dashboard.activeDays': { en: '{count} active days' },
|
|
217
|
+
'dashboard.ccusageNote': { en: 'ccusage · as of {when} · for details see <code>/session-report</code>' },
|
|
218
|
+
'dashboard.noData': { en: 'No data.' },
|
|
219
|
+
'dashboard.costLog': { en: 'Cost log' },
|
|
220
|
+
'dashboard.avgSize': { en: 'Average · {size}' },
|
|
221
|
+
'dashboard.recordsCount': { en: '{count} records' },
|
|
222
|
+
'dashboard.noCostRecords': { en: 'No records yet. `/build` writes each task\'s limit cost here.' },
|
|
223
|
+
'dashboard.accountsDeadlines': { en: 'Accounts and deadlines' },
|
|
224
|
+
'dashboard.noAccounts': { en: 'The account inventory is empty.' },
|
|
225
|
+
'dashboard.none': { en: 'none' },
|
|
226
|
+
'dashboard.daysOverdue': { en: '{days} days overdue' },
|
|
227
|
+
'dashboard.daysLeft': { en: '{days} days' },
|
|
228
|
+
'dashboard.dateExpiry': { en: 'expiry' },
|
|
229
|
+
'dashboard.dateKeyRotation': { en: 'key rotation' },
|
|
230
|
+
'dashboard.spendAlarms': { en: 'Spend alarms' },
|
|
231
|
+
'dashboard.noSpendAlarms': { en: 'No alarm recorded for a paid service.' },
|
|
232
|
+
'dashboard.notSet': { en: 'not set' },
|
|
233
|
+
'dashboard.checkIt': { en: 'check' },
|
|
234
|
+
'dashboard.flagsHeading': { en: 'Feature flags' },
|
|
235
|
+
'dashboard.overdue': { en: 'overdue' },
|
|
236
|
+
'dashboard.untested': { en: 'not tested' },
|
|
237
|
+
'dashboard.tested': { en: 'tested' },
|
|
238
|
+
'dashboard.noFlags': { en: 'No flags.' },
|
|
239
|
+
'dashboard.liveMonitoring': { en: 'Live monitoring' },
|
|
240
|
+
'dashboard.liveLastRun': { en: 'last run' },
|
|
241
|
+
'dashboard.liveUrlHint': { en: 'Add LIVE_URL under GitHub → Settings → Variables' },
|
|
242
|
+
'dashboard.succeeded': { en: 'succeeded' },
|
|
243
|
+
'dashboard.failedRun': { en: 'failed' },
|
|
244
|
+
'dashboard.logLink': { en: 'log' },
|
|
245
|
+
'dashboard.liveBroken': { en: 'Live monitoring is broken' },
|
|
246
|
+
'dashboard.recentWorkflows': { en: 'Recent workflows' },
|
|
247
|
+
'dashboard.noRuns': { en: 'No runs yet.' },
|
|
248
|
+
'dashboard.openPrs': { en: 'Open PRs' },
|
|
249
|
+
'dashboard.draft': { en: 'draft' },
|
|
250
|
+
'dashboard.noPrs': { en: 'No open PRs.' },
|
|
251
|
+
'dashboard.ghNote': { en: 'Read with the gh CLI, refreshed every 5 minutes.' },
|
|
252
|
+
'dashboard.noGithub': { en: 'No GitHub data: the gh CLI must be installed and logged in, and the repo must be linked to GitHub.' },
|
|
253
|
+
'dashboard.healthHealthy': { en: 'Healthy' },
|
|
254
|
+
'dashboard.healthGood': { en: 'Good' },
|
|
255
|
+
'dashboard.healthRisky': { en: 'At risk' },
|
|
256
|
+
'dashboard.areaScores': { en: 'Health score by area' },
|
|
257
|
+
'dashboard.findingsLine': { en: '{date} · {findings} findings' },
|
|
258
|
+
'dashboard.findingsCritical': { en: ' · {critical} critical' },
|
|
259
|
+
'dashboard.noReportYet': { en: 'Without a report yet:' },
|
|
260
|
+
'dashboard.noFindingReports': { en: 'No finding report yet. To start:' },
|
|
261
|
+
'dashboard.reportHistory': { en: 'Report history' },
|
|
262
|
+
'dashboard.noReports': { en: 'No reports.' },
|
|
263
|
+
'dashboard.scoringNote': { en: 'Scoring: finding severity = impact (40) + likelihood (25) + spread (20) + urgency (15); health = 100 − penalty (critical 15, high 8, medium 4, low 1). Method: <code>.claude/findings/protocol.md</code>' },
|
|
264
|
+
'dashboard.findingKind.tech': { en: 'Technical' },
|
|
265
|
+
'dashboard.findingKind.business': { en: 'Business' },
|
|
266
|
+
'dashboard.findingKind.security': { en: 'Security' },
|
|
267
|
+
'dashboard.findingKind.ux': { en: 'UX' },
|
|
268
|
+
'dashboard.findingKind.perf': { en: 'Performance' },
|
|
269
|
+
'dashboard.findingKind.legal': { en: 'Legal' },
|
|
270
|
+
'dashboard.th.date': { en: 'Date' },
|
|
271
|
+
'dashboard.th.stage': { en: 'Stage' },
|
|
272
|
+
'dashboard.th.topic': { en: 'Topic' },
|
|
273
|
+
'dashboard.th.question': { en: 'Question' },
|
|
274
|
+
'dashboard.th.chosen': { en: 'Chosen' },
|
|
275
|
+
'dashboard.th.door': { en: 'Door' },
|
|
276
|
+
'dashboard.th.decidedBy': { en: 'Decided by' },
|
|
277
|
+
'dashboard.th.kind': { en: 'Type' },
|
|
278
|
+
'dashboard.th.decision': { en: 'Decision' },
|
|
279
|
+
'dashboard.th.consensus': { en: 'Consensus' },
|
|
280
|
+
'dashboard.th.minutes': { en: 'Minutes' },
|
|
281
|
+
'dashboard.th.scope': { en: 'Scope' },
|
|
282
|
+
'dashboard.th.attendees': { en: 'Attendees' },
|
|
283
|
+
'dashboard.th.result': { en: 'Result' },
|
|
284
|
+
'dashboard.th.critical': { en: 'Critical' },
|
|
285
|
+
'dashboard.th.userDecision': { en: 'User decision' },
|
|
286
|
+
'dashboard.th.period': { en: 'Period' },
|
|
287
|
+
'dashboard.th.task': { en: 'Task' },
|
|
288
|
+
'dashboard.th.avgMinutes': { en: 'Avg. time (min)' },
|
|
289
|
+
'dashboard.th.avgLimit': { en: 'Avg. limit' },
|
|
290
|
+
'dashboard.th.fixes': { en: 'Fixes' },
|
|
291
|
+
'dashboard.th.reverts': { en: 'Reverts' },
|
|
292
|
+
'dashboard.th.duplicateCode': { en: 'Duplicate code' },
|
|
293
|
+
'dashboard.th.openCritical': { en: 'Open critical' },
|
|
294
|
+
'dashboard.th.acceptance': { en: 'Acceptance' },
|
|
295
|
+
'dashboard.th.flow': { en: 'Flow' },
|
|
296
|
+
'dashboard.th.testKind': { en: 'Test type' },
|
|
297
|
+
'dashboard.th.file': { en: 'File' },
|
|
298
|
+
'dashboard.th.day': { en: 'Day' },
|
|
299
|
+
'dashboard.th.commit': { en: 'Commits' },
|
|
300
|
+
'dashboard.th.criterion': { en: 'Criterion' },
|
|
301
|
+
'dashboard.th.test': { en: 'Test' },
|
|
302
|
+
'dashboard.th.job': { en: 'Job' },
|
|
303
|
+
'dashboard.th.size': { en: 'Size' },
|
|
304
|
+
'dashboard.th.usage5h': { en: '5h usage' },
|
|
305
|
+
'dashboard.th.service': { en: 'Service' },
|
|
306
|
+
'dashboard.th.purpose': { en: 'Purpose' },
|
|
307
|
+
'dashboard.th.owner': { en: 'Owner' },
|
|
308
|
+
'dashboard.th.dates': { en: 'Dates' },
|
|
309
|
+
'dashboard.th.amount': { en: 'Amount' },
|
|
310
|
+
'dashboard.th.alertThresholds': { en: 'Alert thresholds' },
|
|
311
|
+
'dashboard.th.lastCheck': { en: 'Last check' },
|
|
312
|
+
'dashboard.th.flag': { en: 'Flag' },
|
|
313
|
+
'dashboard.th.removal': { en: 'Removal' },
|
|
314
|
+
'dashboard.th.killSwitch': { en: 'Kill switch' },
|
|
315
|
+
'dashboard.th.workflow': { en: 'Workflow' },
|
|
316
|
+
'dashboard.th.branch': { en: 'Branch' },
|
|
317
|
+
'dashboard.th.time': { en: 'Time' },
|
|
318
|
+
'dashboard.th.health': { en: 'Health' },
|
|
319
|
+
'dashboard.th.change': { en: 'Change' },
|
|
320
|
+
'dashboard.th.finding': { en: 'Finding' },
|
|
321
|
+
'dashboard.th.report': { en: 'Report' },
|
|
322
|
+
'dashboard.alert.kitPending': { en: 'Project is not set up yet. To bring existing code into the kit, run /adopt.' },
|
|
323
|
+
'dashboard.act.startIdea': { en: '/start [your idea]' },
|
|
324
|
+
'dashboard.alert.handoffPending': { en: 'Handoff note waiting: the project is being taken over from another person or account (docs/workflow/handoff.md).' },
|
|
325
|
+
'dashboard.alert.unknownVerdict': { en: 'Board result not readable ({kind}, {scope}): "{result}" — write APPROVE, CONDITIONAL or REJECT' },
|
|
326
|
+
'dashboard.alert.boardReject': { en: 'The board rejected ({kind}, {scope}): {critical}' },
|
|
327
|
+
'dashboard.act.askClaudeFix': { en: 'Ask Claude: fix / accept the risk' },
|
|
328
|
+
'dashboard.alert.limitRed': { en: 'Usage limit is red: {short}' },
|
|
329
|
+
'dashboard.act.limitRed': { en: 'Weigh the options before new work (Limit tab)' },
|
|
330
|
+
'dashboard.alert.limitYellow': { en: 'Usage limit is yellow: {short}' },
|
|
331
|
+
'dashboard.act.limitYellow': { en: 'Plan big tasks around the limit' },
|
|
332
|
+
'dashboard.alert.pendingDecision': { en: 'Pending decision: {text}' },
|
|
333
|
+
'dashboard.act.claudeWaiting': { en: 'Claude is waiting for you' },
|
|
334
|
+
'dashboard.alert.leftOff': { en: 'Unfinished work: {text}' },
|
|
335
|
+
'dashboard.act.buildContinue': { en: '/build to continue' },
|
|
336
|
+
'dashboard.alert.openIssue': { en: 'Open issue: {text}' },
|
|
337
|
+
'dashboard.alert.repeatedBug': { en: 'Same bug class {count} times: {cls} ({specs}). A rule that prevents the repeat could be added.' },
|
|
338
|
+
'dashboard.alert.uncommitted': { en: '{count} files are not committed.' },
|
|
339
|
+
'dashboard.act.commitOrWrapUp': { en: 'Commit or /wrap-up' },
|
|
340
|
+
'dashboard.alert.progressStale': { en: 'docs/workflow/progress.md has not been updated for {count} commits.' },
|
|
341
|
+
'dashboard.alert.closedTopics': { en: 'Question mode closed topics: {topics}. Decisions on these topics are made automatically.' },
|
|
342
|
+
'dashboard.act.askModeOpen': { en: '/ask-mode on <topic>' },
|
|
343
|
+
'dashboard.alert.boardNotSetUp': { en: 'The expert board is not set up.' },
|
|
344
|
+
'dashboard.alert.liveMonitoring': { en: 'Live monitoring: {title}' },
|
|
345
|
+
'dashboard.act.fixLive': { en: '/fix-bug live monitoring #{number}' },
|
|
346
|
+
'dashboard.alert.liveRunFailed': { en: 'The last live monitoring run failed.' },
|
|
347
|
+
'dashboard.act.fixLiveShort': { en: '/fix-bug live monitoring' },
|
|
348
|
+
'dashboard.alert.ciFailed': { en: 'The last CI run on the main branch failed.' },
|
|
349
|
+
'dashboard.act.operationsTab': { en: 'Operations tab' },
|
|
350
|
+
'dashboard.alert.dateOverdue': { en: '{service}: {kind} date has passed ({date}).' },
|
|
351
|
+
'dashboard.alert.dateSoon': { en: '{service}: {kind} in {left} days ({date}).' },
|
|
352
|
+
'dashboard.act.renew': { en: 'Renew or turn on auto-renewal' },
|
|
353
|
+
'dashboard.alert.noTwoFactor': { en: 'The {service} account has no 2FA.' },
|
|
354
|
+
'dashboard.alert.spendUnset': { en: '{service}: spend cap or alert is not set.' },
|
|
355
|
+
'dashboard.alert.negativeEconomics': { en: 'Unit economics are negative: every paying user costs you {amount} {currency}.' },
|
|
356
|
+
'dashboard.act.priceDecision': { en: 'Price or cost decision (/plan-task)' },
|
|
357
|
+
'dashboard.alert.acceptRed': { en: '{id} is marked done in the PRD but its acceptance test is red.' },
|
|
358
|
+
'dashboard.alert.acceptNoResult': { en: '{id} is marked done in the PRD but its acceptance test has no result.' },
|
|
359
|
+
'dashboard.alert.acceptMissing': { en: '{id} is marked done in the PRD but it has no acceptance test.' },
|
|
360
|
+
'dashboard.act.acceptFix': { en: 'Run the test or remove the mark' },
|
|
361
|
+
'dashboard.alert.flagsOverdue': { en: '{count} flags past their removal date: {names}.' },
|
|
362
|
+
'dashboard.act.removeFlag': { en: 'Remove the flag and the old code path' },
|
|
363
|
+
'dashboard.alert.newFeedback': { en: '{count} user feedback items have not been processed.' },
|
|
364
|
+
'dashboard.alert.packagesOn': { en: 'Context packages that are on: {names}. They add load to the skill list in every session.' },
|
|
365
|
+
'dashboard.act.packagesOff': { en: 'If you do not use them: /tools off <package>' },
|
|
366
|
+
'dashboard.alert.cmdListLight': { en: 'The profile is Full but the command list is light: descriptions of rarely used commands are not in the context.' },
|
|
367
|
+
'dashboard.act.cmdFull': { en: '/tools commands full' },
|
|
368
|
+
'dashboard.alert.cmdListHeavy': { en: 'The command list is {mode}: descriptions of rarely used commands enter the context in every session (~1,100 tokens).' },
|
|
369
|
+
'dashboard.cmdModeFull': { en: 'full' },
|
|
370
|
+
'dashboard.cmdModeMixed': { en: 'mixed' },
|
|
371
|
+
'dashboard.act.cmdLight': { en: 'If the profile is not Full: /tools commands light' },
|
|
372
|
+
'dashboard.alert.codeMapStale': { en: 'The code map for humans (Understand-Anything) has not been updated for {days} days.' },
|
|
373
|
+
'dashboard.act.understand': { en: '/understand (reads only what changed; release package)' },
|
|
374
|
+
'dashboard.alert.contextFull': { en: 'Context is {percent}% full; answer quality may drop.' },
|
|
375
|
+
'dashboard.act.wrapUpClear': { en: '/wrap-up and /clear' },
|
|
376
|
+
'dashboard.alert.findingsCritical': { en: 'The {kind} finding report has {critical} critical findings (health {health}/100).' },
|
|
377
|
+
'dashboardData.prodRefInMcp': { en: 'The prod project\'s ref ({ref}) is in .mcp.json: the AI can connect to prod.' },
|
|
378
|
+
'dashboardData.prodRefAction': { en: '.mcp.json → dev ref (docs/operations/accounts.md → Environments)' },
|
|
379
|
+
'dashboardData.rlsMissing': { en: 'Supabase is in use but there is no RLS attacker test (tests/security/rls.mjs).' },
|
|
380
|
+
'dashboardData.rlsAction': { en: 'Get the template with /kit-update, add the tables to TABLES' },
|
|
381
|
+
'guard.commit.skipAsk': { en: 'Commit gate: --skip bypasses the board review and the deterministic gate. Approve only if the user explicitly asks.' },
|
|
382
|
+
'guard.commit.noCommands': { en: '(no commands defined)' },
|
|
383
|
+
'guard.commit.gateApprovalAsk': { en: 'Gate command approval: from now on the gate runs these commands from AGENTS.md → Commands every time:\n{list}\nApprove only if you trust them.' },
|
|
384
|
+
'guard.commit.gateUnknownKeys': { en: 'These keys under AGENTS.md → Commands do not run (the gate reads dev, preview, test, lint, type check, build): {keys}' },
|
|
385
|
+
'guard.destructive.approvalSuffix': { en: '{reason}. User approval required.' },
|
|
386
|
+
'guard.destructive.prodDeploy': { en: 'Deploy to the prod environment' },
|
|
387
|
+
'guard.destructive.promoteRollback': { en: 'The prod environment is changing (promote/rollback)' },
|
|
388
|
+
'guard.destructive.unclearEnv': { en: 'Environment variables are being pulled but the environment is not plain development/preview (a variable or custom environment: could be prod)' },
|
|
389
|
+
'guard.destructive.serverDeploy': { en: 'Deploy to a server' },
|
|
390
|
+
'guard.destructive.storeSubmit': { en: 'Store submission, prod OTA update or rollback' },
|
|
391
|
+
'guard.destructive.pushMain': { en: 'Direct push to the main branch' },
|
|
392
|
+
'guard.destructive.rewriteHistory': { en: 'Git history is being rewritten' },
|
|
393
|
+
'guard.destructive.migration': { en: 'A migration is being applied (check the target environment)' },
|
|
394
|
+
'guard.destructive.remoteDb': { en: 'The command connects to a database other than localhost (could be prod). User approval required; the AI must not use prod access credentials.' },
|
|
395
|
+
'guard.destructive.testShell': { en: 'A test file is being changed, moved or deleted with a shell command. Weakening a test to make it pass is forbidden (AGENTS.md rule 7); edit tests with a file tool. User approval required.' },
|
|
396
|
+
'guard.destructive.inlineTest': { en: 'An inline script names a test path; it may write to a test file. Only the test-writer agent writes to test files (AGENTS.md rule 7). User approval required.' },
|
|
397
|
+
'guard.destructive.obfuscated': { en: 'The command looks obfuscated (line ending \\, $\'..\', $(...), `...` or ${...}) and contains a guarded operation. User approval required.' },
|
|
398
|
+
'guard.destructive.indirectHook': { en: 'A kit guard script is run with an indirect spelling ($VARIABLE, $(...), `...`, ${...} or * ?); the rule text cannot see inside it. User approval required.' },
|
|
399
|
+
'guard.destructive.perm.freezeOff': { en: 'The edit lock is being removed' },
|
|
400
|
+
'guard.destructive.perm.toolsCommands': { en: 'The shared .claude/settings.json → skillOverrides is changing (command list)' },
|
|
401
|
+
'guard.destructive.perm.planAdd': { en: 'The approved plan\'s file list is widening (scope shield)' },
|
|
402
|
+
'guard.destructive.perm.planSave': { en: 'The scope shield\'s file list is being written' },
|
|
403
|
+
'guard.destructive.perm.planEnd': { en: 'The scope shield is being closed' },
|
|
404
|
+
'guard.destructive.perm.commitSkip': { en: 'The commit gate and the board review are being skipped' },
|
|
405
|
+
'guard.destructive.perm.prefsEdit': { en: 'The personal preferences file (~/.vibe-kit/preferences.md) is changing' },
|
|
406
|
+
'guard.destructive.perm.gateApprove': { en: 'The commands the deterministic gate will run are being approved' },
|
|
407
|
+
'guard.destructive.perm.protectedShell': { en: 'A rule or guard file is being changed with a shell command' },
|
|
408
|
+
'guard.destructive.unclearNetPath': { en: 'target is a network path ({path})' },
|
|
409
|
+
'guard.destructive.unclearVar': { en: 'target contains a variable or command ({path})' },
|
|
410
|
+
'guard.destructive.unclearBrace': { en: 'target contains a brace expansion ({path})' },
|
|
411
|
+
'guard.destructive.unclearCd': { en: 'could not verify the {name} target ({target}); the folder of the following commands is unknown' },
|
|
412
|
+
'guard.destructive.homeDir': { en: 'home directory' },
|
|
413
|
+
'guard.destructive.unclearXargs': { en: 'xargs {command} does not show its target file' },
|
|
414
|
+
'guard.destructive.unclearNoTarget': { en: '{command} does not show its target file' },
|
|
415
|
+
'guard.destructive.unclearBranch': { en: 'git {sub} {arg}: not a path (may be a branch)' },
|
|
416
|
+
'guard.destructive.prefsFile': { en: '{path}: personal preferences file (user folder); it is not changed with the shell, use node .claude/hooks/prefs.mjs --add / --remove. User approval required.' },
|
|
417
|
+
'guard.destructive.gateApproval': { en: '{path}: gate command approval record (user folder); it is not changed with the shell, use node .claude/hooks/gate.mjs --approve. User approval required.' },
|
|
418
|
+
'guard.destructive.protectedShell': { en: '{rel}: {text} It is being changed with a shell command; for lock, plan and approval states use the matching kit command. User approval required.' },
|
|
419
|
+
'guard.destructive.unclearRule': { en: '{unclear}; the command names a rule or guard file (.claude, .git, AGENTS.md…) and the target could not be verified. User approval required.' },
|
|
420
|
+
'guard.destructive.labelLock': { en: 'Edit lock ({lock}/)' },
|
|
421
|
+
'guard.destructive.labelPlan': { en: 'Scope shield (task {task})' },
|
|
422
|
+
'guard.destructive.scopeUnclear': { en: '{label}: {unclear}; it is not possible to tell which files will change. Ask the user if needed.' },
|
|
423
|
+
'guard.destructive.scopeRoot': { en: '{label}: the command targets the project root or a parent folder ({rel}); files outside the lock/plan may change too. Ask the user if needed.' },
|
|
424
|
+
'guard.destructive.lockOutside': { en: 'Edit lock: {rel} is outside the lock ({lock}/) and the command may change it. Ask the user if needed.' },
|
|
425
|
+
'guard.destructive.planOutside': { en: 'Scope shield: {rel} is not in the approved plan (task {task}) and the command may change it. Ask the user if needed; if they approve, run node .claude/hooks/freeze-guard.mjs --plan-add <path>.' },
|
|
426
|
+
'guard.destructive.prefix': { en: 'Shield: {reason}' },
|
|
427
|
+
'guard.freeze.protectedAsk': { en: 'Rule, guard and workflow files change only with user approval.' },
|
|
428
|
+
'guard.freeze.prefsFile': { en: '{path}: personal preferences file; do not write it by hand, use node .claude/hooks/prefs.mjs --add / --remove.' },
|
|
429
|
+
'guard.freeze.gateApproval': { en: '{path}: gate command approval record; do not write it by hand, use node .claude/hooks/gate.mjs --approve.' },
|
|
430
|
+
'guard.freeze.scopeAsk': { en: 'Scope shield: {rel} is not in the approved plan (task {task}). Ask the user if needed; if they approve, run node .claude/hooks/freeze-guard.mjs --plan-add <path>. When the task is done, run --plan-end.' },
|
|
431
|
+
'guard.freeze.unknownPath': { en: '(unknown path)' },
|
|
432
|
+
'guard.package.npmMissing': { en: 'no such package in the npm registry' },
|
|
433
|
+
'guard.package.npmStatus': { en: 'npm responded {status}' },
|
|
434
|
+
'guard.package.similar': { en: 'very similar to the popular package "{similar}" (could be a typosquat)' },
|
|
435
|
+
'guard.package.newNpm': { en: 'published {age} days ago' },
|
|
436
|
+
'guard.package.lowDownloads': { en: '{downloads} weekly downloads' },
|
|
437
|
+
'guard.package.pypiMissing': { en: 'no such package on PyPI' },
|
|
438
|
+
'guard.package.pypiStatus': { en: 'PyPI responded {status}' },
|
|
439
|
+
'guard.package.newPypi': { en: 'first release was published {age} days ago' },
|
|
440
|
+
'guard.package.timeout': { en: 'could not be verified (timeout)' },
|
|
441
|
+
'guard.package.network': { en: 'could not be verified (network error)' },
|
|
442
|
+
'guard.package.ask': { en: 'Package gate warning: {list}. Before installing, make sure the package is really the one you want.' },
|
|
443
|
+
'guard.structure.offMap': { en: '"{rel}" is not in the structure map (.claude/structure.json). The right place is probably one of: {top}. If it is temporary or a trial, write it under sandbox/. If a new permanent place is needed, ask it as a technical decision and update the map (docs/architecture/structure.md).' },
|
|
444
|
+
'guard.structure.prefix': { en: 'Structure: {reason}' },
|
|
445
|
+
'guard.test.skip': { en: 'a test is skipped or focused alone (.skip / .only / skipIf / xit / pytest skip)' },
|
|
446
|
+
'guard.test.expectRemoved': { en: 'an expectation (expect/assert) is deleted or commented out' },
|
|
447
|
+
'guard.test.expectWeak': { en: 'an expectation is loosened (toBeTruthy, toBeDefined, expect.anything, expect without a matcher, assert True)' },
|
|
448
|
+
'guard.test.configRisk': { en: 'a setting that decides which tests run is changing (include/exclude, testMatch, passWithNoTests, threshold, test script)' },
|
|
449
|
+
'guard.test.configDeleted': { en: 'a test config file is deleted' },
|
|
450
|
+
'guard.test.fileDeleted': { en: 'a test file is deleted' },
|
|
451
|
+
'guard.test.movedAway': { en: 'a test file is moved to a path where it will not run ({source})' },
|
|
452
|
+
'guard.test.moveOverwrite': { en: 'the move overwrites an existing file ({source} → {path})' },
|
|
453
|
+
'guard.test.ask': { en: 'Test protection: in {name}, {reason}. Weakening a test to make it pass is forbidden (AGENTS.md rule 7). If the reason is real (a wrong test, a changed acceptance criterion), tell the user and get their approval; otherwise fix the code.' },
|
|
454
|
+
'statusRead.defaultProject': { en: 'Project' },
|
|
455
|
+
'statusRead.checklist.security': { en: 'Security' },
|
|
456
|
+
'statusRead.checklist.release': { en: 'Go-live' },
|
|
457
|
+
'statusRead.checklist.legal': { en: 'Legal / privacy' },
|
|
458
|
+
'statusRead.checklist.ai': { en: 'AI' },
|
|
459
|
+
'statusRead.checklist.launch': { en: 'Launch' },
|
|
460
|
+
'qaReport.title': { en: '# QA report · {stamp}' },
|
|
461
|
+
'qaReport.result': { en: '**Result:** {summary} ({count} criteria in the PRD, source: `{junit}`)' },
|
|
462
|
+
'qaReport.summary': { en: '{passed} passed · {failed} failed · {notRun} not run' },
|
|
463
|
+
'qaReport.tableHeader': { en: '| Criterion | Result | Evidence | Note |' },
|
|
464
|
+
'models.role.plan': { en: 'Planning and architecture' },
|
|
465
|
+
'models.role.code': { en: 'Writing code' },
|
|
466
|
+
'models.role.test': { en: 'Writing tests' },
|
|
467
|
+
'models.role.review': { en: 'Review and audit' },
|
|
468
|
+
'models.role.docs': { en: 'Documents and research' },
|
|
469
|
+
'models.noRecord': { en: 'no saved choice: recommended values' },
|
|
470
|
+
'models.unreadable': { en: 'saved choice unreadable: recommended values; rewrite it with --set' },
|
|
471
|
+
'statusline.notSetUp': { en: '◆ Kit not set up · to begin: /start [your idea] · existing code: /adopt' },
|
|
472
|
+
'statusline.step': { en: 'step {step}' },
|
|
473
|
+
'statusline.task': { en: 'task {done}/{total}' },
|
|
474
|
+
'statusline.question': { en: 'questions: {mode}' },
|
|
475
|
+
'statusline.modeOpen': { en: 'open' },
|
|
476
|
+
'statusline.modeOff': { en: 'off' },
|
|
477
|
+
'statusline.closed': { en: '(closed: {topics})' },
|
|
478
|
+
'statusline.pending': { en: 'pending decisions: {count}' },
|
|
479
|
+
'statusline.limit5h': { en: '5h {percent}%' },
|
|
480
|
+
'statusline.limitWeek': { en: 'weekly {percent}%' },
|
|
481
|
+
'statusline.context': { en: 'context {percent}%' },
|
|
482
|
+
'statusline.unreadable': { en: '▶ status unreadable' },
|
|
483
|
+
'usage.none': { en: 'No limit data. In the desktop app, use the get_usage tool. In the terminal or IDE the status line writes it after the first API response. If neither exists, ask the user for the /usage result.' },
|
|
484
|
+
'usage.window5h': { en: '5-hour' },
|
|
485
|
+
'usage.windowWeek': { en: 'weekly' },
|
|
486
|
+
'usage.windowPart': { en: '{name}: {percent}%{tail}' },
|
|
487
|
+
'usage.renewed': { en: '(renewed)' },
|
|
488
|
+
'usage.resets': { en: 'resets {clock}, in {left}' },
|
|
489
|
+
'usage.leftDays': { en: '{days} d {hours} h' },
|
|
490
|
+
'usage.leftHours': { en: '{hours} h {minutes} min' },
|
|
491
|
+
'usage.stale': { en: ' — may be outdated, verify with get_usage or /usage' },
|
|
492
|
+
'usage.summary': { en: '{parts} · level: {level} · read {age} min ago{stale}' },
|
|
493
|
+
'usage.level.green': { en: 'green' },
|
|
494
|
+
'usage.level.yellow': { en: 'yellow' },
|
|
495
|
+
'usage.level.red': { en: 'red' },
|
|
496
|
+
'usage.level.unknown': { en: 'unknown' },
|
|
497
|
+
'notify.done': { en: 'Job finished ({minutes} min). You can check the result.' },
|
|
498
|
+
'notify.waiting': { en: 'Claude is waiting for your answer.' },
|
|
496
499
|
};
|