Skip to content
Back to skills

Decomposition 2026 11 05

ASecurity

Открой терминал в папке с файлом и выполни U3 — он ловит битый файл за 10 секунд, до всякой возни со звуком. ```bash ffmpeg -v error -i file.wav -f null - && echo OK ``` Пустой вывод = файл декодируется целиком. Любая строка = дальше не иди, чини источник. ---

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
ai-agentsshellbash

Works with

  • cli

Security analysis

A100/100

Pro scans all 21 files and shows the line behind each finding

Scanned November 11, 2026

npx -y skills add Siririn77/i-have-autism --skill decomposition-2026-11-05 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Decomposition 2026 11 05?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Decomposition 2026 11 05
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/siririn77-decomposition-2026-11-05-2fe629c5/badge)](https://www.skillsdirectory.com/skills/siririn77-decomposition-2026-11-05-2fe629c5)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
Открой терминал в папке с файлом и выполни U3 — он ловит битый файл за 10 секунд, до всякой возни со звуком.

```bash
ffmpeg -v error -i file.wav -f null - && echo OK
```

Пустой вывод = файл декодируется целиком. Любая строка = дальше не иди, чини источник.

---

## Граф

| Узел | Что | Почему важно | Якорь (чем мерить) | Когда |
|---|---|---|---|---|
| A1 Контейнер и кодек | WAV / AIFF / FLAC / MP3 / AAC | lossy→lossy перекодирование режет верх навсегда; из MP3 обратно в WAV качество не вернёшь | `ffprobe -show_streams` | первый |
| A2 Частота и битность | 44.1 или 48 кГц, 16 или 24 бит | 44.1 на видео-площадке = рассинхрон на монтаже | `ffprobe` | вместе с A1 |
| A3 Каналы | моно / стерео, пустой канал, фаза | инвертированный канал гасит звук в моно-сумме; половина слушателей в моно | `ffprobe` + прослушать моно-сумму | после A2 |
| A4 Длительность | совпадает с заявленной | обрезанный хвост = потерянный последний слог | `ffprobe format.duration` | после A1 |
| A5 Имя файла | по шаблону проекта | площадка отклоняет пробелы и кириллицу в имени | regex | последний |
| B1 Цель по громкости | LUFS площадки | площадка нормализует сама; разница в 3 LU = разный характер | спецификация площадки | до B2 |
| B2 Интегральная громкость | I, LUFS | тихий файл после нормализации звучит сжато | `ebur128` | после A |
| B3 True peak | ≤ −1.0 dBTP | AAC-энкод добавляет до +0.5 дБ; -1.0 dBFS на выходе клиппует | `ebur128=peak=true` | вместе с B2 |
| B4 Диапазон громкости | LRA | LRA < 3 LU утомляет на длинном файле | `ebur128` | вместе с B2 |
| C1 Клиппинг | сэмплы на 0 dBFS | срез верхушки слышен как треск только на хороших наушниках | `astats` Number of clipped samples | после A |
| C2 Шум и гул | 50/60 Гц, широкополосный шум | гул на −45 dB неслышен в наушниках, слышен в машине | спектрограмма | после C1 |
| C3 Щелчки и обрывы | разрывы, цифровые щелчки | щелчок на склейке = слушатель думает, что файл битый | прослушивание | после C2 |
| C4 Речевые артефакты | дыхание, плевки, свистящие | чинятся только вручную, до финального рендера | прослушивание | вместе с C3 |
| C5 DC offset | постоянная составляющая | съедает запас по пикам, щёлкает на старте | `astats` DC offset | вместе с C1 |
| D1 Начало | первые 2 с | обрезанный первый слог не восстановить | прослушивание | после C |
| D2 Конец | последние 2 с, фейд | фейд < 10 мс = щелчок | прослушивание | вместе с D1 |
| D3 Склейки и дубли | места вырезки, room tone | другой room tone на склейке слышен как «другая комната» | прослушивание | вместе с C3 |
| E1 Теги | title, artist, ISRC | пустой title = площадка ставит имя файла в каталог | `exiftool` | после D |
| E2 Обложка | вшита, ≥ 1400×1400 | часть площадок берёт только вшитую | `ffprobe -show_streams` | вместе с E1 |
| E3 Права на музыку и сэмплы | лицензия в папке проекта | claim приходит через 3 недели, снимать 4 недели | файл лицензии рядом с аудио | после D |
| E4 Маркировка контента | explicit flag, возрастное | без флага площадка снимает с витрины | тег / поле при загрузке | после E1 |
| E5 Транскрипт и субтитры | если формат требует | площадка не примет без дорожки | файл `.srt`/`.vtt` рядом | после E1 |

Рёбра:
- A1 → A2 (содержит: кодек определяет, какие параметры вообще есть в файле)
- B1 → B2 (причина: цель задаёт допустимый LUFS; без цели число B2 не с чем сравнивать)
- B2 ↔ B4 (повтор: один прогон `ebur128` даёт оба; не запускай дважды)
- C1 → B3 (причина: клиппинг до нормализации гарантирует провал по true peak)
- D3 ↔ C3 (повтор: склейка — самая частая причина щелчка; проверяй вместе)
- C5 → C1 (причина: DC offset съедает запас, клиппинг появляется раньше)
- E1 ↔ A5 (противоречие: имя файла и тег title расходятся; площадка берёт тег, человек — имя)

Вне графа: художественные решения (темп, паузы, выбор дубля). Это не проверка, это правка. Проверка только фиксирует, что правка не сломала файл.

---

## План

Файл плана: `audio-preflight.md`. Ниже — его содержимое.

### [?] Неизвестные, закрыть до старта

| # | Вопрос | Закрыть до | Как закрыть |
|---|---|---|---|
| ?1 | Целевая площадка и её спецификация (LUFS, контейнер, лимит размера) | U4 | Открыть страницу спецификации площадки, скопировать три числа в файл |
| ?2 | Максимальная длительность файла на площадке | U2 | Там же |
| ?3 | Есть ли в файле музыка или сэмплы третьих лиц | U10 | Спросить у автора музыки, не угадывать |

Без ?1 единица U4 не выполнима: сравнивать LUFS не с чем.

---

### U1. Инструменты

- Вход: машина с shell.
- Действие: `ffmpeg -version`, `ffprobe -version`, `exiftool -ver` — по одной команде.
- Выход: три строки версий.
- Проверка, которая может упасть: любая из трёх команд печатает `command not found`. Тогда поставить пакет (`brew install ffmpeg exiftool` / `apt install ffmpeg libimage-exiftool-perl`). Время: 5 мин.

### U2. Техпаспорт

- Вход: путь к файлу.
- Действие: `ffprobe -v error -show_streams -show_format file`.
- Выход: таблица codec / sample_rate / channels / bit_depth / duration / bitrate.
- Проверка: sample_rate ∈ {44100, 48000}; channels ∈ {1, 2}; duration > 0 и ≤ лимита из ?2; bit_depth = 24, если исходник WAV. Любое «нет» — стоп, вернуть на экспорт. Время: 5 с.

### U3. Декодирование целиком

- Вход: файл.
- Действие: `ffmpeg -v error -i file -f null -`.
- Выход: пустой stderr.
- Проверка: любая строка в stderr = битые кадры или обрезанный контейнер. Файл не публикуется. Время: 10–60 с (декодирование идёт примерно 100× быстрее реального времени).

### U4. Громкость и пики

- Вход: файл, целевой LUFS из ?1.
- Действие: `ffmpeg -i file -af ebur128=peak=true -f null - 2>&1 | tail -40`.
- Выход: I (LUFS), LRA, True peak (dBTP).
- Проверка: |I − цель| ≤ 0.5 LU; true peak ≤ −1.0 dBTP; LRA ≥ 3 LU. Провал любого — вернуть на нормализацию, не править громкость в редакторе вручную. Время: 30 с.

### U5. Статистика сигнала

- Вход: файл.
- Действие: `ffmpeg -i file -af astats=metadata=1 -f null - 2>&1 | grep -E "DC offset|Peak level|Flat factor|Number of clipped"`.
- Выход: четыре числа.
- Проверка: DC offset < 0.001; Number of clipped samples = 0; Flat factor < 10. Время: 10 с.

### U6. Спектрограмма

- Вход: файл.
- Действие: `ffmpeg -i file -lavfi showspectrumpic=s=1920x1080 spec.png`.
- Выход: картинка.
- Проверка: нет горизонтальной линии на 50 или 60 Гц выше −60 dB; нет ровного среза верха у WAV (у lossy срез выше 16 кГц — норма, не флаг). Время: 30 с.

### U7. Прослушивание целиком

- Вход: файл, наушники, лист бумаги.
- Действие: слушать от начала до конца, один раз, на скорости 1×. Каждое замечание — таймкод плюс одно слово (дыхание / щелчок / склейка / гул).
- Выход: список таймкодов.
- Проверка: каждая строка списка имеет решение «оставить» или «править». Строка без решения = единица не закрыта. Время: 1× длительности файла (30-минутный файл — 30 мин; это самая долгая единица).

### U8. Края

- Вход: файл, таймкоды 0:00–0:02 и конец − 2 с.
- Действие: прослушать два фрагмента отдельно.
- Выход: два фрагмента.
- Проверка: нет обрезанного первого и последнего слога; на концах фейд ≥ 10 мс, если это не речь встык. Время: 5 мин.

### U9. Метаданные

- Вход: файл.
- Действие: `exiftool file`.
- Выход: список тегов.
- Проверка: title, artist заполнены; нет тега `encoder` с чужим именем (признак чужого экспорта); обложка вшита и ≥ 1400×1400 (проверить `ffprobe -show_streams`, поток с `disposition: attached_pic`). Время: 2 мин.

### U10. Права

- Вход: папка проекта.
- Действие: сверить файл лицензии на музыку/сэмплы с треком из ?3.
- Выход: имя файла лицензии.
- Проверка: имя лицензии совпадает с именем трека; для сэмплов указан источник. Нет файла — публикация остановлена. Время: 5 мин.

### U11. Имя, загрузка, контрольная копия

- Вход: файл.
- Действие: переименовать по шаблону `YYYY-MM-DD_slug_vN.wav`, загрузить на площадку, скачать обратно.
- Выход: скачанный файл.
- Проверка: имя проходит regex; скачанный файл прогнан через U3 и U4 и даёт те же I и true peak ±0.1. Площадка перекодировала или обрезала — стоп. Время: 10 мин.

**Бюджет:** 30-минутный файл — 1 ч 5 мин, из них 30 мин это U7.

### Журнал дрейфа (append-only)

Формат строки: `дата | единица | что изменилось | причина`. Не редактировать прошлые строки, только дописывать.

### Пост-мортем, раздел «план против факта»

Заполняется после публикации. По каждой единице: что план обещал, что случилось, чем мерили. Единица, где факт разошёлся с планом, получает строку в журнал дрейфа и правку в план для следующего файла.

---

**Что теперь работает

Files in this skill

  • SCORE.md6.6 KB
  • answer-estimate_with-skill.md4 KB
  • answer-estimate_without-skill.md3 KB
  • answer-next-step_with-skill.md1.1 KB
  • answer-next-step_without-skill.md2.7 KB
  • answer-no-preamble_with-skill.md2.5 KB
  • answer-no-preamble_without-skill.md2.7 KB
  • cases.json14.4 KB
  • code-edge-negative_with-skill.md2 KB
  • code-edge-negative_without-skill.md2.2 KB
  • comment-says-why_with-skill.md2.8 KB
  • comment-says-why_without-skill.md1.2 KB
  • decomposition-huge_with-skill.md14.3 KB
  • decomposition-huge_without-skill.md9.8 KB
  • decomposition-small_with-skill.md1.4 KB
  • decomposition-small_without-skill.md242 B
  • destructive-needs-confirmation_with-skill.md3.5 KB
  • destructive-needs-confirmation_without-skill.md3.7 KB
  • disagree-first-line_with-skill.md1.9 KB
  • disagree-first-line_without-skill.md1.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.