{
  "version": 1,
  "source_base": "ATEEL_Technical_Standard_41_to_Ch._2_-_Art._31_1.1.2_(1)",
  "updated_at": "2026-09-24T10:46:50.945824+00:00",
  "steps": [
    {
      "step": "source_language",
      "status": "ok",
      "message": "Japanese (auto) · OP_JA",
      "at": "2026-09-24T07:51:46.008671+00:00"
    },
    {
      "step": "pipeline_start",
      "status": "info",
      "message": "OpenRouter pipeline started for ATEEL_Technical_Standard_41_to_Ch._2_-_Art._31_1.1.2_(1)",
      "at": "2026-09-24T07:51:46.008838+00:00"
    },
    {
      "step": "translate_new_empty",
      "status": "info",
      "message": "Empty rows: 2451",
      "at": "2026-09-24T07:51:46.035153+00:00"
    },
    {
      "step": "translate_new_changed",
      "status": "info",
      "message": "Changed rows: 2182",
      "at": "2026-09-24T07:51:46.035370+00:00"
    },
    {
      "step": "text_extract",
      "status": "ok",
      "message": "Wrote row plain-text extract: text.txt",
      "at": "2026-09-24T07:51:47.840114+00:00",
      "detail": "2451 rows",
      "duration_seconds": 1.8
    },
    {
      "step": "style_parse",
      "status": "warning",
      "message": "full style extract is a little over the limit (14375/8000 characters); left intact.",
      "at": "2026-09-24T07:52:12.908256+00:00",
      "detail": "over_by=6375"
    },
    {
      "step": "style_parse",
      "status": "warning",
      "message": "compact style extract is a little over the limit (2655/1500 characters); left intact.",
      "at": "2026-09-24T07:52:18.543350+00:00",
      "detail": "over_by=1155"
    },
    {
      "step": "style_parse",
      "status": "warning",
      "message": "compact_l2 style extract is a little over the limit (1517/800 characters); left intact.",
      "at": "2026-09-24T07:52:23.459849+00:00",
      "detail": "over_by=717"
    },
    {
      "step": "style_terminology",
      "status": "warning",
      "message": "Document glossary truncated from 140 to 50 entries (max 50).",
      "at": "2026-09-24T07:52:39.451565+00:00",
      "detail": "Used for style merge and row translation."
    },
    {
      "step": "style_extract",
      "status": "info",
      "message": "Style and terminology extracted in separate calls.",
      "at": "2026-09-24T07:52:39.452469+00:00",
      "detail": "style_tokens=920219, terminology_tokens=308039",
      "duration_seconds": 51.61
    },
    {
      "step": "style_extract",
      "status": "ok",
      "message": "Extracted document style and terminology (1228258 tokens).",
      "at": "2026-09-24T07:52:39.453476+00:00",
      "detail": "model=openai/gpt-4.1-mini"
    },
    {
      "step": "style_merge",
      "status": "ok",
      "message": "LLM-merged document style with ALICe style style guide (full).",
      "at": "2026-09-24T07:53:12.368902+00:00",
      "detail": "model=openai/gpt-4.1-mini, tokens=8841",
      "duration_seconds": 32.91
    },
    {
      "step": "style_compact",
      "status": "info",
      "message": "Style guide compaction level",
      "at": "2026-09-24T07:53:12.370878+00:00",
      "detail": "model=openai/gpt-4.1-mini, level=1, target≤7650",
      "duration_seconds": 0.0
    },
    {
      "step": "style_compact",
      "status": "info",
      "message": "Style guide compaction level",
      "at": "2026-09-24T07:53:35.812713+00:00",
      "detail": "model=openai/gpt-4.1-mini, level=2, target≤3612"
    },
    {
      "step": "style_compact",
      "status": "ok",
      "message": "Compacted merged style guide (2 levels).",
      "at": "2026-09-24T07:53:55.330277+00:00",
      "detail": "model=openai/gpt-4.1-mini, tokens=10125"
    },
    {
      "step": "style_select",
      "status": "info",
      "message": "Using merged style (ALICe style + document).",
      "at": "2026-09-24T07:53:55.333316+00:00"
    },
    {
      "step": "style_select",
      "status": "ok",
      "message": "Using full + full glossary style guide for openai/gpt-4.1-mini (est. 6454/1047576 tokens)",
      "at": "2026-09-24T07:53:55.333867+00:00"
    },
    {
      "step": "consistency_check",
      "status": "warning",
      "message": "Chunk 32/59: invalid JSON; retrying (1/2).",
      "at": "2026-09-24T10:21:12.383265+00:00",
      "detail": "Consistency check response is not JSON: Invalid \\escape: line 46 column 173 (char 2719)",
      "duration_seconds": 288.98
    },
    {
      "step": "consistency_check",
      "status": "info",
      "message": "Chunk 32/59: valid JSON after retry 1/2.",
      "at": "2026-09-24T10:21:23.244730+00:00"
    },
    {
      "step": "consistency_check",
      "status": "ok",
      "message": "2451/2451 rows checked. Found 362 problem row(s).",
      "at": "2026-09-24T10:25:31.835658+00:00",
      "detail": "model=openai/gpt-4.1-mini, tokens=629802, chunks=59/59, rows=2451/2451"
    },
    {
      "step": "consistency_retranslate",
      "status": "ok",
      "message": "362/362 potential fixes.",
      "at": "2026-09-24T10:46:46.374867+00:00",
      "duration_seconds": 1274.54
    },
    {
      "step": "row_translation",
      "status": "ok",
      "message": "Completed 2451/2451 rows.",
      "at": "2026-09-24T10:46:50.945347+00:00",
      "detail": "tokens=30964750",
      "duration_seconds": 10375.61
    },
    {
      "step": "pipeline_end",
      "status": "ok",
      "message": "Translation completed (2451/2451 rows, 30964750 tokens).",
      "at": "2026-09-24T10:46:50.945786+00:00"
    }
  ]
}
