Flow-Debugger: Schattenvault, Testfälle, Variablen (Teil 1) #311
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/Iris#311
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Plan:
obsidian-docs/plans/IRIS-FLOW-BAUSTEINE.md(Vault, Ordner Iris/plans) mit allen Entscheidungen der grill-me-Session vom 2026-11-03.Teil 1 von 4. Overlay-Schicht: Lesen zuerst im Schattenvault, sonst im echten Vault; Schreiben nie ins echte Vault; Löschen als "gelöscht" vermerkt; Suche/Listen gemischt. Vorbefüllen von Hand. Variablen sehen/ändern, benannte Testfälle, Reset.
PR #148 gemergt: feat(flow): Schattenvault für den Debugger, Testfälle, Variablen (iris/Iris#311)
http://docker:3000/alf/2ndbrain/pulls/148
Commits:
Stand (Etappe a von Teil 1): Python-Kern des Schattenvaults. Plan:
obsidian-docs/plans/IRIS-FLOW-BAUSTEINE.md, Abschnitt „Umsetzungsstand“.Befund: Der Debugger wirkte WIRKLICH auf das echte Vault, ohne definierten Anfangszustand, Variablen waren nicht änderbar, ein Reset fehlte.
Geändert (
skills/iris-automation):flow_overlay.py(neu): Schattenvault als Overlay. Schreibendeobsidian.py-Befehle laufen nur auf dem Schattenvault (copy-up der Notiz samt Anhängen, gelöschte/verschobene echte Notizen als Whiteout);searchmischt beide Sichten;get-attachments/showlesen Schatten zuerst;resolve-absenderschreibt nicht (nachschlagen, sonst „würde anlegen“); jeder andere Befehl wird abgelehnt (Whitelist).automation_interpreter.py:convert-pdf/download-fileschreiben ins Schattenvault; LLM-Schritte lassen den Sub-Job perOBSIDIAN_VAULT_PATH=<Schatten>arbeiten, ein Wächter vergleicht den Fingerabdruck der echten Notiz vorher/nachher und bricht laut ab. Der normale Lauf ist unverändert (Prompt byte-gleich geprüft).flow_debug.py: Sitzung auf dem Overlay statt git. Neue BefehlesetVariable,prefill,reset;--testcase <Name>; Schattenvault im Application Support, am Sitzungsende gelöscht.flow_testcases.py(neu),flow_api.py: Opstestcases,testcase-save,testcase-delete(benannt, mehrere pro Flow).flow_validate.py: Startvariablen eines Testfalls gelten ohne vorherigesset-variable.Abweichung vom Entwurf: Das Overlay sitzt in der Schicht vor
obsidian.py, nicht inobsidian.pyselbst (3 Kopien, 1700 Zeilen, viele Zugriffsarten). Wirkung gleich.Geprüft: 14 Tests (
skills/iris-automation/tests), nur auf Wegwerf-Vaults, mit dem echtenobsidian.py. Kern-Beweis: Hash des ganzen echten Vault-Baums nach set-field, move, delete, create-note, undo und reset unverändert. Außerdem eine komplette Debug-Sitzung (Variable setzen, vorbefüllen, schrittweise, Änderungen, undo, reset, Testfall) und die Validierung der Testfälle.flow_tools.py checkgrün.Nicht geprüft: Kein Lauf gegen dein echtes Vault; kein LLM-Schritt mit echtem Sub-Job (Prompt-Eingriff und Wächter nur per Code-Lesen und Prompt-Vergleich); ob Marker (Docker) beim
convert-pdfins Schattenvault schreiben kann; Linux-Server.Offen (Etappe b):
testcasein/flow/debugdurchreichen (Linuxflow_routes.py, MacFlowServerHost.swift/IrisRemoteServer.swift,FlowBackend.swift); Skill-Kopie im Linux-Server angleichen (hermes/skills/iris-automationist älter); Oberfläche im Debugger (Variablen ansehen/ändern, Testfall wählen/speichern, Vorbefüllen aus dem Vault-Baum, Reset, „Änderungen“ beschriften). Teil 1 bleibt bis dahin offen.PR #137 gemergt: feat(flow): testcase im Debugger durchreichen, Skill-Kopie Schattenvault (iris/Iris#311)
http://docker:3000/iris/iris-linux-server/pulls/137
Commits:
Stand (Etappe b von Teil 1), Linux-Server:
POST /flow/debugnimmttestcaseentgegen und reicht es als--testcasean den Interpreter; Skill-Kopiehermes/skills/iris-automationauf den Stand von Etappe a gebracht (flow_overlay.py,flow_testcases.pyneu).Geprüft: Auf dem Dev-Host deployt (rsync,
detect-host-env.sh,docker compose up -d --build, Sandbox-Container entfernt). Live mit Wegwerf-Objekt:testcases/testcase-save/testcase-deleteliefern Erwartetes, ein ungültiger Name wird abgelehnt,POST /flow/debugmit unbekanntem Flow endet sauber mitfinished/invalid, ein falscher Typ fürtestcasegibt 400; die Skill-Dateien liegen im Container; die Wegwerf-Datei im Application Support ist wieder gelöscht.Nicht geprüft: Ein Debug-Lauf mit echtem Flow und LLM-Schritt auf dem Linux-Server; ob Marker und die Sub-Jobs das Schattenvault (Application-Support-Volume) sehen.
PR #315 gemergt: feat(flow): Debugger mit Testfällen, Variablen, Vorbefüllen, Schattenvault (iris/Iris#311)
http://docker:3000/iris/Iris/pulls/315
Commits:
Stand (Etappe b von Teil 1): Durchreichen und Oberfläche. Plan:
obsidian-docs/plans/IRIS-FLOW-BAUSTEINE.md.Geändert in diesem Repo:
testcasewird beim Start einer Debug-Sitzung bis zum Interpreter durchgereicht; die Oberfläche kann Testfälle wählen/speichern/löschen, Variablen ansehen/ändern/anlegen/entfernen, Notizen aus dem echten Vault ins Schattenvault holen und die Sitzung zurücksetzen. Die Hinweise sagen jetzt "Schattenvault" statt "wirkt wirklich auf den Vault". Details je Repo im PR.Geprüft: Python-Seite (14 Tests, Etappe a) unverändert grün. Die Swift-Dateien wurden mit
swiftc -typecheckgegen das macOS- und das iOS-SDK geprüft (die neuen Dateien ohne Fehler; fehlende Designsystem-/Server-Typen sind erwartet, weil nicht eingebunden). Keinxcodebuild(TCC).Nicht geprüft: Kein Xcode-Build, keine Bedienung der neuen Oberfläche auf Mac oder iPhone; kein Debug-Lauf mit echtem LLM-Schritt; ob Marker beim
convert-pdfins Schattenvault schreiben kann; ob die Sub-Jobs auf dem Linux-Server das Schattenvault sehen.Offen: Auf dem Mac nach "Bau und starte lokal" von Hand prüfen: Testfall anlegen, Variable ändern, Notiz vorbefüllen, Zurücksetzen, und dass dein echtes Vault danach unverändert ist (z. B.
git -C ~/Documents/Obsidian/Vault status). iOS: Install nur auf deine Ansage.PR #95 gemergt: feat(flow): Debugger mit Testfällen, Variablen, Vorbefüllen, Schattenvault (iris/Iris#311)
http://docker:3000/iris/2ndbrain-ios/pulls/95
Commits:
Stand (Etappe b von Teil 1): Durchreichen und Oberfläche. Plan:
obsidian-docs/plans/IRIS-FLOW-BAUSTEINE.md.Geändert in diesem Repo:
testcasewird beim Start einer Debug-Sitzung bis zum Interpreter durchgereicht; die Oberfläche kann Testfälle wählen/speichern/löschen, Variablen ansehen/ändern/anlegen/entfernen, Notizen aus dem echten Vault ins Schattenvault holen und die Sitzung zurücksetzen. Die Hinweise sagen jetzt "Schattenvault" statt "wirkt wirklich auf den Vault". Details je Repo im PR.Geprüft: Python-Seite (14 Tests, Etappe a) unverändert grün. Die Swift-Dateien wurden mit
swiftc -typecheckgegen das macOS- und das iOS-SDK geprüft (die neuen Dateien ohne Fehler; fehlende Designsystem-/Server-Typen sind erwartet, weil nicht eingebunden). Keinxcodebuild(TCC).Nicht geprüft: Kein Xcode-Build, keine Bedienung der neuen Oberfläche auf Mac oder iPhone; kein Debug-Lauf mit echtem LLM-Schritt; ob Marker beim
convert-pdfins Schattenvault schreiben kann; ob die Sub-Jobs auf dem Linux-Server das Schattenvault sehen.Offen: Auf dem Mac nach "Bau und starte lokal" von Hand prüfen: Testfall anlegen, Variable ändern, Notiz vorbefüllen, Zurücksetzen, und dass dein echtes Vault danach unverändert ist (z. B.
git -C ~/Documents/Obsidian/Vault status). iOS: Install nur auf deine Ansage.PR #149 gemergt: feat(flow): Startzustand im Debugger — Testnotiz aus dem Vault, Feldänderungen im Schattenvault (iris/Iris#311)
http://docker:3000/alf/2ndbrain/pulls/149
Commits:
Nachtrag zu Teil 1 (aus dem ersten Praxistest): Der Flow "Linode Kopie" fand keine Testnotiz, weil seine Suche Notizen mit "Bearbeitungsstatus" ausschließt und alle Linode-Notizen schon bearbeitet sind. Nötig war: eine Notiz aus dem Vault ins Schattenvault holen und dort den Bearbeitungsstatus entfernen.
Geändert:
fields); sie werden beim Start und nach jedem Zurücksetzen erneut angewendet. "Als Testfall speichern" geht jetzt auch vor dem Start.find-notes(nur lesend, ≤ 200 Treffer),searchExcludein der Flow-Info. Der Startzustand geht als verborgener Testfall__entwurf__an den Server, deshalb keine Änderung an den Server-Routen.Geprüft: 18 Python-Tests (Feldänderungen im Schattenvault, erneut nach Reset, fehlerhafte Feldänderung als Warnung statt Abbruch, Suche nur lesend, Eingabeprüfung); das echte Vault bleibt in jedem Test byte-gleich. Swift mit
swiftc -typecheckgegen macOS- und iOS-SDK.Nicht geprüft: Bedienung auf dem Mac/iPhone, Lauf mit echten Linode-Notizen.
Hinweis zur Bedienung: Flow wählen → "Testnotiz aus dem Vault holen…" → z. B. "billing@linode.com" suchen → Notiz wählen → bei "Felder entfernen" auf „Bearbeitungsstatus“ klicken → ggf. als Testfall speichern → Starten.
PR #138 gemergt: feat(flow): Startzustand im Debugger — find-notes, Feldänderungen (Skill-Kopie) (iris/Iris#311)
http://docker:3000/iris/iris-linux-server/pulls/138
Commits:
Nachtrag zu Teil 1 (aus dem ersten Praxistest): Der Flow "Linode Kopie" fand keine Testnotiz, weil seine Suche Notizen mit "Bearbeitungsstatus" ausschließt und alle Linode-Notizen schon bearbeitet sind. Nötig war: eine Notiz aus dem Vault ins Schattenvault holen und dort den Bearbeitungsstatus entfernen.
Geändert:
fields); sie werden beim Start und nach jedem Zurücksetzen erneut angewendet. "Als Testfall speichern" geht jetzt auch vor dem Start.find-notes(nur lesend, ≤ 200 Treffer),searchExcludein der Flow-Info. Der Startzustand geht als verborgener Testfall__entwurf__an den Server, deshalb keine Änderung an den Server-Routen.Geprüft: 18 Python-Tests (Feldänderungen im Schattenvault, erneut nach Reset, fehlerhafte Feldänderung als Warnung statt Abbruch, Suche nur lesend, Eingabeprüfung); das echte Vault bleibt in jedem Test byte-gleich. Swift mit
swiftc -typecheckgegen macOS- und iOS-SDK.Nicht geprüft: Bedienung auf dem Mac/iPhone, Lauf mit echten Linode-Notizen.
Hinweis zur Bedienung: Flow wählen → "Testnotiz aus dem Vault holen…" → z. B. "billing@linode.com" suchen → Notiz wählen → bei "Felder entfernen" auf „Bearbeitungsstatus“ klicken → ggf. als Testfall speichern → Starten.
PR #316 gemergt: feat(flow): Startzustand im Debugger — Testnotiz aus dem Vault, Feldänderungen im Schattenvault (iris/Iris#311)
http://docker:3000/iris/Iris/pulls/316
Commits:
Nachtrag zu Teil 1 (aus dem ersten Praxistest): Der Flow "Linode Kopie" fand keine Testnotiz, weil seine Suche Notizen mit "Bearbeitungsstatus" ausschließt und alle Linode-Notizen schon bearbeitet sind. Nötig war: eine Notiz aus dem Vault ins Schattenvault holen und dort den Bearbeitungsstatus entfernen.
Geändert:
fields); sie werden beim Start und nach jedem Zurücksetzen erneut angewendet. "Als Testfall speichern" geht jetzt auch vor dem Start.find-notes(nur lesend, ≤ 200 Treffer),searchExcludein der Flow-Info. Der Startzustand geht als verborgener Testfall__entwurf__an den Server, deshalb keine Änderung an den Server-Routen.Geprüft: 18 Python-Tests (Feldänderungen im Schattenvault, erneut nach Reset, fehlerhafte Feldänderung als Warnung statt Abbruch, Suche nur lesend, Eingabeprüfung); das echte Vault bleibt in jedem Test byte-gleich. Swift mit
swiftc -typecheckgegen macOS- und iOS-SDK.Nicht geprüft: Bedienung auf dem Mac/iPhone, Lauf mit echten Linode-Notizen.
Hinweis zur Bedienung: Flow wählen → "Testnotiz aus dem Vault holen…" → z. B. "billing@linode.com" suchen → Notiz wählen → bei "Felder entfernen" auf „Bearbeitungsstatus“ klicken → ggf. als Testfall speichern → Starten.
PR #96 gemergt: feat(flow): Startzustand im Debugger — Testnotiz aus dem Vault, Feldänderungen im Schattenvault (iris/Iris#311)
http://docker:3000/iris/2ndbrain-ios/pulls/96
Commits:
Nachtrag zu Teil 1 (aus dem ersten Praxistest): Der Flow "Linode Kopie" fand keine Testnotiz, weil seine Suche Notizen mit "Bearbeitungsstatus" ausschließt und alle Linode-Notizen schon bearbeitet sind. Nötig war: eine Notiz aus dem Vault ins Schattenvault holen und dort den Bearbeitungsstatus entfernen.
Geändert:
fields); sie werden beim Start und nach jedem Zurücksetzen erneut angewendet. "Als Testfall speichern" geht jetzt auch vor dem Start.find-notes(nur lesend, ≤ 200 Treffer),searchExcludein der Flow-Info. Der Startzustand geht als verborgener Testfall__entwurf__an den Server, deshalb keine Änderung an den Server-Routen.Geprüft: 18 Python-Tests (Feldänderungen im Schattenvault, erneut nach Reset, fehlerhafte Feldänderung als Warnung statt Abbruch, Suche nur lesend, Eingabeprüfung); das echte Vault bleibt in jedem Test byte-gleich. Swift mit
swiftc -typecheckgegen macOS- und iOS-SDK.Nicht geprüft: Bedienung auf dem Mac/iPhone, Lauf mit echten Linode-Notizen.
Hinweis zur Bedienung: Flow wählen → "Testnotiz aus dem Vault holen…" → z. B. "billing@linode.com" suchen → Notiz wählen → bei "Felder entfernen" auf „Bearbeitungsstatus“ klicken → ggf. als Testfall speichern → Starten.
PR #317 gemergt: fix(flow): Schriftgröße im Startzustand des Debuggers (iris/Iris#311)
http://docker:3000/iris/Iris/pulls/317
Commits:
Nachtrag: Die Schrift im Bereich "Startzustand", in der Variablen-, Testfall- und Vorbefüll-Ansicht war mit
.caption(10 pt) viel zu klein; jetzt 12 pt wie der übrige Debugger. Nur Darstellung, keine Logik.Geprüft:
swiftc -typecheck(macOS-SDK), Sync-Skript grün. Nicht geprüft: das Aussehen in der laufenden App.PR #97 gemergt: fix(flow): Schriftgröße im Startzustand des Debuggers (iris/Iris#311)
http://docker:3000/iris/2ndbrain-ios/pulls/97
Commits:
Nachtrag: Die Schrift im Bereich "Startzustand", in der Variablen-, Testfall- und Vorbefüll-Ansicht war mit
.caption(10 pt) viel zu klein; jetzt 12 pt wie der übrige Debugger. Nur Darstellung, keine Logik.Geprüft:
swiftc -typecheck(macOS-SDK), Sync-Skript grün. Nicht geprüft: das Aussehen in der laufenden App.PR #150 gemergt: fix(flow): Notiz live aus dem Schattenvault, Änderungen bei jedem Halt (iris/Iris#311)
http://docker:3000/alf/2ndbrain/pulls/150
Commits:
Nachtrag (aus dem Praxistest): Im Debugger zeigte "Notiz (live)" die Notiz aus dem ECHTEN Vault (dort steht "Bearbeitungsstatus: wird-verarbeitet" weiter), obwohl der Debugger das Feld im Schattenvault bereits entfernt hatte; die Liste "Änderungen im Schattenvault" blieb leer, weil sie nur am Ende aktualisiert wurde. Der Debugger arbeitete richtig, die Anzeige täuschte.
Nachgewiesen vor der Änderung: Lauf mit Testfall (Feld entfernen): die Änderungsliste zeigt die Notiz als "geändert", das echte Vault hat weiter 1× das Feld.
Geändert: Neuer Debug-Befehl
readNotemit Ereignisnote(Schattenvault zuerst, sonst das echte Vault;sourcesagt, welche). "Notiz (live)" nutzt ihn und beschriftet die Fassung ("Fassung im Schattenvault" / "Original aus deinem Vault"). Die Änderungsliste aktualisiert sich bei jedem Anhalten. Die Modifier-Kette vonFlowDebuggerView.bodyist in drei Teile zerlegt (der Compiler brach sonst beim Typprüfen ab).Geprüft: 19 Python-Tests (neu:
readNotezeigt die Schattenfassung ohne das entfernte Feld, die unveränderte Notiz aus dem Vault, und weist Pfade außerhalb ab; echtes Vault byte-gleich);swiftc -typecheck(macOS-SDK, Mac-Ansicht und gemeinsame Dateien; iOS-gemeinsame Dateien gegen das iOS-SDK, die iOS-Ansicht nur Syntax).Nicht geprüft: Bedienung in der App; die iOS-Ansicht mit dem Compiler (nur Syntax).
PR #139 gemergt: fix(flow): Skill-Kopie readNote (iris/Iris#311)
http://docker:3000/iris/iris-linux-server/pulls/139
Commits:
Nachtrag (aus dem Praxistest): Im Debugger zeigte "Notiz (live)" die Notiz aus dem ECHTEN Vault (dort steht "Bearbeitungsstatus: wird-verarbeitet" weiter), obwohl der Debugger das Feld im Schattenvault bereits entfernt hatte; die Liste "Änderungen im Schattenvault" blieb leer, weil sie nur am Ende aktualisiert wurde. Der Debugger arbeitete richtig, die Anzeige täuschte.
Nachgewiesen vor der Änderung: Lauf mit Testfall (Feld entfernen): die Änderungsliste zeigt die Notiz als "geändert", das echte Vault hat weiter 1× das Feld.
Geändert: Neuer Debug-Befehl
readNotemit Ereignisnote(Schattenvault zuerst, sonst das echte Vault;sourcesagt, welche). "Notiz (live)" nutzt ihn und beschriftet die Fassung ("Fassung im Schattenvault" / "Original aus deinem Vault"). Die Änderungsliste aktualisiert sich bei jedem Anhalten. Die Modifier-Kette vonFlowDebuggerView.bodyist in drei Teile zerlegt (der Compiler brach sonst beim Typprüfen ab).Geprüft: 19 Python-Tests (neu:
readNotezeigt die Schattenfassung ohne das entfernte Feld, die unveränderte Notiz aus dem Vault, und weist Pfade außerhalb ab; echtes Vault byte-gleich);swiftc -typecheck(macOS-SDK, Mac-Ansicht und gemeinsame Dateien; iOS-gemeinsame Dateien gegen das iOS-SDK, die iOS-Ansicht nur Syntax).Nicht geprüft: Bedienung in der App; die iOS-Ansicht mit dem Compiler (nur Syntax).
PR #318 gemergt: fix(flow): Notiz live aus dem Schattenvault, Änderungen bei jedem Halt (iris/Iris#311)
http://docker:3000/iris/Iris/pulls/318
Commits:
Nachtrag (aus dem Praxistest): Im Debugger zeigte "Notiz (live)" die Notiz aus dem ECHTEN Vault (dort steht "Bearbeitungsstatus: wird-verarbeitet" weiter), obwohl der Debugger das Feld im Schattenvault bereits entfernt hatte; die Liste "Änderungen im Schattenvault" blieb leer, weil sie nur am Ende aktualisiert wurde. Der Debugger arbeitete richtig, die Anzeige täuschte.
Nachgewiesen vor der Änderung: Lauf mit Testfall (Feld entfernen): die Änderungsliste zeigt die Notiz als "geändert", das echte Vault hat weiter 1× das Feld.
Geändert: Neuer Debug-Befehl
readNotemit Ereignisnote(Schattenvault zuerst, sonst das echte Vault;sourcesagt, welche). "Notiz (live)" nutzt ihn und beschriftet die Fassung ("Fassung im Schattenvault" / "Original aus deinem Vault"). Die Änderungsliste aktualisiert sich bei jedem Anhalten. Die Modifier-Kette vonFlowDebuggerView.bodyist in drei Teile zerlegt (der Compiler brach sonst beim Typprüfen ab).Geprüft: 19 Python-Tests (neu:
readNotezeigt die Schattenfassung ohne das entfernte Feld, die unveränderte Notiz aus dem Vault, und weist Pfade außerhalb ab; echtes Vault byte-gleich);swiftc -typecheck(macOS-SDK, Mac-Ansicht und gemeinsame Dateien; iOS-gemeinsame Dateien gegen das iOS-SDK, die iOS-Ansicht nur Syntax).Nicht geprüft: Bedienung in der App; die iOS-Ansicht mit dem Compiler (nur Syntax).
PR #98 gemergt: fix(flow): Notiz live aus dem Schattenvault, Änderungen bei jedem Halt (iris/Iris#311)
http://docker:3000/iris/2ndbrain-ios/pulls/98
Commits:
Nachtrag (aus dem Praxistest): Im Debugger zeigte "Notiz (live)" die Notiz aus dem ECHTEN Vault (dort steht "Bearbeitungsstatus: wird-verarbeitet" weiter), obwohl der Debugger das Feld im Schattenvault bereits entfernt hatte; die Liste "Änderungen im Schattenvault" blieb leer, weil sie nur am Ende aktualisiert wurde. Der Debugger arbeitete richtig, die Anzeige täuschte.
Nachgewiesen vor der Änderung: Lauf mit Testfall (Feld entfernen): die Änderungsliste zeigt die Notiz als "geändert", das echte Vault hat weiter 1× das Feld.
Geändert: Neuer Debug-Befehl
readNotemit Ereignisnote(Schattenvault zuerst, sonst das echte Vault;sourcesagt, welche). "Notiz (live)" nutzt ihn und beschriftet die Fassung ("Fassung im Schattenvault" / "Original aus deinem Vault"). Die Änderungsliste aktualisiert sich bei jedem Anhalten. Die Modifier-Kette vonFlowDebuggerView.bodyist in drei Teile zerlegt (der Compiler brach sonst beim Typprüfen ab).Geprüft: 19 Python-Tests (neu:
readNotezeigt die Schattenfassung ohne das entfernte Feld, die unveränderte Notiz aus dem Vault, und weist Pfade außerhalb ab; echtes Vault byte-gleich);swiftc -typecheck(macOS-SDK, Mac-Ansicht und gemeinsame Dateien; iOS-gemeinsame Dateien gegen das iOS-SDK, die iOS-Ansicht nur Syntax).Nicht geprüft: Bedienung in der App; die iOS-Ansicht mit dem Compiler (nur Syntax).
PR #319 gemergt: chore(i18n): Zeichenketten des Debuggers (iris/Iris#311)
http://docker:3000/iris/Iris/pulls/319
Commits: