qiksy 1.1.1 → 1.1.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qiksy",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Qiksy \u2014 one local engine for every Qiksy tool (Work Finder, Travel Assistant, Client Finder). Runs on your own Claude; nothing leaves your machine.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -696,7 +696,9 @@ const server = createServer(async (req, res) => {
696
696
 
697
697
  if (req.method === 'PUT' && !seg[3]) {
698
698
  if (!['draft', 'options'].includes(t.status)) {
699
- return json(res, 400, { error: `править поездку можно только в статусах draft/options (сейчас: ${t.status})` });
699
+ // A machine code, not Russian prose: the client renders it in the reader's
700
+ // own language (EN/UK users were shown raw Russian). Audit 2026-07-26.
701
+ return json(res, 400, { error: `TRIP_LOCKED:${t.status}` });
700
702
  }
701
703
  const b = await readBody(req);
702
704
  for (const k of ['title', 'from', 'to', 'departDate', 'returnDate', 'meetingAt', 'budget', 'criteria']) {
@@ -728,7 +730,7 @@ const server = createServer(async (req, res) => {
728
730
  const sb = await readBody(req).catch(() => ({}));
729
731
  if (LANGS.includes(sb.lang)) t.lang = sb.lang;
730
732
  if (!['draft', 'options'].includes(t.status)) {
731
- return json(res, 400, { error: `поиск доступен из статусов draft/options (сейчас: ${t.status})` });
733
+ return json(res, 400, { error: `SEARCH_LOCKED:${t.status}` });
732
734
  }
733
735
  if (!clientWorkAllowed(t)) return json(res, 402, { error: 'PLAN_REQUIRED' });
734
736
  if (!tripTravelers(t).length) return json(res, 400, { error: 'выберите хотя бы одного путника из команды' });
@@ -749,7 +751,7 @@ const server = createServer(async (req, res) => {
749
751
  if (!Number.isInteger(num)) return json(res, 400, { error: 'нужен номер варианта: { "n": 2 }' });
750
752
  // из ready_to_pay тоже можно — так оформляется связка (второй вариант следом)
751
753
  if (!['options', 'ready_to_pay'].includes(t.status)) {
752
- return json(res, 400, { error: `оформление доступно из статуса options (сейчас: ${t.status})` });
754
+ return json(res, 400, { error: `BOOK_LOCKED:${t.status}` });
753
755
  }
754
756
  if (!clientWorkAllowed(t)) return json(res, 402, { error: 'PLAN_REQUIRED' });
755
757
  if (!t.options.some(o => o.n === num)) return json(res, 400, { error: `варианта №${num} нет в подборе` });
@@ -763,7 +765,7 @@ const server = createServer(async (req, res) => {
763
765
  }
764
766
  if (req.method === 'POST' && seg[3] === 'paid') {
765
767
  if (t.status !== 'ready_to_pay') {
766
- return json(res, 400, { error: `«Оплачено» доступно из статуса ready_to_pay (сейчас: ${t.status})` });
768
+ return json(res, 400, { error: `PAID_LOCKED:${t.status}` });
767
769
  }
768
770
  t.status = 'paid';
769
771
  addActivity(t, 'HR подтвердила оплату — генерирую письмо, смету и чеклист');