Проверяю вход...

Activity Facts · real save test

Записать активность: смотрел рилс 15 минут

Эта страница вызывает реальный backend route /api/activity/facts/save-gate из браузера с текущей authenticated-сессией. После успешной записи факт должен появиться в /activity-facts.

Открыть /activity-factsВернуться в /workspace
Нажми большую синюю кнопку, чтобы записать тестовую активность: смотрел рилс 15 минут.

Save response

null

GET /api/activity/facts response

null

Request body preview

{
  "routeMode": "future_server_mediated_write",
  "idempotencyKey": "reels-15-min-7cebbe7f-bb40-4061-b27a-e8ee520a3f8f",
  "sourcePackageId": "reels-15-min-package-7cebbe7f-bb40-4061-b27a-e8ee520a3f8f",
  "activityProcessingPackage": {
    "packageId": "reels-15-min-package-7cebbe7f-bb40-4061-b27a-e8ee520a3f8f",
    "status": "ready_for_save_gate",
    "rawInput": {
      "text": "смотрел рилс 15 минут",
      "locale": "ru",
      "source": "manual_test_fixture",
      "capturedAtIso": "2026-06-25T17:09:56.723Z"
    },
    "recognition": {
      "status": "obvious_activity",
      "confidence": 1,
      "reason": "Manual authenticated browser save test for activity facts runtime.",
      "detectedActivityTitle": "смотрел рилс 15 минут",
      "shouldAskUserBeforeSaving": false
    },
    "measures": [
      {
        "localId": "measure-duration-15-min",
        "measureType": "duration",
        "unit": "minute",
        "numericValue": 15,
        "textValue": null,
        "confidence": 1,
        "evidenceText": "15 минут",
        "normalizedLabel": "15 минут"
      }
    ],
    "semanticCategories": [
      {
        "localId": "category-watching-reels",
        "semanticObjectKey": "watching_reels",
        "labelRu": "Просмотр рилсов",
        "layer": "activity_type",
        "confidence": 1,
        "evidenceText": "смотрел рилс",
        "reason": "The user reported watching reels."
      }
    ],
    "valueObjectMatches": [
      {
        "semanticCategoryLocalId": "category-watching-reels",
        "matchStatus": "not_applicable",
        "valueObjectId": null,
        "valueObjectTitle": null,
        "parentValueObjectId": null,
        "parentValueObjectTitle": null,
        "confidence": 1,
        "reason": "This first runtime test saves a semantic fact without requiring an existing Value Object."
      }
    ],
    "missingValueObjectCandidates": [],
    "factPreviews": [
      {
        "localId": "fact-watching-reels-duration",
        "activityEventId": null,
        "measureLocalId": "measure-duration-15-min",
        "semanticCategoryLocalId": "category-watching-reels",
        "semanticObjectKey": "watching_reels",
        "valueObjectId": null,
        "valueObjectTitle": null,
        "measureType": "duration",
        "unit": "minute",
        "numericValue": 15,
        "textValue": null,
        "status": "ready_for_fact_write",
        "confidence": 1,
        "explanation": "Факт: пользователь смотрел рилс 15 минут."
      }
    ],
    "safety": {
      "previewOnly": false,
      "dbWriteAllowed": true,
      "sqlAllowed": false,
      "openAiCallAllowed": false,
      "medicalDiagnosisAllowed": false,
      "notes": [
        "Authenticated browser test.",
        "No OpenAI call.",
        "No manual SQL execution."
      ]
    },
    "counters": {
      "measureCount": 1,
      "semanticCategoryCount": 1,
      "matchedValueObjectCount": 0,
      "missingValueObjectCandidateCount": 0,
      "factPreviewCount": 1
    }
  },
  "factDecisions": [
    {
      "factLocalId": "fact-watching-reels-duration",
      "decision": "accept",
      "reasonRu": "Пользователь подтвердил тестовую запись факта: смотрел рилс 15 минут."
    }
  ],
  "editedFactDecisions": [],
  "valueObjectCandidateDecisions": [],
  "clientSafetyConfirmation": {
    "userReviewedPreview": true,
    "userConfirmedMissingValueObjectCreation": false,
    "userConfirmedFactWrite": true,
    "userUnderstandsPreviewIsNotDiagnosis": true
  }
}