Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
54feedc
fix: gate 對抓取失敗 fail open —— 四條 lens 獨立重現的 CRITICAL
kiki830621 Aug 28, 2026
743495c
fix: gate 路徑不得從 CWD 解析;補上 #317 漏掉的第三處 Plan routing 宣稱
kiki830621 Aug 28, 2026
92b60b6
fix: #315 的外部寫入收集整段重寫 —— 七個缺陷,其中一個是「證明對等的測試鎖住了不對等」
kiki830621 Aug 28, 2026
af13f9b
fix: phase=closed 改用 GitHub state 當權威,撤掉我上一版的過度矯正(H10 回歸)
kiki830621 Aug 28, 2026
1a8cc88
fix: 附件檔名先 decode 再 basename —— percent-encoded traversal 逃出 attachme…
kiki830621 Aug 28, 2026
a6bda55
fix: 讀者看得見、辨識器看不見的四種 HTML 形狀(含既有 fixture 的第三種排列)+ breadcrumb TOCTOU
kiki830621 Aug 28, 2026
15c0837
fix: #288 的規則與它最大的兩個違反,原本在同一個 release 裡一起出貨
kiki830621 Aug 28, 2026
51b302d
chore: 2.111.0 — CHANGELOG + plugin.json/marketplace.json 同步
kiki830621 Aug 28, 2026
f6d7766
fix: 兩個「專門為了關掉這個缺口」的守衛,mutation 證明都沒有測試重量
kiki830621 Aug 29, 2026
1a6f862
chore: 2.112.0 — CHANGELOG + version sync
kiki830621 Aug 29, 2026
a3c4d2f
fix: 破壞性那一類不再靠 heading 形狀判定 —— 十輪之後改問題,不是再列一個形狀
kiki830621 Aug 29, 2026
4ddbeac
fix: 我的修法造出了藏住違反的赦免;以及把非 heading 釘成了「summary 在那裡」
kiki830621 Aug 29, 2026
f257cda
fix: 「只有結構會走那條路」是假的;附件是壓平不是拒絕;四條斷言用錯的理由通過
kiki830621 Aug 29, 2026
c702b59
fix: #317 偵測器看不見跨行的宣稱、看不見別的模式詞、也看不見大小寫變化
kiki830621 Aug 29, 2026
ff2d87b
fix: 四個守衛各自被一個字繞過 —— 固定的柵欄字、沒被命令的 body、沒 fail-closed 的暫存目錄、太寬的豁免
kiki830621 Aug 31, 2026
8a647c3
fix: 一個從未被賦值的變數、一個回報 rm 狀態的掃描、一個會殺掉整批下載的拒絕
kiki830621 Aug 31, 2026
e32a4d4
refactor: closing-summary gate 只否決不批准(round 12 架構修正)
kiki830621 Aug 31, 2026
d2e62c3
fix: 兩個 CRITICAL —— 純引用走到 compliant、refuse 讓 verify 永久失敗
kiki830621 Aug 31, 2026
f91e159
fix(idd-verify): REFD_ISSUES 的 mode 覆蓋 + EW_DIGEST 守衛改跑真程式
kiki830621 Aug 31, 2026
13bcaf9
fix(#317): 判準 (c) 的第三處與第四處,並補上偵測器四個盲點
kiki830621 Aug 31, 2026
db6dc54
fix: classifier 三條 HIGH —— 空摘要通道、散文提及被當成 marker、字內切斷
kiki830621 Aug 31, 2026
f056c44
fix: mention gate 三處都在靜默通過,且 #288 的 scope 自稱封閉卻漏掉三個檔
kiki830621 Aug 31, 2026
0cbfb91
fix: 未信任文字進 codex 命令列、控制字元守衛在下游、同名附件互相覆寫
kiki830621 Aug 31, 2026
ded6c29
test: 把形狀辨識器單獨跑一次,並記下它實際覆蓋到什麼(#188)
kiki830621 Aug 31, 2026
1708acb
fix: gate 仍有 exit 0 路徑(--issue=N / --repo 吞掉 --issue)
kiki830621 Aug 31, 2026
df0ecac
fix: --retroactive 的人工確認在權威清單裡是可省略的
kiki830621 Aug 31, 2026
419936f
fix: 移除 eval —— 別把一份 Markdown 規格檔變成執行面
kiki830621 Aug 31, 2026
d48a993
fix: cleanup trap 吞掉 HUP/TERM,mention gate 第三次靜默通過
kiki830621 Aug 31, 2026
d715e1e
fix(#317): 判準 (c) 第五次答錯 —— 偵測器四個逃逸,全部是本 repo 自己的寫法
kiki830621 Aug 31, 2026
36d7e47
fix: 第三條 exit-0 路徑(--help)與 lead_has_content 的第二、三、四種標記
kiki830621 Aug 31, 2026
64cd3a2
fix: 辨識器的 acid 是假的,且 round-12 改名只到達 2/10 個消費者
kiki830621 Aug 31, 2026
bdd3aa5
fix: #288 allowlist 豁免了兩個 egress body;scope 擴大零測試重量
kiki830621 Aug 31, 2026
278d9ba
fix: 分類不再由任何留言者決定;EW_BLOCK 的五個 reviewer 真的拿得到它
kiki830621 Aug 31, 2026
d917c1c
chore: 3.0.0 — CHANGELOG + version sync
kiki830621 Aug 31, 2026
d9aba62
fix: mention gate 對每一個合法 @mention 都失敗;pointer 迴圈三種 fail-open
kiki830621 Aug 31, 2026
fa72f3d
fix: collector 的四個假陰性與可偽造 digest;cluster 清單未解析就開掃
kiki830621 Sep 1, 2026
4ea5501
test: 清掉最後四條 —— 口號式斷言、依賴排版的 refutation、零迭代、沒斷言的退出碼
kiki830621 Sep 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"plugins": [
{
"name": "issue-driven-dev",
"version": "2.110.0",
"version": "2.112.0",
"description": "v2.102.2: Deep Research light integration (#277, ruling b). idd-diagnose gains a non-binding pointer (the #111 superpowers hand-off shape: pure suggestion, no presence check, no dependency) fired when the diagnosis's quality depends on facts OUTSIDE the repo — with trigger examples AND counter-examples (the overly-broad-signal risk). Output flows back via '/idd-comment --type note' as summary + link, never full text (#116) — that is what keeps external research inside the audit trail. Both real-user misconceptions get canonical answers where they lived: research attaches AT diagnose (not after plan), and research vs implement are different phases' work, not substitutes. usecase-routing scenario 32 + a three-row internal-corpus vs external-world boundary table (idd-find / idd-ask / Deep Research). Deep integration stays a recorded residue until a plugin-dependable primitive exists. v2.102.1: reopen / resume path (#278) — the legal return trip from closed. idd-close gains a 'Reopen / resume path' section (close's dual operation): reopen-vs-new-issue criteria (same Expected -> reopen for trail continuity; morphed need -> new issue Refs old; broken upstream artifact -> #200's re-baseline, out of this path), resume point decided by the closing summary's WHY (premise changed -> re-diagnose; pure deferral -> implement), and the old summary stays untouched (append-only; reopen = note comment + idd-update phase rollback + optional prepend-note). Cross-referenced against auto-close-trap recovery. usecase-routing scenario 31. From a real user exchange; verify on substitute basis (disclosed). v2.102.0: three-front release. Skill-description contract + Path Map (#276, two-phase): idd-plan's frontmatter description — the ONLY surface read at skill-selection time — now names its diagnosis precondition; 5 skills gain the house pattern (drift-guard skill-description-contract, RED 8 first); docs/workflows.md gains a mermaid Path Flowchart mirroring the decision tree with all 36 catalog paths, rendered deterministically to the wiki Path-Map page by scripts/generate-path-map.py (drift-guard path-map-sync: freshness / coverage / discovery). Egress data-safety cluster (#275 + #273): empty-body guard — a provided-but-empty body now refuses (exit 15, band discipline; edit floors at 10 stripped chars because overwrite semantics turn empty dispatch into data loss — live incident 2026-07-22; explicit-intent escape --allow-empty-body); and the comment-PATCH surgery channel enters the nets via the new edit-comment verb (the #226 rollout's tracked-separately whitelist debt retired — it had bypassed EVERY net), with idd-edit's batch loop consuming the refusal band into a second outcome bucket (final exit stays 4). Dogfood: the #163 contract layer caught this release's own SCRUB_LEVEL provenance gap on first sweep. 42 suites, 0 fail. v2.99.1: staleness sweep + guard-net expansion (#267). README carried three stale gpt-5.5 pins and a stale vendored-codex-call claim — all outside the drift-guard scan net; fixed and the net widened: model-generation-sync now refutes pins in README + both catalog docs (31 assertions), and a new docs-catalog-sync suite requires every skills/* directory to appear in the catalog docs (the #122 no-forcing-function root cause is now test-detectable; it caught idd-ask and idd-config on its first RED). docs/workflows.md + skill-dimensions.md backfilled to v2.99 reality (P-find-lookup / P-ask-history / P-report-rollup / P-config-maintain / P-verify-file-profile paths, matrix rows, D12 4th member). 38 suites 0 fail. v2.99.0: /idd-ask — grounded QA over the issue corpus (#72), the surfacing family's 4th member mirroring /spectra-ask. Natural-language question -> decide-to-search gate (greetings/meta skip; bug-shaped questions never trigger diagnose) -> retrieval delegating idd-find's search backend (family rule: never rebuild a read-only query) -> full-text read of top-N hits (default 5, capped 10) -> grounded synthesis: first line blockquotes the question, every claim carries an issue/comment citation, source priority closed-with-PR > open > orphaned comment with conflicts surfaced, ending with Referenced Issues; corpus silence reported honestly, never filled from training memory. Read-only allowed-tools locked. First live run of the #140 fourth-member procedure (Q3 weak-hit judgment recorded in the family canonical). New capability spec idd-ask (+2 requirements); new drift-guard suite; 37 suites 0 fail. v2.98.0: codex channel goes full-dependency (#264, user ruling 'like superpowers'). The vendored bin/codex-call is DELETED — it trailed pai 2.18.0 by four security/correctness fixes (token-exp NSNumber parse, OAuth-file umask 0o077, form-encoding escape, post-flock re-read). Executable now resolves from the parallel-ai-agents plugin cache (MIN_PAI 2.19.0 — the codexModel/codexEffort contract floor, pai issue 22); model/effort/max-time governance resolves from codex-pro's EXTERNAL-CONSUMER CONTRACT (MIN_CODEX_PRO 0.7.0: machine-readable references/defaults.json base + global/project profile.yaml overlay, codex-pro issue 7) and is passed explicitly on all three call paths (canonical Workflow args + manual fan-out + legacy direct). IDD's tree contains ZERO model pins — generation bumps touch codex-pro's defaults.json only. Dependency wiring mirrors the superpowers shape: install-time dependencies entry (codex-pro@codex-pro), allowCrossMarketplaceDependenciesOn, check-plugin-presence pre-flight, fail-fast with a one-step install instruction, no soft fallback. model-generation-sync drift-guard reshaped to the v2 contract (a re-vendored codex-call fails the suite). 36 suites 0 fail. v2.97.0: 9-issue drain via 5 cluster PRs (#259-#263). Composable verification profiles (#258): idd-verify --profile code|prose|academic (+ config-registered custom via verify_profiles) switches the (lens set, DA focus, input source, freshness) four-tuple; new --file/--dir input sources make the git worktree optional; file-mode SHA-256 freshness gate mirrors the #228 diff gate (never silently exempted); code default byte-identical. New /idd-find skill (#139): surfacing-only semantic lookup over the open+closed corpus with GitHub relevance + phase/PR overlay; read-only, filter flags redirect to idd-list, embedding honestly deferred. Dashboard comment contract (#133) + idd-report --rollup (#134): one human-facing narrative snapshot per issue (marker-located, updates bound to phase transitions only, anti-#116) and a pull-only four-group attention view (need-attention / in-progress / stalled>14d / recently-closed). sdd_bias config switch (#252): hard-gate hits escalate to Spectra when high; default routing byte-identical. Layer V unattended deferred-record (#120): registry literal + structured catch-up record aggregated by idd-all Phase 6. Surfacing-primitives family doc, D12 axis (#140). Model-generation sync (#251): codex-call default gpt-5.6-sol is the tree's single generation pin (live-probed); prose generation-neutral; idd-route candidate renamed codex-xhigh. Docs path catalog completed (#122). 5 new drift-guard suites; 36 suites 0 fail. v2.96.0: gh-egress hardening cluster + idd-edit batch semantics. Exit-code band >=10 (#227: 10=privacy/11=mention/12=unscannable/13=attestation/14=usage; wrapper never exits <10 on its own — rc<10 is always gh's, so unattended callers can split gate-refusal from gh-failure on $? alone). Unified python3 content-net scan (#225: kills the jq/no-jq divergence; taxonomy = projects keys + path-shaped values under sensitive key names; fail-closed wide net when python3 absent). Phase 2 rollout (#226: all 6 skills' comment/edit egress now dispatch through gh-egress with attestation — the #117 mention net is mechanically enforced on the comment channel). idd-edit batch x R5 (#158: per-comment refuse + continue, batch outcome report, exit 4 iff any refused). v2.95.0: Discussions intake bridge (#221) — opt-in `idd-list --discussions` (GraphQL surface: Q&A/Ideas + unanswered + deduped vs issue refs; graceful no-op) + `idd-issue --from-discussion` (Provenance seed + draft-and-confirm reply, unattended never posts); cardinal rule: never auto-file. Plus idd-verify diff-freshness gate (#228: FROZEN_SHA vs HEAD before aggregate — refuse stale-snapshot verdicts) and the IDD_CALLER registry (#161: dynamic tree-sweep drift-guard). v2.94.0: selective git auto-tag (#85) — idd-issue tags idd-{N}-baseline at main HEAD (rollback anchor); idd-verify tags idd-{N}-verified on Aggregate PASS (review snapshot). Only these two milestones (no diagnose/plan/implement tags) so the tag namespace stays clean. Config `auto_tag` (default-ON, opt-out via enabled:false); idempotent (existing tag skipped) + graceful-skip on push failure (never aborts the workflow). v2.93.1: collaborator identity registry in idd-config (#86) — optional `collaborators[]` config field mapping a person's alias / email / display-name → GitHub @login WITHOUT guessing (github_login required; email is PII, private/gitignored only). tagging-collaborators.md Step 2.5 consults the registry first as an accelerator (a hit is still existence-verified via `gh api users/<login>`; a miss falls through to the API fuzzy-match); idd-config validate checks login charset + globally-unique aliases + PII reminder. v2.93.0: reshape Plan / pre-implementation tier (Cluster C, #129/#57/#111, via reshape-plan-preimpl-tier Spectra change) — first-class `meeting` issue type (meeting-first routing + Phase A/B/C deliberation + self-contained close gate), complexity hard gate (>=5-file interdependent-concept OR shared-abstraction MUST-trigger Plan, escalate-only), and superpowers pre-implementation hand-off (README stage-mapping table + non-binding brainstorming pointer, no self-built staging skill). v2.92.1: hotfix — parallel-ai-agents install-time dependency pointed at the wrong marketplace (psychquant-claude-plugins), making v2.92.0 fail to load and silently dropping all /idd-* skills; corrected to the parallel-ai-agents marketplace. v2.92.0: /idd-all batch-drain release — 23 issues verified+closed via 16 PRs (#223, #229-#243), the plugin's largest self-dogfood. Added: unattended-contract (state-file signal + TTL, TTY heuristic removed, idd-all/chain dependency early gates #123/#222/#211); gh-egress unconditional @-mention net with --mention-attested escape-or-attest contract (#117) atop 6-item mechanical-net precision hardening (#203); idd-close Step 6.3 doc-sync sweep (#220); test aggregator + GitHub Actions CI, 21 suites (#217); idd-list blocked-state grouping + all-blocked banner (#84); config Mechanism 3.5 submodule routing (#162); check-plugin-presence enabled-state detection exit 3 (#212); monorepo host plugin disambiguation (#68); assert-helpers eval-content ban + safe output-grep pair (#188); diagnosis-detection contract fixtures (#61). Changed: parallel-ai-agents promoted to install-time dependency, vendored ensemble fork DELETED, idd-verify two-tier chain (#219); DA sequenced-spawn eliminates the #119 socket-crash polling window (#130); spectra-archive-post-ic --force-linked-issue vs --linked-issue intent separation (#172); worktree conventions unified on the managed helper (#169); bridge state migrated to .claude/.idd/state/bridge.json (#199); .gitattributes LF policy (#216); merge-completeness fixtures default-branch self-sufficiency (#224). Audits: dependency bindings vs deep-integration rule (#210), rules layering 12/12 (#215). Follow-ups filed: #225-#228.",
"author": {
"name": "Che Cheng"
Expand Down
2 changes: 1 addition & 1 deletion docs/skill-dimensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ IDD plugin 已累積 14+ skills(`idd-issue` / `idd-diagnose` / `idd-implement` /
**Values**:
- `Attended-only` — Stage 2 picker / EnterPlanMode / `/spectra-discuss`(必須 user 在場回應)
- `Unattended-capable` — `idd-implement`(TDD loop)/ `idd-verify`(6-AI ensemble,no user interaction)/ `idd-list` / `idd-route`
- `Hybrid (attended preferred, unattended degraded)` — `idd-all`(attended:Plan tier 走 EnterPlanMode;unattended:auto-proceed default)/ `idd-all-chain` Phase 0.4
- `Hybrid (attended preferred, unattended degraded)` — `idd-all`(Plan tier 的 attended / unattended 分流見 `skills/idd-all/SKILL.md` 的 dispatch table,此處不複述)/ `idd-all-chain` Phase 0.4

**為什麼重要**:Hybrid skills 是 D1(Separation vs Automation)的衝突 hotspot — unattended mode 容易 silent-bypass deliberation moment。

Expand Down
6 changes: 3 additions & 3 deletions docs/workflows.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ idd-all #N
```

- **Use case**:diagnose 階段已 surface complexity verdict,user 已 review;接下來 implement+verify+close 走 automation
- **Mode**:Hybrid(Plan tier 仍走 EnterPlanMode,Simple/Spectra 不阻擋)
- **Mode**:Hybrid — 依 interaction 軸分流;**routing 不在此複述**,見 [`skills/idd-all/SKILL.md`](../plugins/issue-driven-dev/skills/idd-all/SKILL.md) 的 dispatch table(normative source)
- **觸發點數**:1(after diagnose)
- **Assumptions**:`gh issue view #N` 已有 `## Diagnosis` comment
- **Risks**:低 — deliberation 已 user-honored
Expand Down Expand Up @@ -404,7 +404,7 @@ idd-edit comment:NNN --append --body "..."

- **Use case**:autonomous 持續執行;適合 well-bounded simple issues
- **Mode**:Unattended
- **Risks**:**極高** — deliberation 完全 absent;若 issue 模糊 / multi-step / Plan tier,Plan gate 仍 trigger 但 EnterPlanMode 無人 approve → 卡住
- **Risks**:**極高** — deliberation 完全 absent。Plan tier 在 unattended 下**不會卡住,但也不會被審**:`idd-all` 的 dispatch table 把它降級走 Phase 3a `/idd-implement`(見 `skills/idd-all/SKILL.md`,那裡是 normative source),final report 標 `[Plan tier deliberation skipped under unattended mode]`。**沉默地少了一道 approval gate,比卡住更難察覺** —— issue 模糊 / multi-step 時尤其危險。

#### P-cron-autopilot

Expand Down Expand Up @@ -567,7 +567,7 @@ Q1: 是 single issue 還是 multi issues?

> `/loop /idd-all #N`(其中 #N diagnose 後 verdict = Plan)

**Wrong**:Plan tier EnterPlanMode 需 user approve,unsupervised loop 無人 approve,**卡住**。應改 verdict 為 Simple,或拒絕進 loop。
**Wrong**:unattended 下 Plan tier 會被**降級**而不是卡住(見 `skills/idd-all/SKILL.md` 的 dispatch table),所以 deliberation 是**沉默地**消失的 —— 比卡住更難察覺。應改 verdict 為 Simple,或拒絕進 loop。

### A3. P-chain-from-root 多 root 用 batch 跑

Expand Down
8 changes: 5 additions & 3 deletions openspec/specs/idd-pr-hitl-modes/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,15 +237,17 @@ code:
---
### Requirement: Attended interaction permits sub-skill questions

When the resolved interaction is `attended`, `idd-all` SHALL NOT inject any `UNATTENDED MODE` directive into sub-skill invocation args. Each sub-skill's own attended-by-default behavior — `idd-implement` plan-tier `EnterPlanMode` approval, `spectra-discuss` multi-turn pacing, `spectra-propose` Step 10 Park/Apply prompt, `idd-implement` `AskUserQuestion` checkpoints — MUST take effect natively.
When the resolved interaction is `attended`, `idd-all` SHALL NOT inject any `UNATTENDED MODE` directive into sub-skill invocation args. Each sub-skill's own attended-by-default behavior — `/idd-plan`'s `EnterPlanMode` approval, `spectra-discuss` multi-turn pacing, `spectra-propose` Step 10 Park/Apply prompt, `idd-implement` `AskUserQuestion` checkpoints — MUST take effect natively.

> The Plan-tier gate lives in `/idd-plan`, not in `idd-implement` (`#292`). Which phase invokes which skill is stated once, in `skills/idd-all/SKILL.md`'s dispatch table; this spec constrains the *directive injection* and defers to that table for routing.

#### Scenario: attended mode allows EnterPlanMode

- **GIVEN** resolved interaction is `attended`
- **AND** Phase 2 diagnose returns Complexity = `Plan`
- **WHEN** Phase 3a invokes `idd-implement`
- **WHEN** Phase 3p invokes `/idd-plan` (per the dispatch table in `skills/idd-all/SKILL.md`)
- **THEN** the args string contains no `UNATTENDED MODE` directive
- **AND** `idd-implement` enters Plan tier and triggers `EnterPlanMode` for user approval
- **AND** `/idd-plan` triggers `EnterPlanMode` for user approval, then chains to `idd-implement`

#### Scenario: attended mode allows spectra-discuss multi-turn

Expand Down
4 changes: 2 additions & 2 deletions plugins/issue-driven-dev/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "issue-driven-dev",
"description": "v2.102.2: Deep Research light integration (#277, ruling b). idd-diagnose gains a non-binding pointer (the #111 superpowers hand-off shape: pure suggestion, no presence check, no dependency) fired when the diagnosis's quality depends on facts OUTSIDE the repo — with trigger examples AND counter-examples (the overly-broad-signal risk). Output flows back via '/idd-comment --type note' as summary + link, never full text (#116) — that is what keeps external research inside the audit trail. Both real-user misconceptions get canonical answers where they lived: research attaches AT diagnose (not after plan), and research vs implement are different phases' work, not substitutes. usecase-routing scenario 32 + a three-row internal-corpus vs external-world boundary table (idd-find / idd-ask / Deep Research). Deep integration stays a recorded residue until a plugin-dependable primitive exists.",
"version": "2.110.0",
"description": "v3.0.0 (BREAKING): the closing-summary helper may VETO and may never PERMIT. After twelve verify rounds failing in one direction — a real summary the recogniser could not follow classified `missing`, and `missing` being the sole authorisation for `/idd-close --retroactive` to post a duplicate — the power was split along the direction that is sound. \"A marker IS here\" is an observation; \"a marker is NOT here\" is an inference from a failure to recognise, and no matcher over source bytes can answer a question about rendered output in the negative. Gate exit codes are now 1 (recognised) / 2 (undeterminable) / 10 (nothing recognised — NOT permission); there is no exit 0 in gate mode, deliberately, so a caller still reading `rc == 0 means go` breaks loudly. Gate class `missing` → `unrecognised`, every reply carries authorises:false, and a fifth class `mentioned` names the state the tool can actually observe. `--retroactive` loses its unattended path: the skill must read the comment set itself and obtain human confirmation that cannot be disabled. Classification now asks who wrote the comment, so a commenter can no longer move an issue between classes. Also: three more exit-0 parser paths, markup counted as content three layers deep, a quotation reaching `compliant`, the mention gate passing on zero iterations by three routes, untrusted prose reaching a shell command line, and #317 criterion (c) answered correctly for the first time in five attempts. Ten guards were mutation-proven vacuous and rebuilt.",
"version": "3.0.0",
"author": {
"name": "Che Cheng"
},
Expand Down
Loading
Loading