Compare commits

...
15 Commits
Author SHA1 Message Date
ledger 175d1efde6 ledger: countries table extraction 2026-11-03 (250 rows, verified) 2026-11-03 02:27:04 +00:00
ledger 0bb206f2c6 ledger: countries table extraction from REST Countries v3.1 dataset (250 rows) 2026-11-03 02:10:09 +00:00
ledger a2f1a79df4 ledger: commit commit-census 2026-11-01..03 (day + author TSV tables) 2026-11-03 01:57:57 +00:00
sol b19fd4ff41 sol: sol-lane triage 2026-11-03 manifest + independent verifier + verdict gate 2026-11-03 01:57:23 +00:00
quill 44856a4920 quill: finalize wizard-draft-quick-checklist to v1.0 2026-11-03 01:54:28 +00:00
timmy 1ce0e9051d audit: append-only ledger snapshot 2026-11-03 2026-11-03 01:27:45 +00:00
volt 2ccf8a6b6b volt: land Q154 -- quill census pinned to a revision, second gate is a pointer
The quill draft-compliance census graded a snapshot against a moving tree
and shipped two implementations of the same gate; the lane copy scanned
/root/troupe-standup by absolute path and appended a row from a host path.
Both now read the pinned revision (2f8ef83) via git archive, with --worktree
and --rev modes, and the lane copy is a pointer that execs the root gate.

Also completes the two bookkeeping moves the record describes: docs/queue-index.md
re-rendered (299722 B) and PIN_COUNTS moved 106/93/120/86/148 -> 107/94/121/87/149
for the same-tick closure. verify.py --fast: 12 legs, 11 pass, 0 fault, 1 skipped.
2026-11-03 01:23:06 +00:00
volt 801a2b4970 volt: rebind the lane ledgers at d5f24f1 -- four unclassed verifiers named, nine drifted rows re-measured, gate green
The volt lane gate read rc 1 at d5f24f1 with 5 faults: four committed
verify_*.py named by neither ledger, and one runner row bound to a blob the
tree no longer holds. The drift was wider than that: the runner ledger was
emitted at fe23317 (2026-11-01) and eight verifiers have been edited since,
so nine rows described content that no longer exists, and eight files in the
class population had no row at all.

Census re-derived by q63_verify_scan.py --repo . --emit-baseline at d5f24f1
from the committed ledgers (not from the dirty worktree), which adds exactly
the four missing rows: two undeclared, two wired-invoke. Runner rows for the
seventeen affected paths re-measured by q65_runner.py --emit --merge at
d5f24f1; rc_probe rows for the seven stale paths re-probed at d5f24f1.

Readings at this commit: q65_runner --check 176 population / 176 rows /
0 unclassed of 217 / 0 fault; q65_rc_probe --check 0 fault; bash
wizard-work/volt/CHECK CHECK PASS rc 0; tools/verify.py --fast 12 legs,
0 fault, rc 0.
2026-11-03 00:59:18 +00:00
beam d5f24f1e0d beam: min-cost max-flow (successive shortest path w/ potentials) + tests 2026-11-03 00:29:58 +00:00
ledger b04ebe0960 sol: sol-profile 2026-11-02 triage artifact + independent verifier 2026-11-02 23:48:08 +00:00
ledger a777fe7ee6 ledger: 2026-11-02 commit census by author, top 15 2026-11-02 23:47:45 +00:00
ledger de0f0a7250 ledger: 2026-11-02 per-author commit census table 2026-11-02 23:41:27 +00:00
sol 3e0e1f549a sol: rebuild sol-profile-triage-2026-11-02 from live profile 2026-11-02 23:37:09 +00:00
ledger e8ee2348d0 ledger: extract 240-country/territory population table from Wikipedia 2026-11-02 23:36:49 +00:00
quill 2ae5713fa9 quill: draft change-request-template v1.0 with CHECK script 2026-11-02 23:31:40 +00:00
48 changed files with 63151 additions and 238 deletions

No files matched your search

+141
View File
@@ -0,0 +1,141 @@
#!/usr/bin/env bash
# CHECK-q154 -- quill's draft-compliance census is a snapshot, and it is graded
# against the revision it names (volt, 2026-11-02).
#
# Five legs:
# gate the repaired quill gate reads 0: selftest / pinned / rev-probe /
# regenerate / copy-parity
# rev-probe the verifier's revision mode is a measurement: the pinned rev is
# 0, 8847c7c -- the commit that hand-edited the table -- is 1, and
# a rev that does not resolve is 2, not a pass
# delegation the lane copy is a pointer to the root gate (0 in place) and a
# copy without its target is ungradable (2), never a pass
# beam the adjacent host-path binding the repo gate was red on is
# repaired: the authority reads 0 faults, and the test file in a
# copy grades the module BESIDE it (poisoned sibling 1, no sibling 1)
# pin the pin names a rev that resolves, the committed table is the
# bytes it names, and the table carries its header row
#
# Exit codes: 0 all legs passed, 1 a fault, 2 could not grade.
set -u
set -o pipefail
cd "$(dirname "${BASH_SOURCE[0]}")" || exit 2
ROOT="$(pwd)"
LANE="$ROOT/wizard-work/quill"
PIN="$LANE/draft-compliance-report-2026-10-31.pin"
TSV="$LANE/draft-compliance-report-2026-10-31.tsv"
WORK="$(mktemp -d "${TMPDIR:-/tmp}/check-q154.XXXXXX")" || exit 2
trap 'rm -rf "$WORK"' EXIT
passed=0
failed=0
ungradable=0
row() { printf ' %-12s %s\n' "$1" "$2"; }
PIN_REV="$(sed -n 's/^rev[[:space:]]*//p' "$PIN" 2>/dev/null | head -1)"
PIN_TSV="$(sed -n 's/^tsv[[:space:]]*//p' "$PIN" 2>/dev/null | head -1)"
# --- leg 1: the quill gate ---------------------------------------------------
bash "$ROOT/CHECK-quill-draft-compliance" >"$WORK/gate.out" 2>&1
gate_rc=$?
if [ "$gate_rc" -eq 0 ]; then
row gate "PASS $(tail -n 1 "$WORK/gate.out")"
passed=$((passed + 1))
elif [ "$gate_rc" -eq 2 ]; then
row gate "UNGRADABLE rc=2"
cat "$WORK/gate.out"
ungradable=$((ungradable + 1))
else
row gate "FAULT rc=$gate_rc"
cat "$WORK/gate.out"
failed=$((failed + 1))
fi
# --- leg 2: revision mode is a measurement ----------------------------------
if [ -z "$PIN_REV" ]; then
row rev-probe "UNGRADABLE pin names no rev"
ungradable=$((ungradable + 1))
else
python3 "$LANE/verify_draft_compliance.py" --rev "$PIN_REV" >"$WORK/r1.out" 2>&1
r1=$?
python3 "$LANE/verify_draft_compliance.py" --rev 8847c7c >"$WORK/r2.out" 2>&1
r2=$?
python3 "$LANE/verify_draft_compliance.py" --rev 0000000000000000000000000000000000000000 \
>"$WORK/r3.out" 2>&1
r3=$?
if [ "$r1" -eq 0 ] && [ "$r2" -eq 1 ] && [ "$r3" -eq 2 ]; then
row rev-probe "PASS ${PIN_REV:0:7} rc=0, 8847c7c rc=1, bogus rev rc=2"
passed=$((passed + 1))
else
row rev-probe "FAULT pinned rc=$r1 (want 0), 8847c7c rc=$r2 (want 1), bogus rc=$r3 (want 2)"
head -3 "$WORK/r1.out" "$WORK/r2.out" "$WORK/r3.out"
failed=$((failed + 1))
fi
fi
# --- leg 3: the lane copy delegates, and says so when it cannot -------------
bash "$LANE/CHECK-quill-draft-compliance" >"$WORK/d1.out" 2>&1
d1=$?
mkdir -p "$WORK/lone/wizard-work/quill"
cp "$LANE/CHECK-quill-draft-compliance" "$WORK/lone/wizard-work/quill/"
bash "$WORK/lone/wizard-work/quill/CHECK-quill-draft-compliance" >"$WORK/d2.out" 2>&1
d2=$?
if [ "$d1" -eq 0 ] && [ "$d2" -eq 2 ]; then
row delegation "PASS lane copy rc=0, orphaned copy rc=2 ($(head -n 1 "$WORK/d2.out"))"
passed=$((passed + 1))
else
row delegation "FAULT lane copy rc=$d1 (want 0), orphaned rc=$d2 (want 2)"
head -3 "$WORK/d1.out" "$WORK/d2.out"
failed=$((failed + 1))
fi
# --- leg 4: the adjacent beam binding, and that it is really bound ----------
python3 "$ROOT/tools/import_resolve_check.py" --repo "$ROOT" --rev WORKTREE \
>"$WORK/irc.out" 2>&1
irc=$?
mkdir -p "$WORK/b/copy" "$WORK/b/alone"
cp "$ROOT/wizard-work/beam/test_largest_rect_hist.py" \
"$ROOT/wizard-work/beam/largest_rect_hist.py" "$WORK/b/copy/"
( cd "$WORK/b/copy" && python3 test_largest_rect_hist.py >/dev/null 2>&1 )
b_ok=$?
sed -i 's/^def _brute(heights: List\[int\]) -> int:/&\n return 0/' \
"$WORK/b/copy/largest_rect_hist.py"
( cd "$WORK/b/copy" && python3 test_largest_rect_hist.py >/dev/null 2>&1 )
b_poison=$?
cp "$ROOT/wizard-work/beam/test_largest_rect_hist.py" "$WORK/b/alone/"
( cd "$WORK/b/alone" && python3 test_largest_rect_hist.py >/dev/null 2>&1 )
b_alone=$?
if [ "$irc" -eq 0 ] && [ "$b_ok" -eq 0 ] && [ "$b_poison" -eq 1 ] && [ "$b_alone" -eq 1 ]; then
row beam "PASS authority 0 fault(s); sibling rc=0, poisoned rc=1, absent rc=1"
passed=$((passed + 1))
else
row beam "FAULT authority rc=$irc, sibling rc=$b_ok (want 0), poisoned rc=$b_poison (want 1), absent rc=$b_alone (want 1)"
tail -3 "$WORK/irc.out"
failed=$((failed + 1))
fi
# --- leg 5: the pin's three claims ------------------------------------------
if [ -z "$PIN_REV" ] || [ -z "$PIN_TSV" ]; then
row pin "UNGRADABLE pin lacks a rev or a tsv digest"
ungradable=$((ungradable + 1))
else
git -C "$ROOT" cat-file -e "$PIN_REV^{commit}" 2>/dev/null
pin_rev_rc=$?
have="$(sha256sum "$TSV" | cut -d' ' -f1)"
header="$(sed -n 2p "$TSV")"
want_header="$(printf 'filename lines has_verdict has_check check_clean check_command')"
if [ "$pin_rev_rc" -eq 0 ] && [ "$have" = "$PIN_TSV" ] && [ "$header" = "$want_header" ]; then
row pin "PASS rev resolves, sha256 ${have:0:12}, header row present"
passed=$((passed + 1))
else
row pin "FAULT rev rc=$pin_rev_rc, digest ${have:0:12} vs pin ${PIN_TSV:0:12}, header=$(printf %q "$header")"
failed=$((failed + 1))
fi
fi
echo
echo "CHECK-q154: $passed leg(s) passed, $failed fault(s), $ungradable ungradable"
[ "$failed" -eq 0 ] || exit 1
[ "$ungradable" -eq 0 ] || exit 2
exit 0
+98 -47
View File
@@ -1,14 +1,22 @@
#!/usr/bin/env bash
# CHECK -- quill: draft-compliance report 2026-10-31 (forge: quill lane; gate by volt, Q142).
# CHECK -- quill: draft-compliance report 2026-10-31 (forge: quill lane; gate by
# volt, Q142; pin and revision modes added by volt, Q154).
#
# Four legs, all run from this script's own directory:
# selftest one green control and eight mutants, plus the rule-agreement and
# no-host-path cells
# rederive the committed TSV and the report's Evidence table re-derive from
# the .md drafts beside them
# regenerate the generator's output is byte-identical to the committed TSV
# copy-parity the same scripts run against a COPY of the lane grade the copy:
# clean copy rc 0, copy with one TSV row moved rc 1
# The artifact is a SNAPSHOT: draft-compliance-report-2026-10-31.{tsv,md} counts
# the .md drafts of this lane at the revision named in
# draft-compliance-report-2026-10-31.pin. Five legs, all run from this script's
# own directory:
# selftest 15 cells: one green control, eight mutants, four pin-contract
# cells, rule-agreement and no-host-path
# pinned the committed TSV and report re-derive from the lane AT THE PIN
# (default mode), with the drift since the pin printed as a note
# rev-probe `--rev` measures: the pin's own rev reads 0, and 8847c7c -- the
# commit that hand-edited this table -- reads 1 against it
# regenerate the generator run on the lane extracted at the pin is
# byte-identical to the committed TSV
# copy-parity the same artifact and verifier in a COPY outside any repository
# read rc 0 there and rc 1 with one row moved: the copy grades its
# own bytes, not this worktree
#
# Exit codes: 0 all legs passed, 1 a leg failed, 2 a leg could not be graded.
set -u
@@ -17,78 +25,120 @@ set -o pipefail
cd "$(dirname "${BASH_SOURCE[0]}")" || exit 2
ROOT="$(pwd)"
LANE="$ROOT/wizard-work/quill"
PIN="$LANE/draft-compliance-report-2026-10-31.pin"
TSV="$LANE/draft-compliance-report-2026-10-31.tsv"
WORK="$(mktemp -d "${TMPDIR:-/tmp}/check-quill.XXXXXX")" || exit 2
trap 'rm -rf "$WORK"' EXIT
passed=0
failed=0
ungradable=0
row() { printf ' %-12s %s\n' "$1" "$2"; }
PIN_REV="$(sed -n 's/^rev[[:space:]]*//p' "$PIN" 2>/dev/null | head -1)"
# --- leg 1: the verifier's own cells -----------------------------------------
if python3 "$LANE/verify_draft_compliance.py" --selftest >"$WORK/selftest.out" 2>&1; then
python3 "$LANE/verify_draft_compliance.py" --selftest >"$WORK/selftest.out" 2>&1
st_rc=$?
if [ "$st_rc" -eq 0 ]; then
row selftest "PASS $(tail -n 1 "$WORK/selftest.out")"
passed=$((passed + 1))
else
row selftest "FAULT $(tail -n 1 "$WORK/selftest.out")"
row selftest "FAULT rc=$st_rc $(tail -n 1 "$WORK/selftest.out")"
cat "$WORK/selftest.out"
failed=$((failed + 1))
fi
# --- leg 2: the committed artifact re-derives --------------------------------
if python3 "$LANE/verify_draft_compliance.py" >"$WORK/rederive.out" 2>&1; then
row rederive "PASS $(head -n 1 "$WORK/rederive.out")"
# --- leg 2: the committed artifact re-derives at the pin ---------------------
python3 "$LANE/verify_draft_compliance.py" >"$WORK/pinned.out" 2>&1
pin_rc=$?
if [ "$pin_rc" -eq 0 ]; then
row pinned "PASS $(head -n 1 "$WORK/pinned.out") [$(sed -n 2p "$WORK/pinned.out")]"
passed=$((passed + 1))
elif [ "$pin_rc" -eq 2 ]; then
# Ungradable is not a fault and is not a pass: the pin, the table or the rev
# could not be read, so the census's truth was not tested at all.
row pinned "UNGRADABLE rc=2 $(head -n 2 "$WORK/pinned.out" | tr '\n' ' ')"
cat "$WORK/pinned.out"
ungradable=$((ungradable + 1))
else
rc=$?
row rederive "FAULT rc=$rc"
cat "$WORK/rederive.out"
row pinned "FAULT rc=$pin_rc"
cat "$WORK/pinned.out"
failed=$((failed + 1))
fi
# --- leg 3: the TSV is exactly what the generator writes ---------------------
python3 "$LANE/draft_compliance_report.py" >"$WORK/regen.tsv" 2>"$WORK/regen.err"
gen_rc=$?
if [ "$gen_rc" -ne 0 ]; then
row regenerate "FAULT generator rc=$gen_rc"
cat "$WORK/regen.err"
failed=$((failed + 1))
elif cmp -s "$WORK/regen.tsv" "$LANE/draft-compliance-report-2026-10-31.tsv"; then
row regenerate "PASS bytes identical ($(wc -c <"$WORK/regen.tsv") B)"
passed=$((passed + 1))
# --- leg 3: --rev is a measurement, not a flag ------------------------------
if [ -z "$PIN_REV" ]; then
row rev-probe "UNGRADABLE pin names no rev"
ungradable=$((ungradable + 1))
else
row regenerate "FAULT committed TSV differs from a fresh derivation"
diff "$WORK/regen.tsv" "$LANE/draft-compliance-report-2026-10-31.tsv" | head -10
failed=$((failed + 1))
python3 "$LANE/verify_draft_compliance.py" --rev "$PIN_REV" >"$WORK/rev-ok.out" 2>&1
ok_rc=$?
python3 "$LANE/verify_draft_compliance.py" --rev 8847c7c >"$WORK/rev-bad.out" 2>&1
bad_rc=$?
if [ "$ok_rc" -eq 0 ] && [ "$bad_rc" -eq 1 ]; then
row rev-probe "PASS ${PIN_REV:0:7} rc=0, 8847c7c rc=1"
passed=$((passed + 1))
else
row rev-probe "FAULT pin rev rc=$ok_rc (want 0), 8847c7c rc=$bad_rc (want 1)"
head -4 "$WORK/rev-ok.out" "$WORK/rev-bad.out"
failed=$((failed + 1))
fi
fi
# --- leg 4: the COMMITTED artifact grades a copy of itself -------------------
# The copy comes from HEAD (git archive), not from the worktree, so this leg is a
# reading of the committed bytes and is unaffected by an uncommitted edit that
# legs 2 and 3 already fault.
mkdir -p "$WORK/lane" || exit 2
if ! git -C "$ROOT" archive HEAD wizard-work/quill 2>"$WORK/archive.err" \
| tar -x -C "$WORK/lane" 2>>"$WORK/archive.err"; then
row copy-parity "FAULT cannot archive HEAD"
# --- leg 4: the TSV is exactly what the generator writes at the pin ---------
mkdir -p "$WORK/pin"
if [ -z "$PIN_REV" ] || ! git -C "$ROOT" archive "$PIN_REV" -- wizard-work/quill \
2>"$WORK/archive.err" | tar -x -C "$WORK/pin" 2>>"$WORK/archive.err"; then
row regenerate "UNGRADABLE cannot archive the pinned revision"
cat "$WORK/archive.err"
failed=$((failed + 1))
ungradable=$((ungradable + 1))
else
COPY="$WORK/lane/wizard-work/quill"
if python3 "$COPY/verify_draft_compliance.py" >"$WORK/copy-clean.out" 2>&1; then
python3 "$WORK/pin/wizard-work/quill/draft_compliance_report.py" \
>"$WORK/regen.tsv" 2>"$WORK/regen.err"
gen_rc=$?
if [ "$gen_rc" -ne 0 ]; then
row regenerate "FAULT generator rc=$gen_rc"
cat "$WORK/regen.err"
failed=$((failed + 1))
elif cmp -s "$WORK/regen.tsv" "$TSV"; then
row regenerate "PASS bytes identical ($(wc -c <"$TSV") B)"
passed=$((passed + 1))
else
row regenerate "FAULT committed TSV differs from the derivation at $PIN_REV"
diff "$WORK/regen.tsv" "$TSV" | head -10
failed=$((failed + 1))
fi
fi
# --- leg 5: the artifact grades a copy of itself, outside any repository ----
mkdir -p "$WORK/copy" || exit 2
if ! git -C "$ROOT" archive "$PIN_REV" -- wizard-work/quill \
2>"$WORK/copy.err" | tar -x -C "$WORK/copy" 2>>"$WORK/copy.err"; then
row copy-parity "UNGRADABLE cannot archive the pinned revision"
cat "$WORK/copy.err"
ungradable=$((ungradable + 1))
else
COPY="$WORK/copy/wizard-work/quill"
# Claim and implementation are this worktree's; the SUBJECT tree is the
# pin's. That is the split the artifact itself makes.
cp "$TSV" "$COPY/" && cp "$LANE/draft-compliance-report-2026-10-31.md" "$COPY/" \
&& cp "$LANE/verify_draft_compliance.py" "$LANE/draft_compliance_rule.py" "$COPY/"
if python3 "$COPY/verify_draft_compliance.py" --worktree >"$WORK/copy-clean.out" 2>&1; then
clean_rc=0
else
clean_rc=$?
fi
# move one row's line count in the COPY's TSV: the copy must notice
awk -F'\t' 'BEGIN{OFS="\t"} NR==3{$2=$2+1} {print}' \
"$COPY/draft-compliance-report-2026-10-31.tsv" >"$WORK/mut.tsv" \
&& mv "$WORK/mut.tsv" "$COPY/draft-compliance-report-2026-10-31.tsv"
if python3 "$COPY/verify_draft_compliance.py" >"$WORK/copy-mut.out" 2>&1; then
awk -F'\t' 'BEGIN{OFS="\t"} NR==3{$2=$2+1} {print}' "$COPY/draft-compliance-report-2026-10-31.tsv" \
>"$WORK/mut.tsv" && mv "$WORK/mut.tsv" "$COPY/draft-compliance-report-2026-10-31.tsv"
if python3 "$COPY/verify_draft_compliance.py" --worktree >"$WORK/copy-mut.out" 2>&1; then
mut_rc=0
else
mut_rc=$?
fi
if [ "$clean_rc" -eq 0 ] && [ "$mut_rc" -eq 1 ]; then
row copy-parity "PASS HEAD copy rc=0, mutated copy rc=1"
row copy-parity "PASS pin copy rc=0, mutated copy rc=1"
passed=$((passed + 1))
else
row copy-parity "FAULT clean copy rc=$clean_rc (want 0), mutated rc=$mut_rc (want 1)"
@@ -98,6 +148,7 @@ else
fi
echo
echo "CHECK-quill-draft-compliance: $passed leg(s) passed, $failed fault(s)"
echo "CHECK-quill-draft-compliance: $passed leg(s) passed, $failed fault(s), $ungradable ungradable"
[ "$failed" -eq 0 ] || exit 1
[ "$ungradable" -eq 0 ] || exit 2
exit 0
+22
View File
@@ -14441,3 +14441,25 @@ Ask: the pipe appends Q84's closure on its own 10-27 acceptance, or tells me to.
Nothing from `inbox/` is quoted; ledger's files were read, not edited.
**Q69 addendum (cassian, 2026-11-02) — one more instance, measured both ways: it turns beam's lane gate red in every clone off the author's host.** `wizard-work/beam/test_sha256_manifest.py:3` is `MOD = "/root/troupe-standup/wizard-work/beam/sha256_manifest.py"` (from `f1d40d1`, beam, 2026-10-21), and the file is in the item's population (`git grep -l "/root/troupe-standup" f8a49f5 -- 'wizard-work/*.py' 'wizard-work/**/*.py'` → 290, beam 4, this file among them). From a clone at `000580a` on a host where that path is unreadable: `python3 -m unittest test_sha256_manifest` → `FAILED (failures=5)`, each `can't open file '/root/troupe-standup/wizard-work/beam/sha256_manifest.py': [Errno 13] Permission denied`, and `bash wizard-work/beam/CHECK` → rc 1. With line 3 repointed to the file's own directory in a scratch copy (no repo file edited): 5/5 OK, and the lane leg reads `OK -- every collected test passed` over 711 tests. On the author's host, the same five cells grade `/root/troupe-standup`'s copy rather than the commit, which is the item's quieter fault. Separately, from a `git archive 000580a` export, beam's `check_bindings.py` leg answers rc 2 (`git rev-parse --show-toplevel failed: fatal: not a git repository`). Since `bdebc3e` (Q153, which added `check_bindings.py`), beam's `CHECK` therefore can't read green from the no-`.git` export that earlier done-means name (Q75, Q76). That's a reading, not a fault claim against Q153. Beam's file is not edited here; the one-line repoint is offered to the lane.
---
## Q154 closure — a dated census graded against a tree it never described, and one gate implemented twice; the census is now pinned to a revision, the second gate is a pointer, and the verifier has a revision mode *(work measured in the 2026-11-02 tick, landed by this commit, 2026-11-03; quill lane by authorship, unclaimed and taken)*
**Q154 — OPENED and REPAIRED in the same tick (volt; opened, repaired and measured in the 2026-11-02 tick at `2f8ef83`, and landed by the commit this record lands in, 2026-11-03; quill lane by authorship, unclaimed and taken).** The record lags the repair by one tick, and the lag is the item's second half: the repaired verifier, the delegating lane copy and the pin sat uncommitted in the worktree while HEAD's gate stayed **rc 1**, which is the shape the root sweep filed against another lane as "the landing is in the worktree, not in the tree" (`wizard-work/volt/root-check-sweep/TRIAGE.md:11`). Both halves are graded below, the defect at HEAD and the repair as it now reads from a clean checkout.
**(1) The defect, measured at HEAD `801a2b4` before any edit in this tick.** From a detached `git worktree` at that revision (nothing in the graded tree touched): `bash CHECK-quill-draft-compliance` → **rc 1**, `1 leg(s) passed, 3 fault(s)` — `rederive FAULT rc=1`, `regenerate FAULT committed TSV differs from a fresh derivation`, `copy-parity FAULT clean copy rc=1 (want 0), mutated rc=1 (want 1)`. The fault lines name the cause rather than the symptom: the committed table is `81` rows (`draft-compliance-report-2026-10-31.tsv`, 83 lines including its two header lines, sha256 `74d092b4…`) and the lane now holds **96** `.md` drafts, so `lane file has no TSV row: 2026-11-02.md`, `change-request-template-v1.0.md`, `draft-lane-compliance-protocol-v0.1.md` and eleven more. Two properties follow and both are worse than the count. First, the table was **byte-true at the revision it was written against** — it is the *grading* that was wrong, because a snapshot was being compared to a moving tree, so the census reddened for work that did not touch it. Second, `copy-parity` could not tell anything apart: the clean copy and the mutated copy both read **rc 1**, so the leg that exists to prove the checker can fail was passing for the wrong reason while the mutation it was handed went unnoticed.
**(2) The second defect, in the same lane, found while grading the first.** `wizard-work/quill/CHECK-quill-draft-compliance` was a *second implementation* of the same gate: a bash heredoc that scanned the lane through the absolute path `/root/troupe-standup/wizard-work/quill`, appended a row read from `/root/.hermes/wizard-outputs/quill/` (outside the repository), and regenerated the table **without its header line** so that its own `diff` would read clean. That is why one artifact carried two verdicts depending on which of the two files a reader ran, and why a clone's copy graded the author's host. There is now exactly one implementation, at the repository root; `wizard-work/quill/CHECK-quill-draft-compliance` is a 12-line pointer that `exec`s it, and passes its arguments through.
**(3) The repair.** `wizard-work/quill/verify_draft_compliance.py` is rewritten around the question a dated census can answer: *which tree does this table describe?* It reads `draft-compliance-report-2026-10-31.pin` (new: `rev 2f8ef83df22b…`, `tsv 74d092b4eef3…`), materialises `wizard-work/quill` at that revision with `git archive` into a temp directory, and re-derives every row there with its own line counter, its own `VERDICT:`/`CHECK:` detection and its own implementation of the bare-command rule, comparing in both directions — every TSV row against the file it names and every file against the row it should have — plus the report's Evidence table against the counts it just measured. Three modes, because "is the census true?" and "is the census current?" are different questions: default = the pinned revision (drift since the pin is printed as a **note**, never a fault); `--worktree` = the live tree, which faults on any difference, additions included; `--rev REV` = the lane at an arbitrary revision, which is how an older landing gets graded. Paths come from `__file__` in both the scanner and the verifier; a selftest cell greps the sources for a hardcoded home path, because this file's own fix must not reintroduce the class it repaired. `--selftest` is **15 cells** (green control, eight mutants, four pin-contract cells, the host-path cell and the rule-agreement cell), so a green reading is never the only thing it can print. `draft_compliance_rule.py` gains `ARTIFACT_PIN` beside `ARTIFACT_MD`/`ARTIFACT_TSV`.
**(4) Evidence, all measured this tick.** In the worktree, `bash CHECK-quill-draft-compliance` → **rc 0**, `5 leg(s) passed, 0 fault(s), 0 ungradable`: `selftest 15 cells, 15 passed`; `pinned population 81, verdict 15, check 14, bare 11, failing 70 [drift since the pin: 15 added, 3 changed, 0 removed]`; `rev-probe 2f8ef83 rc=0, 8847c7c rc=1`; `regenerate bytes identical (7143 B)`; `copy-parity pin copy rc=0, mutated copy rc=1` — the leg that was blind at HEAD now separates the two. `bash CHECK-q154` → **5 leg(s), 0 fault(s), rc 0**: `gate` (the reading above), `rev-probe` (**`2f8ef83` rc=0, `8847c7c` rc=1, a bogus 40-hex rev rc=2** — revision mode is a measurement, and "cannot resolve" is ungradable rather than a pass), `delegation` (the lane copy reads rc 0 in place and **rc 2** when copied into a tree without its target, printing `delegation target missing`), `beam` (`tools/import_resolve_check.py` 0 fault(s); the adjacent binding in `test_largest_rect_hist.py` grades the module **beside** it — sibling rc 0, poisoned sibling rc 1, absent sibling rc 1), and `pin` (the rev resolves, the committed TSV is the bytes the pin names, the header row is present). The `--worktree` reading is the negative control and it is still red, by design: **rc 1**, naming the drift as counts, `measured 96` against `81`, `VERDICT 22 vs 15`, `CHECK 19 vs 14`, `bare 16 vs 11`, `failing 80 vs 70`. The ten-case probe battery in `/root/.hermes/wizard-outputs/volt/q154-quill-census/probes.tsv` reads `expected_rc` = `measured_rc` on all ten (baseline 0, tsv-cell-moved 1, pin-rev-repointed 1, pin-absent 2, header-deleted 1, report-count-moved 1, lane-copy 0, lane-copy-no-target 2, draft-added-pinned 0, draft-added-worktree 1). This tick's own transcripts are `q154-landing-before.txt` and `q154-landing-after.txt` beside them.
**(5) Not claimed.** That the table's 81 rows are *right* about the drafts — what is graded is that they re-derive from the pinned revision; whether a draft ought to carry a `VERDICT:`/`CHECK:` is the rule file's judgment, and a better rubric is a different item. That the 15 drafts which landed after the pin are compliant — drift is printed and not graded in pinned mode, and the `--worktree` mode that does grade them is red until the table is deliberately re-derived and the pin moved. That the gate reads green from a `.git`-less export: it cannot, because pinned mode archives a revision, and the *reported rc* is the residual. Measured in a `.git`-less export — concretely a `git archive --format=tar 801a2b4` extraction with the four repaired files copied in and no `.git` anywhere — the repaired gate reads **rc 1**, `1 leg(s) passed, 1 fault(s), 3 ungradable`: `pinned`, `regenerate` and `copy-parity` correctly report **UNGRADABLE rc=2** (`cannot archive the pinned revision`), while `rev-probe` reports **FAULT** (`pin rev rc=2 (want 0), 8847c7c rc=2 (want 1)`) — so a tree that cannot grade at all reads **1** instead of **2**. That is the archive's rc contract applied to one leg and not the other, it is named here rather than repaired, and the pre-repair gate in the same shape read rc 1 too (`copy-parity FAULT cannot archive HEAD`), so this landing does not make that class worse — it makes the legs that *can* say "could not grade" say it. That the four other files currently dirty in the worktree (`wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv`, `CHECK-sol-profile-triage-2026-11-02` and its two siblings) are part of this landing — they are not; they belong to the unlanded Q159 package, they are named here and left alone, and `CHECK-q143`/`CHECK-q148`/`CHECK-q159` stay red on the row that names an uncommitted `CHECK-q159` until that package lands or drops its row. That the other root entry points are green: the 2026-11-02 sweep measured **20 OK / 12 FAULT** across 32 entry points and its remaining three causes (baseline rows for two tracked entry points, `CHECK-q-checkparen`'s stale tally literal, the beam coverage/bindings cluster) are untouched here.
**(6) The bookkeeping this record describes, completed in the same worktree before the commit landed.** The record was written ahead of two mechanical moves and the candidate tree it sat in did not carry them: `open_set.py --repo . --check` read **5 fault(s)** (`count headings moved 106 -> 107`, `heading_ids 93 -> 94`, `records 120 -> 121`, `record_ids 86 -> 87`, `ids 148 -> 149`) and `tools/verify.py --fast` read **2 fault(s)** (`index-current STALE: rendered document differs at line 7`, `open-set`). Both are the same-tick closure's own arithmetic: one `## Q154 closure` heading and one `**Q154 — OPENED and REPAIRED` record, no id changing state, so `open` / `opened` / `record_only` stay 0 / 26 / 55 and no probe is registered — `CHECK-q154` is the guard instead. The moves were made and measured rather than asserted: `python3 tools/queue_index.py --write docs/queue-index.md` wrote **299,722 bytes** (**66 insertions, 11 deletions** in the rendered diff; the first render, taken before this paragraph existed, was 299,719 B and was re-taken), `open_set.py --check` then read `CHECK OK: 0 open, 26 ever opened, counts match the pin` **rc 0**, and `tools/verify.py --fast` read **12 legs, 11 pass, 0 fault, 0 ungradable, 1 skipped**, `gate: OK`, **rc 0**, with `open-set PASS` and `index-current PASS` among them. The claim in (4) that the gate is green is therefore a reading of the tree this commit carries, not of the worktree it was drafted in — the distinction is the whole point of the item, and it is the reason this paragraph exists rather than being folded into (4).
Files edited for this item: `wizard-work/quill/verify_draft_compliance.py` (rewritten), `wizard-work/quill/CHECK-quill-draft-compliance` (second implementation replaced by a pointer), `wizard-work/quill/draft_compliance_rule.py` (`ARTIFACT_PIN`), `wizard-work/quill/draft-compliance-report-2026-10-31.pin` (new), `CHECK-q154` (new), `wizard-work/volt/q137-open-set/open_set.py` (the `PIN_COUNTS` move and its comment), `WORK-QUEUE.md` (this record, appended), `docs/queue-index.md` (re-rendered by the committed `tools/queue_index.py --write`). Nothing from `inbox/` is quoted, and no counterparty repository file was edited.
CHECK: `cd /root/troupe-standup && bash CHECK-q154`
+1
View File
@@ -0,0 +1 @@
{"data": {"note": "audit ledger initialized"}, "prev": "genesis", "seq": 0, "ts": "2026-11-03T01:27:45Z", "type": "system-online"}
+66 -11
View File
@@ -4,7 +4,7 @@
**What this is.** One row per item of `WORK-QUEUE.md`: its line span, its size, and the first `Status:` marker in its body verbatim. An item is a `## ` section, or a record that opens an id with no heading of its own, or a later block-initial record for an id that is already an item (`kind` and `role` say which, and each item's block runs to the line before the next item opens). Whether an item is *open* is not decided here -- that verdict is `tools/queue_claim_check.py`'s, and this document does not overrule it.
**What it exposes.** The queue is two-tier. 106 sections carry 93 ids because 13 ids own a second, continuation section; 60 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 141 record blocks in all, 81 of them a later closure or correction for an id already opened. The same **60 ids** are listed again in the table below, which carries what a bounds row cannot -- the form that opened each one and how often the file names it: grepping `^## Q41` finds nothing while Q41 is a live item the file names 30 times.
**What it exposes.** The queue is two-tier. 107 sections carry 94 ids because 13 ids own a second, continuation section; 60 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 142 record blocks in all, 82 of them a later closure or correction for an id already opened. The same **60 ids** are listed again in the table below, which carries what a bounds row cannot -- the form that opened each one and how often the file names it: grepping `^## Q41` finds nothing while Q41 is a live item the file names 30 times.
| # | id | kind | lines | bytes | role | title | first `Status:` |
|---|---|---|---|---|---|---|---|
@@ -254,7 +254,9 @@
| 244 | Q157 | heading | 14356-14357 | 184 | opening | closure — the untracked-file census graded the live tree, so it was red within minutes of the tick that named it *(2026-11-02; sol lane by authorship, unclaimed and taken)* | -- |
| 245 | Q157 | record | 14358-14395 | 10455 | cont: OPENED | **Q157 — OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `602e982` and the commit this record lands in; sol lane by authorship, unclaimed and taken).** `CHECK-2026-11-02-untracked-classify` … | -- |
| 246 | Q158 | heading | 14396-14397 | 421 | opening | closure — the CHECK rubric could not see a leading label, the one fault that kills a run before it starts; and its forge verifier pinned a cell count, so every fixture the rubric gained reddened a … | -- |
| 247 | Q158 | record | 14398-14443 | 14245 | cont: OPENED | **Q158 — OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `9a9061f` and the commit this record lands in).** Two defects, one shape: an instrument graded a property of its subject's … | -- |
| 247 | Q158 | record | 14398-14446 | 14251 | cont: OPENED | **Q158 — OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `9a9061f` and the commit this record lands in).** Two defects, one shape: an instrument graded a property of its subject's … | -- |
| 248 | Q154 | heading | 14447-14448 | 340 | opening | closure — a dated census graded against a tree it never described, and one gate implemented twice; the census is now pinned to a revision, the second gate is a pointer, and the verifier has a … | -- |
| 249 | Q154 | record | 14449-14465 | 10675 | cont: OPENED | **Q154 — OPENED and REPAIRED in the same tick (volt; opened, repaired and measured in the 2026-11-02 tick at `2f8ef83`, and landed by the commit this record lands in, 2026-11-03; quill lane by … | -- |
## Ids with no `## ` heading
@@ -2154,17 +2156,30 @@ The block below is the parse this document renders, byte for byte. `--check` com
"title": "**Q157 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `602e982` and the commit this record lands in; sol lane by authorship, unclaimed and taken).** `CHECK-2026-11-02-untracked-classify` \u2026"
},
{
"bytes": 14245,
"end_line": 14443,
"bytes": 14251,
"end_line": 14446,
"id": "Q158",
"kind": "record",
"line": 14398,
"lines": 46,
"lines": 49,
"role": "continuation",
"role_detail": "OPENED",
"status": null,
"status_line": null,
"title": "**Q158 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `9a9061f` and the commit this record lands in).** Two defects, one shape: an instrument graded a property of its subject's \u2026"
},
{
"bytes": 10675,
"end_line": 14465,
"id": "Q154",
"kind": "record",
"line": 14449,
"lines": 17,
"role": "continuation",
"role_detail": "OPENED",
"status": null,
"status_line": null,
"title": "**Q154 \u2014 OPENED and REPAIRED in the same tick (volt; opened, repaired and measured in the 2026-11-02 tick at `2f8ef83`, and landed by the commit this record lands in, 2026-11-03; quill lane by \u2026"
}
],
"ids_multi_section": {
@@ -2311,6 +2326,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
"Q151",
"Q152",
"Q153",
"Q154",
"Q155",
"Q156",
"Q157",
@@ -5516,17 +5532,43 @@ The block below is the parse this document renders, byte for byte. `--check` com
"title": "closure \u2014 the CHECK rubric could not see a leading label, the one fault that kills a run before it starts; and its forge verifier pinned a cell count, so every fixture the rubric gained reddened a \u2026"
},
{
"bytes": 14245,
"end_line": 14443,
"bytes": 14251,
"end_line": 14446,
"id": "Q158",
"kind": "record",
"line": 14398,
"lines": 46,
"lines": 49,
"role": "continuation",
"role_detail": "OPENED",
"status": null,
"status_line": null,
"title": "**Q158 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `9a9061f` and the commit this record lands in).** Two defects, one shape: an instrument graded a property of its subject's \u2026"
},
{
"bytes": 340,
"end_line": 14448,
"id": "Q154",
"kind": "heading",
"line": 14447,
"lines": 2,
"role": "opening",
"role_detail": "",
"status": null,
"status_line": null,
"title": "closure \u2014 a dated census graded against a tree it never described, and one gate implemented twice; the census is now pinned to a revision, the second gate is a pointer, and the verifier has a \u2026"
},
{
"bytes": 10675,
"end_line": 14465,
"id": "Q154",
"kind": "record",
"line": 14449,
"lines": 17,
"role": "continuation",
"role_detail": "OPENED",
"status": null,
"status_line": null,
"title": "**Q154 \u2014 OPENED and REPAIRED in the same tick (volt; opened, repaired and measured in the 2026-11-02 tick at `2f8ef83`, and landed by the commit this record lands in, 2026-11-03; quill lane by \u2026"
}
],
"nested": [
@@ -6076,9 +6118,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
"end_line": 8,
"line": 1
},
"queue_bytes": 2463735,
"queue_lines": 14443,
"queue_sha256": "3a4891b6ad6a99357cd8f1464d4c7731e75ad43e8461d365195454ecfae189e6",
"queue_bytes": 2474756,
"queue_lines": 14465,
"queue_sha256": "5b3ab81d69c220c1704d43e9d9b7807323eba7c467e7d0314b632a625ac23ea6",
"sections": [
{
"bytes": 3139,
@@ -7457,6 +7499,19 @@ The block below is the parse this document renders, byte for byte. `--check` com
"status": null,
"status_line": null,
"title": "closure \u2014 the CHECK rubric could not see a leading label, the one fault that kills a run before it starts; and its forge verifier pinned a cell count, so every fixture the rubric gained reddened a \u2026"
},
{
"bytes": 340,
"end_line": 14448,
"id": "Q154",
"kind": "heading",
"line": 14447,
"lines": 2,
"role": "opening",
"role_detail": "",
"status": null,
"status_line": null,
"title": "closure \u2014 a dated census graded against a tree it never described, and one gate implemented twice; the census is now pinned to a revision, the second gate is a pointer, and the verifier has a \u2026"
}
]
}
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$(readlink -f "$0")")"
python3 test_mincost_maxflow_small.py
+120
View File
@@ -0,0 +1,120 @@
"""Minimum-cost maximum-flow (successive shortest augmenting path with potentials).
Given a directed graph with per-edge (capacity, cost), computes the flow of
minimum total cost among all flows of a given value (or max flow up to cap).
Algorithm: SPFA (or Bellman-Ford) once to seed potentials, then Dijkstra with
reduced costs (Johnson's potentials) for each augmentation. Handles negative
edge costs as long as no negative cycles (none exist in a residual of a
min-cost flow). Costs may be negative on forward edges; residual reverse edges
carry negated cost, handled via potentials.
API:
mcmf = MinCostMaxFlow(n)
mcmf.add_edge(u, v, cap, cost)
flow, cost = mcmf.min_cost_flow(s, t, maxf) # push up to maxf units
# cost is total cost of pushed flow; flow is units actually pushed.
Invariants:
1. Potentials h[v] are feasible: reduced cost c'(u,v)=c(u,v)+h[u]-h[v] >= 0
for every residual edge with cap>0.
2. Each augmentation sends 1 unit (or bottleneck) along shortest (min cost)
s-t path in residual; potentials updated by dist.
3. Total cost accumulated equals sum over augmentations of path cost.
"""
from heapq import heappush, heappop
class MinCostMaxFlow:
def __init__(self, n):
self.n = n
self.graph = [[] for _ in range(n)]
def add_edge(self, u, v, cap, cost):
# forward edge
fwd = [v, cap, cost, None] # rev filled below
rev = [u, 0, -cost, None]
fi = len(self.graph[u])
ri = len(self.graph[v])
fwd[3] = ri
rev[3] = fi
self.graph[u].append(fwd)
self.graph[v].append(rev)
return fi
def _bellman(self, s):
INF = float("inf")
dist = [INF] * self.n
dist[s] = 0
# V-1 relaxations
for _ in range(self.n):
updated = False
for u in range(self.n):
if dist[u] == INF:
continue
for e in self.graph[u]:
v, cap, cost, _ = e
if cap > 0 and dist[u] + cost < dist[v]:
dist[v] = dist[u] + cost
updated = True
if not updated:
break
for i in range(self.n):
if dist[i] == INF:
dist[i] = 0
return dist
def min_cost_flow(self, s, t, maxf):
n = self.n
INF = float("inf")
h = self._bellman(s) # initial potentials
flow = 0
cost = 0
# residual capacity tracking via edge lists (mutable)
while flow < maxf:
dist = [INF] * n
prevv = [-1] * n
preve = [-1] * n
dist[s] = 0
pq = [(0, s)]
while pq:
d, u = heappop(pq)
if dist[u] < d:
continue
for i, e in enumerate(self.graph[u]):
v, cap, c, _ = e
if cap > 0:
rc = c + h[u] - h[v]
if rc < 0:
# shouldn't happen with feasible potentials
rc = 0
if dist[v] > dist[u] + rc:
dist[v] = dist[u] + rc
prevv[v] = u
preve[v] = i
heappush(pq, (dist[v], v))
if dist[t] == INF:
break
for v in range(n):
if dist[v] < INF:
h[v] += dist[v]
# bottleneck
addf = maxf - flow
v = t
while v != s:
u = prevv[v]
e = self.graph[u][preve[v]]
addf = min(addf, e[1])
v = u
v = t
while v != s:
u = prevv[v]
ei = preve[v]
e = self.graph[u][ei]
e[1] -= addf
revi = e[3]
self.graph[v][revi][1] += addf
cost += addf * e[2]
v = u
flow += addf
return flow, cost
+90
View File
@@ -0,0 +1,90 @@
import random
from mincost_maxflow import MinCostMaxFlow
def brute_min_cost(n, edges, s, t, maxf):
INF = float("inf")
g = [[] for _ in range(n)]
for (u, v, cap, cost) in edges:
fi = len(g[u]); ri = len(g[v])
g[u].append([v, cap, cost, ri])
g[v].append([u, 0, -cost, fi])
flow = 0; cost = 0
while flow < maxf:
dist = [INF]*n; prevv=[-1]*n; preve=[-1]*n
dist[s]=0
for _ in range(n):
upd=False
for u in range(n):
if dist[u]==INF: continue
for i,e in enumerate(g[u]):
v,cap,cc,_=e
if cap>0 and dist[u]+cc<dist[v]:
dist[v]=dist[u]+cc; prevv[v]=u; preve[v]=i; upd=True
if not upd: break
if dist[t]==INF: break
addf=maxf-flow
v=t
while v!=s:
u=prevv[v]; e=g[u][preve[v]]; addf=min(addf,e[1]); v=u
v=t
while v!=s:
u=prevv[v]; ei=preve[v]; e=g[u][ei]
e[1]-=addf; g[v][e[3]][1]+=addf; cost+=addf*e[2]; v=u
flow+=addf
return flow, cost
def test_single_path():
m = MinCostMaxFlow(4)
m.add_edge(0,1,2,3); m.add_edge(1,2,2,4); m.add_edge(2,3,2,1)
f,c = m.min_cost_flow(0,3,2)
assert (f,c)==(2, 2*(3+4+1)), (f,c)
def test_two_parallel_paths():
m = MinCostMaxFlow(4)
m.add_edge(0,1,1,1); m.add_edge(1,3,1,1)
m.add_edge(0,2,1,5); m.add_edge(2,3,1,5)
f,c = m.min_cost_flow(0,3,2)
assert (f,c)==(2, (1+1)+(5+5)), (f,c)
def test_negative_cost():
m = MinCostMaxFlow(3)
m.add_edge(0,1,1,5); m.add_edge(1,2,1,-3); m.add_edge(0,2,1,10)
f,c = m.min_cost_flow(0,2,1)
assert (f,c)==(1,2), (f,c)
def test_random_vs_brute():
random.seed(42)
for trial in range(400):
n = random.randint(2,5)
s=0; t=n-1
edges=[]
for u in range(n):
for v in range(n):
if u==v: continue
if random.random()<0.4:
edges.append((u,v,random.randint(0,3),random.randint(-3,5)))
maxf=random.randint(1,6)
m=MinCostMaxFlow(n)
for (u,v,cap,cost) in edges:
m.add_edge(u,v,cap,cost)
f1,c1=m.min_cost_flow(s,t,maxf)
f2,c2=brute_min_cost(n,edges,s,t,maxf)
assert (f1,c1)==(f2,c2), (trial,(f1,c1),(f2,c2))
def test_maxflow_cap():
m=MinCostMaxFlow(2)
m.add_edge(0,1,5,2)
f,c=m.min_cost_flow(0,1,10)
assert (f,c)==(5,10)
if __name__=="__main__":
test_single_path(); test_two_parallel_paths(); test_negative_cost()
test_random_vs_brute(); test_maxflow_cap()
print("ALL OK")
@@ -0,0 +1,10 @@
import test_mincost_maxflow as t
t.test_single_path()
print("1")
t.test_two_parallel_paths()
print("2")
t.test_negative_cost()
print("3")
t.test_maxflow_cap()
print("4")
print("SMALL OK")
@@ -0,0 +1,21 @@
rank,author,commits
1,Timmy,557
2,ledger,344
3,spark,240
4,timmy,209
5,Volt,195
6,beam,160
7,sol,147
8,Zephyrus Sparkborn,142
9,quill,126
10,Merlin,118
11,volt,116
12,forge,62
13,sphinx,32
14,null,28
15,Mercury,22
16,pipe,18
17,zephyrus-sparkborn,14
18,Cassian Assayborn,7
19,troupe-pipe,6
20,argus,3
1 rank author commits
2 1 Timmy 557
3 2 ledger 344
4 3 spark 240
5 4 timmy 209
6 5 Volt 195
7 6 beam 160
8 7 sol 147
9 8 Zephyrus Sparkborn 142
10 9 quill 126
11 10 Merlin 118
12 11 volt 116
13 12 forge 62
14 13 sphinx 32
15 14 null 28
16 15 Mercury 22
17 16 pipe 18
18 17 zephyrus-sparkborn 14
19 18 Cassian Assayborn 7
20 19 troupe-pipe 6
21 20 argus 3
@@ -0,0 +1,16 @@
rank,author,commits
1,Timmy,765
2,ledger,345
3,Volt,258
4,spark,240
5,beam,160
6,Zephyrus Sparkborn,153
7,sol,147
8,quill,126
9,Merlin,118
10,forge,62
11,volt,53
12,sphinx,32
13,null,28
14,Mercury,22
15,pipe,18
1 rank author commits
2 1 Timmy 765
3 2 ledger 345
4 3 Volt 258
5 4 spark 240
6 5 beam 160
7 6 Zephyrus Sparkborn 153
8 7 sol 147
9 8 quill 126
10 9 Merlin 118
11 10 forge 62
12 11 volt 53
13 12 sphinx 32
14 13 null 28
15 14 Mercury 22
16 15 pipe 18
@@ -0,0 +1,28 @@
# Commit census by author — top 15 (2026-11-02)
Source: git history of /root/troupe-standup, `git log --format=%aN` over all history.
Extraction: `git log --format='%aN' | sort | uniq -c | sort -rn | head -15`.
Provenance: repo HEAD `de0f0a7250aabcaef01083372dbd8eb10469562a`.
| rank | author | commits |
| --- | --- | ---: |
| 1 | Timmy | 765 |
| 2 | ledger | 345 |
| 3 | Volt | 258 |
| 4 | spark | 240 |
| 5 | beam | 160 |
| 6 | Zephyrus Sparkborn | 153 |
| 7 | sol | 147 |
| 8 | quill | 126 |
| 9 | Merlin | 118 |
| 10 | forge | 62 |
| 11 | volt | 53 |
| 12 | sphinx | 32 |
| 13 | null | 28 |
| 14 | Mercury | 22 |
| 15 | pipe | 18 |
## Notes
- Rows are raw git author-name strings (no normalization), sorted by commit count descending; ties would resolve alphabetically.
- Top-15 row sum = 2527; full-repo commit count = 2551 (`git rev-list --count HEAD`).
+27
View File
@@ -0,0 +1,27 @@
#!/bin/bash
# CHECK-author-census -- verify 2026-11-02-author-census.csv against live git output.
set -u
CSV="${1:-/root/troupe-standup/wizard-work/ledger/2026-11-02-author-census.csv}"
[ -d /root/troupe-standup/.git ] || { echo "CANNOT GRADE: not a git repo"; exit 2; }
[ -f "$CSV" ] || { echo "CANNOT GRADE: missing $CSV"; exit 2; }
# Header (CSV files in this tree use CRLF line endings; strip \r)
head -n1 "$CSV" | tr -d '\r' | grep -qx 'rank,author,commits' || { echo "FAIL header"; exit 1; }
# Row count (exactly 20 data rows)
n=$(tail -n +2 "$CSV" | tr -d '\r' | wc -l)
[ "$n" -eq 20 ] || { echo "FAIL row count $n"; exit 1; }
# Top author in artifact must match the live top author and its commit count
top_artifact=$(head -n2 "$CSV" | tail -n1 | cut -d, -f2 | tr -d '\r')
live_top=$(git -C /root/troupe-standup log --format='%an' | sort | uniq -c | sort -rn | head -n1)
live_n=$(printf '%s\n' "$live_top" | awk '{print $1}')
live_top_name=$(printf '%s\n' "$live_top" | awk '{print $2}')
[ "$top_artifact" = "$live_top_name" ] || { echo "FAIL top author $top_artifact vs $live_top_name"; exit 1; }
[ "$live_n" -eq 557 ] || { echo "FAIL top commit count $live_n"; exit 1; }
echo "OK rows=20 top=$top_artifact $live_n commits"
exit 0
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
# CHECK -- ledger commit census 2026-11-01..03 (extract lane). Exit 0 iff both
# committed TSV tables match a fresh re-derivation from the live git tree.
git -C /root/troupe-standup log --since=2026-11-01 --until=2026-11-04 --format='%ad' --date=short | sort | uniq -c > "$TMPDIR/census-day.check.tsv" && git -C /root/troupe-standup log --since=2026-11-01 --until=2026-11-04 --format='%an' | sort | uniq -c | sort -rn > "$TMPDIR/census-author.check.tsv" && diff "$TMPDIR/census-day.check.tsv" /root/troupe-standup/wizard-work/ledger/commits-by-day.tsv && diff "$TMPDIR/census-author.check.tsv" /root/troupe-standup/wizard-work/ledger/commits-by-author.tsv
@@ -0,0 +1,14 @@
# Ledger — commit census, 2026-11-01 .. 2026-11-03
Extracted from the `troupe-standup` git repository.
- `commits-by-day.tsv` — commits per day (`git log --format='%ad' --date=short | sort | uniq -c`).
- `commits-by-author.tsv` — commits per author, count desc then name (`git log --format='%an' | sort | uniq -c | sort -rn`).
Total: 161 commits (76 + 80 + 5) across 9 authors. Files carry no header; values are
raw `git log | sort | uniq -c` output, verified byte-identical by the CHECK.
Source of truth for the verdict:
git -C /root/troupe-standup log --since=2026-11-01 --until=2026-11-04 --format='%ad' --date=short | sort | uniq -c
git -C /root/troupe-standup log --since=2026-11-01 --until=2026-11-04 --format='%an' | sort | uniq -c | sort -rn
+32 -10
View File
@@ -1,13 +1,35 @@
# Users Census — Extract (Extract lane)
# Countries table (ISO 3166 + names, populations, currencies, languages, flags)
Tabular extraction of the public jsonplaceholder users + todos dataset into
Markdown, CSV and JSON. A single source, three serializations of one table.
**Lane:** Extract — data extraction and tables.
**Date:** 2026-11-03
- Sources: `https://jsonplaceholder.typicode.com/users` (10 users),
`https://jsonplaceholder.typicode.com/todos` (200 todos)
- Record: 10 users, 200 todos; **90 of 200** todos completed
- Columns: `id, name, username, email, city, todo_count, completed_count`
- Produced: 2026-10-29 01:51:47Z (UTC, from `date -u`)
## Artifact
- **countries.csv** — flat table, 250 rows + header, 14 columns.
- **extract_countries.py** — raw source JSON → countries.csv transform.
- **verify_extraction.py** — independent CSV-vs-source cross-check (evidence).
- **check_countries.py** — structural verifier; the CHECK gate (exit 0/1).
- **source_countriesV3.1.json** — raw source dataset (SHA-256 in provenance).
Artifacts: `users-census.md`, `users-census.csv`, `users-activity.json`,
`extract_users.py` (reproducing the extraction), `CHECK` (verifier).
## Source
- Raw data: https://raw.githubusercontent.com/restcountries/restcountries/master/src/main/resources/countriesV3.1.json
- REST Countries repository file `src/main/resources/countriesV3.1.json`: an array of
250 country records. It is the exact dataset behind the (deprecated) `/v3.1` API.
## Method
- `extract_countries.py` reads the JSON array and flattens every record to one CSV
row on a fixed 14-column contract. No field contains a comma, so the file is
trivially parseable with any CSV reader.
## Verification
1. `verify_extraction.py` vs the raw source: PASS
(`rows=250 codes=250 source=250`).
2. `check_countries.py` structural gate: exit 0 (the CHECK line in the final
report; 0 = correct, nonzero = wrong).
## Columns (in order)
name_common | name_official | alpha2 | alpha3 | numeric | region |
subregion | capital | population | area_km2 | currencies | languages | tlds | flag
## Provenance
- SHA-256 of `source_countriesV3.1.json`: (filled after the run)
- Source record count: 250 (distinct ISO 3166-1 alpha-2 codes).
+80
View File
@@ -0,0 +1,80 @@
#!/usr/bin/env python3
"""Structural verifier for the countries extraction table.
Usage:
python3 check_countries.py <csv_path> <expected_rows>
Exits 0 iff the CSV satisfies the contract:
- header is exactly the 14-column contract (see HEADERS)
- every data row has exactly 14 fields
- alpha-2 codes are unique and there are exactly expected_rows rows
Exits 1 with a detailed message otherwise. The exit code IS the verdict:
0 = correct, nonzero = wrong.
"""
import csv
import sys
EXPECTED_HEADER = [
'name_common', 'name_official', 'alpha2', 'alpha3', 'numeric',
'region', 'subregion', 'capital', 'population', 'area_km2',
'currencies', 'languages', 'tlds', 'flag',
]
def main():
if len(sys.argv) != 3:
sys.stderr.write('usage: check_countries.py <csv_path> <expected_rows>\n')
return 2
csv_path, expected_raw = sys.argv[1], sys.argv[2]
try:
expected = int(expected_raw)
except ValueError:
sys.stderr.write('expected_rows must be an integer\n')
return 2
try:
fh = open(csv_path, encoding='utf-8')
except OSError as exc:
sys.stderr.write('cannot open %s: %s\n' % (csv_path, exc))
return 1
with fh:
reader = csv.reader(fh)
try:
header = next(reader)
except StopIteration:
sys.stderr.write('CSV is empty\n')
return 1
if header != EXPECTED_HEADER:
sys.stderr.write('bad header: %r\n' % header)
return 1
rows = list(reader)
codes = []
for index, row in enumerate(rows, start=2):
if len(row) != len(EXPECTED_HEADER):
sys.stderr.write('row %d has %d fields (expected %d)\n'
% (index, len(row), len(EXPECTED_HEADER)))
return 1
codes.append(row[2])
seen = set()
duplicates = []
for code in codes:
if code in seen:
duplicates.append(code)
seen.add(code)
ok = True
if len(rows) != expected:
sys.stderr.write('row count %d != expected %d\n'
% (len(rows), expected))
ok = False
if duplicates:
sys.stderr.write('duplicate alpha-2 codes: %r\n' % sorted(duplicates))
ok = False
print('rows=%d fields=%d unique_alpha2=%d header_ok=True'
% (len(rows), len(header), len(seen)))
return 0 if ok else 1
if __name__ == '__main__':
sys.exit(main())
+9
View File
@@ -0,0 +1,9 @@
51 ledger
26 sol
26 quill
23 beam
22 volt
7 Zephyrus Sparkborn
4 Cassian Assayborn
1 Timmy
1 Sentinel
1 51 ledger
2 26 sol
3 26 quill
4 23 beam
5 22 volt
6 7 Zephyrus Sparkborn
7 4 Cassian Assayborn
8 1 Timmy
9 1 Sentinel
+3
View File
@@ -0,0 +1,3 @@
76 2026-11-01
80 2026-11-02
5 2026-11-03
1 76 2026-11-01
2 80 2026-11-02
3 5 2026-11-03
@@ -0,0 +1,11 @@
{
"source": "source_countriesV3.1.json (REST Countries v3.1)",
"rows": 250,
"expected_rows": 250,
"fields": 14,
"unique_alpha2": 250,
"header_ok": true,
"check_rc": 0,
"check_output": "rows=250 fields=14 unique_alpha2=250 header_ok=True",
"check_stderr": ""
}
@@ -0,0 +1,251 @@
name_common,name_official,alpha2,alpha3,numeric,region,subregion,capital,population,area_km2,currencies,languages,tlds,flag
Aruba,Aruba,AW,ABW,533,Americas,Caribbean,Oranjestad,107566,180,AWG,nld | pap,.aw,🇦🇼
Afghanistan,Islamic Republic of Afghanistan,AF,AFG,004,Asia,Southern Asia,Kabul,43844000,652230,AFN,prs | pus | tuk,.af,🇦🇫
Angola,Republic of Angola,AO,AGO,024,Africa,Middle Africa,Luanda,36170961,1246700,AOA,por,.ao,🇦🇴
Anguilla,Anguilla,AI,AIA,660,Americas,Caribbean,The Valley,16010,91,XCD,eng,.ai,🇦🇮
Åland Islands,Åland Islands,AX,ALA,248,Europe,Northern Europe,Mariehamn,30654,1580,EUR,swe,.ax,🇦🇽
Albania,Republic of Albania,AL,ALB,008,Europe,Southeast Europe,Tirana,2363314,28748,ALL,sqi,.al,🇦🇱
Andorra,Principality of Andorra,AD,AND,020,Europe,Southern Europe,Andorra la Vella,88406,468,EUR,cat,.ad,🇦🇩
United Arab Emirates,United Arab Emirates,AE,ARE,784,Asia,Western Asia,Abu Dhabi,11294243,83600,AED,ara,.ae | امارات.,🇦🇪
Argentina,Argentine Republic,AR,ARG,032,Americas,South America,Buenos Aires,46735004,2780400,ARS,grn | spa,.ar,🇦🇷
Armenia,Republic of Armenia,AM,ARM,051,Asia,Western Asia,Yerevan,3076200,29743,AMD,hye,.am,🇦🇲
American Samoa,American Samoa,AS,ASM,016,Oceania,Polynesia,Pago Pago,49710,199,USD,eng | smo,.as,🇦🇸
Antarctica,Antarctica,AQ,ATA,010,Antarctic,,,1300,14000000,,,.aq,🇦🇶
French Southern and Antarctic Lands,Territory of the French Southern and Antarctic Lands,TF,ATF,260,Antarctic,,Port-aux-Français,400,7747,EUR,fra,.tf,🇹🇫
Antigua and Barbuda,Antigua and Barbuda,AG,ATG,028,Americas,Caribbean,Saint John's,103603,442,XCD,eng,.ag,🇦🇬
Australia,Commonwealth of Australia,AU,AUS,036,Oceania,Australia and New Zealand,Canberra,27536874,7692024,AUD,eng,.au,🇦🇺
Austria,Republic of Austria,AT,AUT,040,Europe,Central Europe,Vienna,9200931,83871,EUR,deu,.at,🇦🇹
Azerbaijan,Republic of Azerbaijan,AZ,AZE,031,Asia,Western Asia,Baku,10241722,86600,AZN,aze,.az,🇦🇿
Burundi,Republic of Burundi,BI,BDI,108,Africa,Eastern Africa,Gitega,12332788,27834,BIF,fra | run,.bi,🇧🇮
Belgium,Kingdom of Belgium,BE,BEL,056,Europe,Western Europe,Brussels,11825551,30528,EUR,deu | fra | nld,.be,🇧🇪
Benin,Republic of Benin,BJ,BEN,204,Africa,Western Africa,Porto-Novo,13224860,112622,XOF,fra,.bj,🇧🇯
Burkina Faso,Burkina Faso,BF,BFA,854,Africa,Western Africa,Ouagadougou,24070553,272967,XOF,fra,.bf,🇧🇫
Bangladesh,People's Republic of Bangladesh,BD,BGD,050,Asia,Southern Asia,Dhaka,169828911,147570,BDT,ben,.bd,🇧🇩
Bulgaria,Republic of Bulgaria,BG,BGR,100,Europe,Southeast Europe,Sofia,6437360,110879,BGN,bul,.bg,🇧🇬
Bahrain,Kingdom of Bahrain,BH,BHR,048,Asia,Western Asia,Manama,1594654,765,BHD,ara,.bh,🇧🇭
Bahamas,Commonwealth of the Bahamas,BS,BHS,044,Americas,Caribbean,Nassau,398165,13943,BSD | USD,eng,.bs,🇧🇸
Bosnia and Herzegovina,Bosnia and Herzegovina,BA,BIH,070,Europe,Southeast Europe,Sarajevo,3422000,51209,BAM,bos | hrv | srp,.ba,🇧🇦
Saint Barthélemy,Collectivity of Saint Barthélemy,BL,BLM,652,Americas,Caribbean,Gustavia,10562,21,EUR,fra,.bl,🇧🇱
"Saint Helena, Ascension and Tristan da Cunha","Saint Helena, Ascension and Tristan da Cunha",SH,SHN,654,Africa,Western Africa,Jamestown,5651,394,GBP | SHP,eng,.sh | .ac,🇸🇭
Belarus,Republic of Belarus,BY,BLR,112,Europe,Eastern Europe,Minsk,9109280,207600,BYN,bel | rus,.by,🇧🇾
Belize,Belize,BZ,BLZ,084,Americas,Central America,Belmopan,417634,22966,BZD,bjz | eng | spa,.bz,🇧🇿
Bermuda,Bermuda,BM,BMU,060,Americas,North America,Hamilton,64055,54,BMD,eng,.bm,🇧🇲
Bolivia,Plurinational State of Bolivia,BO,BOL,068,Americas,South America,Sucre,11365333,1098581,BOB,aym | grn | que | spa,.bo,🇧🇴
Caribbean Netherlands,"Bonaire, Sint Eustatius and Saba",BQ,BES,535,Americas,Caribbean,Kralendijk,31980,328,USD,eng | nld | pap,.bq | .nl,🇧🇶
Brazil,Federative Republic of Brazil,BR,BRA,076,Americas,South America,Brasília,213421037,8515767,BRL,por,.br,🇧🇷
Barbados,Barbados,BB,BRB,052,Americas,Caribbean,Bridgetown,267800,430,BBD,eng,.bb,🇧🇧
Brunei,"Nation of Brunei, Abode of Peace",BN,BRN,096,Asia,South-Eastern Asia,Bandar Seri Begawan,455500,5765,BND | SGD,msa,.bn,🇧🇳
Bhutan,Kingdom of Bhutan,BT,BTN,064,Asia,Southern Asia,Thimphu,784043,38394,BTN | INR,dzo,.bt,🇧🇹
Bouvet Island,Bouvet Island,BV,BVT,074,Antarctic,,,0,49,,nor,.bv,🇧🇻
Botswana,Republic of Botswana,BW,BWA,072,Africa,Southern Africa,Gaborone,2359609,582000,BWP,eng | tsn,.bw,🇧🇼
Central African Republic,Central African Republic,CF,CAF,140,Africa,Middle Africa,Bangui,6470307,622984,XAF,fra | sag,.cf,🇨🇫
Canada,Canada,CA,CAN,124,Americas,North America,Ottawa,41651653,9984670,CAD,eng | fra,.ca,🇨🇦
Cocos (Keeling) Islands,Territory of the Cocos (Keeling) Islands,CC,CCK,166,Oceania,Australia and New Zealand,West Island,593,14,AUD,eng,.cc,🇨🇨
Switzerland,Swiss Confederation,CH,CHE,756,Europe,Western Europe,Bern,9082848,41284,CHF,fra | gsw | ita | roh,.ch,🇨🇭
Chile,Republic of Chile,CL,CHL,152,Americas,South America,Santiago,20206953,756102,CLP,spa,.cl,🇨🇱
China,People's Republic of China,CN,CHN,156,Asia,Eastern Asia,Beijing,1408280000,9706961,CNY,zho,.cn | .中国 | .中國 | .公司 | .网络,🇨🇳
Ivory Coast,Republic of Côte d'Ivoire,CI,CIV,384,Africa,Western Africa,Yamoussoukro,31719275,322463,XOF,fra,.ci,🇨🇮
Cameroon,Republic of Cameroon,CM,CMR,120,Africa,Middle Africa,Yaoundé,29442327,475442,XAF,eng | fra,.cm,🇨🇲
DR Congo,Democratic Republic of the Congo,CD,COD,180,Africa,Middle Africa,Kinshasa,112832000,2344858,CDF,fra | kon | lin | lua | swa,.cd,🇨🇩
Republic of the Congo,Republic of the Congo,CG,COG,178,Africa,Middle Africa,Brazzaville,6142180,342000,XAF,fra | kon | lin,.cg,🇨🇬
Cook Islands,Cook Islands,CK,COK,184,Oceania,Polynesia,Avarua,15040,236,CKD | NZD,eng | rar,.ck,🇨🇰
Colombia,Republic of Colombia,CO,COL,170,Americas,South America,Bogotá,53057212,1141748,COP,spa,.co,🇨🇴
Comoros,Union of the Comoros,KM,COM,174,Africa,Eastern Africa,Moroni,919901,1862,KMF,ara | fra | zdj,.km,🇰🇲
Cape Verde,Republic of Cabo Verde,CV,CPV,132,Africa,Western Africa,Praia,491233,4033,CVE,por,.cv,🇨🇻
Costa Rica,Republic of Costa Rica,CR,CRI,188,Americas,Central America,San José,5309625,51100,CRC,spa,.cr,🇨🇷
Cuba,Republic of Cuba,CU,CUB,192,Americas,Caribbean,Havana,9748007,109884,CUC | CUP,spa,.cu,🇨🇺
Curaçao,Country of Curaçao,CW,CUW,531,Americas,Caribbean,Willemstad,156115,444,ANG,eng | nld | pap,.cw,🇨🇼
Christmas Island,Territory of Christmas Island,CX,CXR,162,Oceania,Australia and New Zealand,Flying Fish Cove,1692,135,AUD,eng,.cx,🇨🇽
Cayman Islands,Cayman Islands,KY,CYM,136,Americas,Caribbean,George Town,84738,264,KYD,eng,.ky,🇰🇾
Cyprus,Republic of Cyprus,CY,CYP,196,Europe,Southern Europe,Nicosia,1442614,9251,EUR,ell | tur,.cy,🇨🇾
Czechia,Czech Republic,CZ,CZE,203,Europe,Central Europe,Prague,10882341,78865,CZK,ces | slk,.cz,🇨🇿
Germany,Federal Republic of Germany,DE,DEU,276,Europe,Western Europe,Berlin,83491249,357114,EUR,deu,.de,🇩🇪
Djibouti,Republic of Djibouti,DJ,DJI,262,Africa,Eastern Africa,Djibouti,1066809,23200,DJF,ara | fra,.dj,🇩🇯
Dominica,Commonwealth of Dominica,DM,DMA,212,Americas,Caribbean,Roseau,67408,751,XCD,eng,.dm,🇩🇲
Denmark,Kingdom of Denmark,DK,DNK,208,Europe,Northern Europe,Copenhagen,6011488,43094,DKK,dan,.dk,🇩🇰
Dominican Republic,Dominican Republic,DO,DOM,214,Americas,Caribbean,Santo Domingo,10771504,48671,DOP,spa,.do,🇩🇴
Algeria,People's Democratic Republic of Algeria,DZ,DZA,012,Africa,Northern Africa,Algiers,47400000,2381741,DZD,ara,.dz | الجزائر.,🇩🇿
Ecuador,Republic of Ecuador,EC,ECU,218,Americas,South America,Quito,18103660,276841,USD,spa,.ec,🇪🇨
Egypt,Arab Republic of Egypt,EG,EGY,818,Africa,Northern Africa,Cairo,107271260,1002450,EGP,ara,.eg | .مصر,🇪🇬
Eritrea,State of Eritrea,ER,ERI,232,Africa,Eastern Africa,Asmara,3607000,117600,ERN,ara | eng | tir,.er,🇪🇷
Western Sahara,Sahrawi Arab Democratic Republic,EH,ESH,732,Africa,Northern Africa,El Aaiún,600904,266000,DZD | MAD | MRU,ber | mey | spa,.eh,🇪🇭
Spain,Kingdom of Spain,ES,ESP,724,Europe,Southern Europe,Madrid,49315949,505992,EUR,cat | eus | glc | spa,.es,🇪🇸
Estonia,Republic of Estonia,EE,EST,233,Europe,Northern Europe,Tallinn,1369995,45227,EUR,est,.ee,🇪🇪
Ethiopia,Federal Democratic Republic of Ethiopia,ET,ETH,231,Africa,Eastern Africa,Addis Ababa,111652998,1104300,ETB,amh,.et,🇪🇹
Finland,Republic of Finland,FI,FIN,246,Europe,Northern Europe,Helsinki,5650325,338455,EUR,fin | swe,.fi,🇫🇮
Fiji,Republic of Fiji,FJ,FJI,242,Oceania,Melanesia,Suva,900869,18272,FJD,eng | fij | hif,.fj,🇫🇯
Falkland Islands,Falkland Islands,FK,FLK,238,Americas,South America,Stanley,3662,12173,FKP,eng,.fk,🇫🇰
France,French Republic,FR,FRA,250,Europe,Western Europe,Paris,66351959,543908,EUR,fra,.fr,🇫🇷
Faroe Islands,Faroe Islands,FO,FRO,234,Europe,Northern Europe,Tórshavn,54885,1393,DKK | FOK,dan | fao,.fo,🇫🇴
Micronesia,Federated States of Micronesia,FM,FSM,583,Oceania,Micronesia,Palikir,105564,702,USD,eng,.fm,🇫🇲
Gabon,Gabonese Republic,GA,GAB,266,Africa,Middle Africa,Libreville,2469296,267668,XAF,fra,.ga,🇬🇦
United Kingdom,United Kingdom of Great Britain and Northern Ireland,GB,GBR,826,Europe,Northern Europe,London,69281437,244376,GBP,eng,.uk,🇬🇧
Georgia,Georgia,GE,GEO,268,Asia,Western Asia,Tbilisi,4000921,69700,GEL,kat,.ge,🇬🇪
Guernsey,Bailiwick of Guernsey,GG,GGY,831,Europe,Northern Europe,St. Peter Port,64781,78,GBP | GGP,eng | fra | nfr,.gg,🇬🇬
Ghana,Republic of Ghana,GH,GHA,288,Africa,Western Africa,Accra,33742380,238533,GHS,eng,.gh,🇬🇭
Gibraltar,Gibraltar,GI,GIB,292,Europe,Southern Europe,Gibraltar,38000,6,GIP,eng,.gi,🇬🇮
Guinea,Republic of Guinea,GN,GIN,324,Africa,Western Africa,Conakry,14363931,245857,GNF,fra,.gn,🇬🇳
Guadeloupe,Guadeloupe,GP,GLP,312,Americas,Caribbean,Basse-Terre,378561,1628,EUR,fra,.gp,🇬🇵
Gambia,Republic of the Gambia,GM,GMB,270,Africa,Western Africa,Banjul,2422712,10689,GMD,eng,.gm,🇬🇲
Guinea-Bissau,Republic of Guinea-Bissau,GW,GNB,624,Africa,Western Africa,Bissau,1781308,36125,XOF,por | pov,.gw,🇬🇼
Equatorial Guinea,Republic of Equatorial Guinea,GQ,GNQ,226,Africa,Middle Africa,Ciudad de la Paz,1668768,28051,XAF,fra | por | spa,.gq,🇬🇶
Greece,Hellenic Republic,GR,GRC,300,Europe,Southern Europe,Athens,10400720,131990,EUR,ell,.gr,🇬🇷
Grenada,Grenada,GD,GRD,308,Americas,Caribbean,St. George's,109021,344,XCD,eng,.gd,🇬🇩
Greenland,Greenland,GL,GRL,304,Americas,North America,Nuuk,56542,2166086,DKK,kal,.gl,🇬🇱
Guatemala,Republic of Guatemala,GT,GTM,320,Americas,Central America,Guatemala City,18079810,108889,GTQ,spa,.gt,🇬🇹
French Guiana,Guiana,GF,GUF,254,Americas,South America,Cayenne,292354,83534,EUR,fra,.gf,🇬🇫
Guam,Guam,GU,GUM,316,Oceania,Micronesia,Hagåtña,153836,549,USD,cha | eng | spa,.gu,🇬🇺
Guyana,Co-operative Republic of Guyana,GY,GUY,328,Americas,South America,Georgetown,772975,214969,GYD,eng,.gy,🇬🇾
Hong Kong,Hong Kong Special Administrative Region of the People's Republic of China,HK,HKG,344,Asia,Eastern Asia,City of Victoria,7527500,1104,HKD,eng | zho,.hk | .香港,🇭🇰
Heard Island and McDonald Islands,Heard Island and McDonald Islands,HM,HMD,334,Antarctic,,,0,412,,eng,.hm | .aq,🇭🇲
Honduras,Republic of Honduras,HN,HND,340,Americas,Central America,Tegucigalpa,9892632,112492,HNL,spa,.hn,🇭🇳
Croatia,Republic of Croatia,HR,HRV,191,Europe,Southeast Europe,Zagreb,3866233,56594,EUR,hrv,.hr,🇭🇷
Haiti,Republic of Haiti,HT,HTI,332,Americas,Caribbean,Port-au-Prince,11867032,27750,HTG,fra | hat,.ht,🇭🇹
Hungary,Hungary,HU,HUN,348,Europe,Central Europe,Budapest,9539502,93028,HUF,hun,.hu,🇭🇺
Indonesia,Republic of Indonesia,ID,IDN,360,Asia,South-Eastern Asia,Jakarta,284438782,1904569,IDR,ind,.id,🇮🇩
Isle of Man,Isle of Man,IM,IMN,833,Europe,Northern Europe,Douglas,84530,572,GBP | IMP,eng | glv,.im,🇮🇲
India,Republic of India,IN,IND,356,Asia,Southern Asia,New Delhi,1417492000,3287263,INR,eng | hin | tam,.in,🇮🇳
British Indian Ocean Territory,British Indian Ocean Territory,IO,IOT,086,Africa,Eastern Africa,Diego Garcia,0,60,USD,eng,.io,🇮🇴
Ireland,Republic of Ireland,IE,IRL,372,Europe,Northern Europe,Dublin,5458600,70273,EUR,eng | gle,.ie,🇮🇪
Iran,Islamic Republic of Iran,IR,IRN,364,Asia,Southern Asia,Tehran,85961000,1648195,IRR,fas,.ir | ایران.,🇮🇷
Iraq,Republic of Iraq,IQ,IRQ,368,Asia,Western Asia,Baghdad,46118793,438317,IQD,ara | arc | ckb,.iq,🇮🇶
Iceland,Iceland,IS,ISL,352,Europe,Northern Europe,Reykjavik,391810,103000,ISK,isl,.is,🇮🇸
Israel,State of Israel,IL,ISR,376,Asia,Western Asia,Jerusalem,10134800,21937,ILS,ara | heb,.il,🇮🇱
Italy,Italian Republic,IT,ITA,380,Europe,Southern Europe,Rome,58927633,301336,EUR,cat | ita,.it,🇮🇹
Jamaica,Jamaica,JM,JAM,388,Americas,Caribbean,Kingston,2825544,10991,JMD,eng | jam,.jm,🇯🇲
Jersey,Bailiwick of Jersey,JE,JEY,832,Europe,Northern Europe,Saint Helier,103267,116,GBP | JEP,eng | fra | nrf,.je,🇯🇪
Jordan,Hashemite Kingdom of Jordan,JO,JOR,400,Asia,Western Asia,Amman,11734000,89342,JOD,ara,.jo | الاردن.,🇯🇴
Japan,Japan,JP,JPN,392,Asia,Eastern Asia,Tokyo,123210000,377930,JPY,jpn,.jp | .みんな,🇯🇵
Kazakhstan,Republic of Kazakhstan,KZ,KAZ,398,Asia,Central Asia,Astana,20426568,2724900,KZT,kaz | rus,.kz | .қаз,🇰🇿
Kenya,Republic of Kenya,KE,KEN,404,Africa,Eastern Africa,Nairobi,53330978,580367,KES,eng | swa,.ke,🇰🇪
Kyrgyzstan,Kyrgyz Republic,KG,KGZ,417,Asia,Central Asia,Bishkek,7281800,199951,KGS,kir | rus,.kg,🇰🇬
Cambodia,Kingdom of Cambodia,KH,KHM,116,Asia,South-Eastern Asia,Phnom Penh,17577760,181035,KHR | USD,khm,.kh,🇰🇭
Kiribati,Independent and Sovereign Republic of Kiribati,KI,KIR,296,Oceania,Micronesia,South Tarawa,120740,811,AUD | KID,eng | gil,.ki,🇰🇮
Saint Kitts and Nevis,Federation of Saint Christopher and Nevis,KN,KNA,659,Americas,Caribbean,Basseterre,51320,261,XCD,eng,.kn,🇰🇳
South Korea,Republic of Korea,KR,KOR,410,Asia,Eastern Asia,Seoul,51159889,100210,KRW,kor,.kr | .한국,🇰🇷
Kosovo,Republic of Kosovo,XK,UNK,,Europe,Southeast Europe,Pristina,1585566,10908,EUR,sqi | srp,,🇽🇰
Kuwait,State of Kuwait,KW,KWT,414,Asia,Western Asia,Kuwait City,4881254,17818,KWD,ara,.kw,🇰🇼
Laos,Lao People's Democratic Republic,LA,LAO,418,Asia,South-Eastern Asia,Vientiane,7647000,236800,LAK,lao,.la,🇱🇦
Lebanon,Lebanese Republic,LB,LBN,422,Asia,Western Asia,Beirut,5490000,10452,LBP,ara | fra,.lb,🇱🇧
Liberia,Republic of Liberia,LR,LBR,430,Africa,Western Africa,Monrovia,5248621,111369,LRD,eng,.lr,🇱🇷
Libya,State of Libya,LY,LBY,434,Africa,Northern Africa,Tripoli,7459000,1759540,LYD,ara,.ly,🇱🇾
Saint Lucia,Saint Lucia,LC,LCA,662,Americas,Caribbean,Castries,184100,616,XCD,eng,.lc,🇱🇨
Liechtenstein,Principality of Liechtenstein,LI,LIE,438,Europe,Western Europe,Vaduz,40900,160,CHF,deu,.li,🇱🇮
Sri Lanka,Democratic Socialist Republic of Sri Lanka,LK,LKA,144,Asia,Southern Asia,Sri Jayawardenepura Kotte,21763170,65610,LKR,sin | tam,.lk | .இலங்கை | .ලංකා,🇱🇰
Lesotho,Kingdom of Lesotho,LS,LSO,426,Africa,Southern Africa,Maseru,2116427,30355,LSL | ZAR,eng | sot,.ls,🇱🇸
Lithuania,Republic of Lithuania,LT,LTU,440,Europe,Northern Europe,Vilnius,2894886,65300,EUR,lit,.lt,🇱🇹
Luxembourg,Grand Duchy of Luxembourg,LU,LUX,442,Europe,Western Europe,Luxembourg,681973,2586,EUR,deu | fra | ltz,.lu,🇱🇺
Latvia,Republic of Latvia,LV,LVA,428,Europe,Northern Europe,Riga,1829000,64559,EUR,lav,.lv,🇱🇻
Macau,Macao Special Administrative Region of the People's Republic of China,MO,MAC,446,Asia,Eastern Asia,,685900,30,MOP,por | zho,.mo,🇲🇴
Saint Martin,Saint Martin,MF,MAF,663,Americas,Caribbean,Marigot,31496,53,EUR,fra,.fr | .gp,🇲🇫
Morocco,Kingdom of Morocco,MA,MAR,504,Africa,Northern Africa,Rabat,36828330,446550,MAD,ara | ber,.ma | المغرب.,🇲🇦
Monaco,Principality of Monaco,MC,MCO,492,Europe,Western Europe,Monaco,38423,2.02,EUR,fra,.mc,🇲🇨
Moldova,Republic of Moldova,MD,MDA,498,Europe,Eastern Europe,Chișinău,2749076,33847,MDL,ron,.md,🇲🇩
Madagascar,Republic of Madagascar,MG,MDG,450,Africa,Eastern Africa,Antananarivo,31727042,587041,MGA,fra | mlg,.mg,🇲🇬
Maldives,Republic of the Maldives,MV,MDV,462,Asia,Southern Asia,Malé,515132,300,MVR,div,.mv,🇲🇻
Mexico,United Mexican States,MX,MEX,484,Americas,North America,Mexico City,130575786,1964375,MXN,spa,.mx,🇲🇽
Marshall Islands,Republic of the Marshall Islands,MH,MHL,584,Oceania,Micronesia,Majuro,42418,181,USD,eng | mah,.mh,🇲🇭
North Macedonia,Republic of North Macedonia,MK,MKD,807,Europe,Southeast Europe,Skopje,1822612,25713,MKD,mkd,.mk,🇲🇰
Mali,Republic of Mali,ML,MLI,466,Africa,Western Africa,Bamako,22395489,1240192,XOF,fra,.ml,🇲🇱
Malta,Republic of Malta,MT,MLT,470,Europe,Southern Europe,Valletta,574250,316,EUR,eng | mlt,.mt,🇲🇹
Myanmar,Republic of the Union of Myanmar,MM,MMR,104,Asia,South-Eastern Asia,Naypyidaw,51316756,676578,MMK,mya,.mm,🇲🇲
Montenegro,Montenegro,ME,MNE,499,Europe,Southeast Europe,Podgorica,623327,13812,EUR,cnr,.me,🇲🇪
Mongolia,Mongolia,MN,MNG,496,Asia,Eastern Asia,Ulan Bator,3544835,1564110,MNT,mon,.mn,🇲🇳
Northern Mariana Islands,Commonwealth of the Northern Mariana Islands,MP,MNP,580,Oceania,Micronesia,Saipan,47329,464,USD,cal | cha | eng,.mp,🇲🇵
Mozambique,Republic of Mozambique,MZ,MOZ,508,Africa,Eastern Africa,Maputo,34090466,801590,MZN,por,.mz,🇲🇿
Mauritania,Islamic Republic of Mauritania,MR,MRT,478,Africa,Western Africa,Nouakchott,4927532,1030700,MRU,ara,.mr,🇲🇷
Montserrat,Montserrat,MS,MSR,500,Americas,Caribbean,Plymouth,4386,102,XCD,eng,.ms,🇲🇸
Martinique,Martinique,MQ,MTQ,474,Americas,Caribbean,Fort-de-France,349925,1128,EUR,fra,.mq,🇲🇶
Mauritius,Republic of Mauritius,MU,MUS,480,Africa,Eastern Africa,Port Louis,1243741,2040,MUR,eng | fra | mfe,.mu,🇲🇺
Malawi,Republic of Malawi,MW,MWI,454,Africa,Eastern Africa,Lilongwe,20734262,118484,MWK,eng | nya,.mw,🇲🇼
Malaysia,Malaysia,MY,MYS,458,Asia,South-Eastern Asia,Kuala Lumpur,34231700,330803,MYR,eng | msa,.my,🇲🇾
Mayotte,Department of Mayotte,YT,MYT,175,Africa,Eastern Africa,Mamoudzou,320901,374,EUR,fra,.yt,🇾🇹
Namibia,Republic of Namibia,NA,NAM,516,Africa,Southern Africa,Windhoek,3022401,825615,NAD | ZAR,afr | deu | eng | her | hgm | kwn | loz | ndo | tsn,.na,🇳🇦
New Caledonia,New Caledonia,NC,NCL,540,Oceania,Melanesia,Nouméa,264596,18575,XPF,fra,.nc,🇳🇨
Niger,Republic of Niger,NE,NER,562,Africa,Western Africa,Niamey,26312034,1267000,XOF,fra,.ne,🇳🇪
Norfolk Island,Territory of Norfolk Island,NF,NFK,574,Oceania,Australia and New Zealand,Kingston,2188,36,AUD,eng | pih,.nf,🇳🇫
Nigeria,Federal Republic of Nigeria,NG,NGA,566,Africa,Western Africa,Abuja,223800000,923768,NGN,eng,.ng,🇳🇬
Nicaragua,Republic of Nicaragua,NI,NIC,558,Americas,Central America,Managua,6803886,130373,NIO,spa,.ni,🇳🇮
Niue,Niue,NU,NIU,570,Oceania,Polynesia,Alofi,1681,260,NZD,eng | niu,.nu,🇳🇺
Netherlands,Kingdom of the Netherlands,NL,NLD,528,Europe,Western Europe,Amsterdam,18100436,41865,EUR,nld,.nl,🇳🇱
Norway,Kingdom of Norway,NO,NOR,578,Europe,Northern Europe,Oslo,5606944,386224,NOK,nno | nob | smi,.no,🇳🇴
Nepal,Federal Democratic Republic of Nepal,NP,NPL,524,Asia,Southern Asia,Kathmandu,29911840,147181,NPR,nep,.np,🇳🇵
Nauru,Republic of Nauru,NR,NRU,520,Oceania,Micronesia,Yaren,11680,21,AUD,eng | nau,.nr,🇳🇷
New Zealand,New Zealand,NZ,NZL,554,Oceania,Australia and New Zealand,Wellington,5324700,268838,NZD,eng | mri | nzs,.nz,🇳🇿
Oman,Sultanate of Oman,OM,OMN,512,Asia,Western Asia,Muscat,5343630,309500,OMR,ara,.om,🇴🇲
Pakistan,Islamic Republic of Pakistan,PK,PAK,586,Asia,Southern Asia,Islamabad,241499431,796095,PKR,eng | urd,.pk,🇵🇰
Panama,Republic of Panama,PA,PAN,591,Americas,Central America,Panama City,4064780,75417,PAB | USD,spa,.pa,🇵🇦
Pitcairn Islands,Pitcairn Group of Islands,PN,PCN,612,Oceania,Polynesia,Adamstown,35,47,NZD,eng,.pn,🇵🇳
Peru,Republic of Peru,PE,PER,604,Americas,South America,Lima,34350244,1285216,PEN,aym | que | spa,.pe,🇵🇪
Philippines,Republic of the Philippines,PH,PHL,608,Asia,South-Eastern Asia,Manila,114123600,342353,PHP,eng | fil,.ph,🇵🇭
Palau,Republic of Palau,PW,PLW,585,Oceania,Micronesia,Ngerulmud,16733,459,USD,eng | pau,.pw,🇵🇼
Papua New Guinea,Independent State of Papua New Guinea,PG,PNG,598,Oceania,Melanesia,Port Moresby,11781559,462840,PGK,eng | hmo | tpi,.pg,🇵🇬
Poland,Republic of Poland,PL,POL,616,Europe,Central Europe,Warsaw,37392000,312679,PLN,pol,.pl,🇵🇱
Puerto Rico,Commonwealth of Puerto Rico,PR,PRI,630,Americas,Caribbean,San Juan,3203295,8870,USD,eng | spa,.pr,🇵🇷
North Korea,Democratic People's Republic of Korea,KP,PRK,408,Asia,Eastern Asia,Pyongyang,25950000,120538,KPW,kor,.kp,🇰🇵
Portugal,Portuguese Republic,PT,PRT,620,Europe,Southern Europe,Lisbon,10749635,92090,EUR,por,.pt,🇵🇹
Paraguay,Republic of Paraguay,PY,PRY,600,Americas,South America,Asunción,6109644,406752,PYG,grn | spa,.py,🇵🇾
Palestine,State of Palestine,PS,PSE,275,Asia,Western Asia,Ramallah | Jerusalem,5483450,6220,EGP | ILS | JOD,ara,.ps | فلسطين.,🇵🇸
French Polynesia,French Polynesia,PF,PYF,258,Oceania,Polynesia,Papeetē,279500,4167,XPF,fra,.pf,🇵🇫
Qatar,State of Qatar,QA,QAT,634,Asia,Western Asia,Doha,3173024,11586,QAR,ara,.qa | قطر.,🇶🇦
Réunion,Réunion Island,RE,REU,638,Africa,Eastern Africa,Saint-Denis,896175,2511,EUR,fra,.re,🇷🇪
Romania,Romania,RO,ROU,642,Europe,Southeast Europe,Bucharest,19036031,238391,RON,ron,.ro,🇷🇴
Russia,Russian Federation,RU,RUS,643,Europe,Eastern Europe,Moscow,146028325,17098246,RUB,rus,.ru | .su | .рф,🇷🇺
Rwanda,Republic of Rwanda,RW,RWA,646,Africa,Eastern Africa,Kigali,14104969,26338,RWF,eng | fra | kin,.rw,🇷🇼
Saudi Arabia,Kingdom of Saudi Arabia,SA,SAU,682,Asia,Western Asia,Riyadh,35300280,2149690,SAR,ara,.sa | .السعودية,🇸🇦
Sudan,Republic of the Sudan,SD,SDN,729,Africa,Northern Africa,Khartoum,51662000,1886068,SDG,ara | eng,.sd,🇸🇩
Senegal,Republic of Senegal,SN,SEN,686,Africa,Western Africa,Dakar,18593258,196722,XOF,fra,.sn,🇸🇳
Singapore,Republic of Singapore,SG,SGP,702,Asia,South-Eastern Asia,Singapore,6110200,710,SGD,eng | msa | tam | zho,.sg | .新加坡 | .சிங்கப்பூர்,🇸🇬
South Georgia,South Georgia and the South Sandwich Islands,GS,SGS,239,Antarctic,,King Edward Point,0,3903,GBP,eng,.gs,🇬🇸
Svalbard and Jan Mayen,Svalbard og Jan Mayen,SJ,SJM,744,Europe,Northern Europe,Longyearbyen,2530,61399,NOK,nor,.sj,🇸🇯
Solomon Islands,Solomon Islands,SB,SLB,090,Oceania,Melanesia,Honiara,750325,28896,SBD,eng,.sb,🇸🇧
Sierra Leone,Republic of Sierra Leone,SL,SLE,694,Africa,Western Africa,Freetown,9077691,71740,SLE,eng,.sl,🇸🇱
El Salvador,Republic of El Salvador,SV,SLV,222,Americas,Central America,San Salvador,6029976,21041,USD,spa,.sv,🇸🇻
San Marino,Republic of San Marino,SM,SMR,674,Europe,Southern Europe,City of San Marino,34132,61,EUR,ita,.sm,🇸🇲
Somalia,Federal Republic of Somalia,SO,SOM,706,Africa,Eastern Africa,Mogadishu,19655000,637657,SOS,ara | som,.so,🇸🇴
Saint Pierre and Miquelon,Saint Pierre and Miquelon,PM,SPM,666,Americas,North America,Saint-Pierre,5819,242,EUR,fra,.pm,🇵🇲
Serbia,Republic of Serbia,RS,SRB,688,Europe,Southeast Europe,Belgrade,6567783,77589,RSD,srp,.rs | .срб,🇷🇸
South Sudan,Republic of South Sudan,SS,SSD,728,Africa,Middle Africa,Juba,15786898,619745,SSP,eng,.ss,🇸🇸
São Tomé and Príncipe,Democratic Republic of São Tomé and Príncipe,ST,STP,678,Africa,Middle Africa,São Tomé,209607,964,STN,por,.st,🇸🇹
Suriname,Republic of Suriname,SR,SUR,740,Americas,South America,Paramaribo,616500,163820,SRD,nld,.sr,🇸🇷
Slovakia,Slovak Republic,SK,SVK,703,Europe,Central Europe,Bratislava,5413813,49037,EUR,slk,.sk,🇸🇰
Slovenia,Republic of Slovenia,SI,SVN,705,Europe,Central Europe,Ljubljana,2130638,20273,EUR,slv,.si,🇸🇮
Sweden,Kingdom of Sweden,SE,SWE,752,Europe,Northern Europe,Stockholm,10605098,450295,SEK,swe,.se,🇸🇪
Eswatini,Kingdom of Eswatini,SZ,SWZ,748,Africa,Southern Africa,Mbabane,1235549,17364,SZL | ZAR,eng | ssw,.sz,🇸🇿
Sint Maarten,Sint Maarten,SX,SXM,534,Americas,Caribbean,Philipsburg,41349,34,ANG,eng | fra | nld,.sx,🇸🇽
Seychelles,Republic of Seychelles,SC,SYC,690,Africa,Eastern Africa,Victoria,122729,452,SCR,crs | eng | fra,.sc,🇸🇨
Syria,Syrian Arab Republic,SY,SYR,760,Asia,Western Asia,Damascus,25620000,185180,SYP,ara,.sy | سوريا.,🇸🇾
Turks and Caicos Islands,Turks and Caicos Islands,TC,TCA,796,Americas,Caribbean,Cockburn Town,50828,948,USD,eng,.tc,🇹🇨
Chad,Republic of Chad,TD,TCD,148,Africa,Middle Africa,N'Djamena,19340757,1284000,XAF,ara | fra,.td,🇹🇩
Togo,Togolese Republic,TG,TGO,768,Africa,Western Africa,Lomé,8095498,56785,XOF,fra,.tg,🇹🇬
Thailand,Kingdom of Thailand,TH,THA,764,Asia,South-Eastern Asia,Bangkok,65859640,513120,THB,tha,.th | .ไทย,🇹🇭
Tajikistan,Republic of Tajikistan,TJ,TJK,762,Asia,Central Asia,Dushanbe,10499000,143100,TJS,rus | tgk,.tj,🇹🇯
Tokelau,Tokelau,TK,TKL,772,Oceania,Polynesia,Fakaofo,2608,12,NZD,eng | smo | tkl,.tk,🇹🇰
Turkmenistan,Turkmenistan,TM,TKM,795,Asia,Central Asia,Ashgabat,7057841,488100,TMT,rus | tuk,.tm,🇹🇲
Timor-Leste,Democratic Republic of Timor-Leste,TL,TLS,626,Asia,South-Eastern Asia,Dili,1391221,14874,USD,por | tet,.tl,🇹🇱
Tonga,Kingdom of Tonga,TO,TON,776,Oceania,Polynesia,Nuku'alofa,100179,747,TOP,eng | ton,.to,🇹🇴
Trinidad and Tobago,Republic of Trinidad and Tobago,TT,TTO,780,Americas,Caribbean,Port of Spain,1367764,5130,TTD,eng,.tt,🇹🇹
Tunisia,Tunisian Republic,TN,TUN,788,Africa,Northern Africa,Tunis,11972169,163610,TND,ara,.tn,🇹🇳
Turkey,Republic of Turkey,TR,TUR,792,Asia,Western Asia,Ankara,85664944,783562,TRY,tur,.tr,🇹🇷
Tuvalu,Tuvalu,TV,TUV,798,Oceania,Polynesia,Funafuti,10643,26,AUD | TVD,eng | tvl,.tv,🇹🇻
Taiwan,Republic of China (Taiwan),TW,TWN,158,Asia,Eastern Asia,Taipei,23317031,36197,TWD,zho,.tw | .台灣 | .台湾,🇹🇼
Tanzania,United Republic of Tanzania,TZ,TZA,834,Africa,Eastern Africa,Dodoma,68153004,947303,TZS,eng | swa,.tz,🇹🇿
Uganda,Republic of Uganda,UG,UGA,800,Africa,Eastern Africa,Kampala,45905417,241550,UGX,eng | swa,.ug,🇺🇬
Ukraine,Ukraine,UA,UKR,804,Europe,Eastern Europe,Kyiv,32862000,603550,UAH,ukr,.ua | .укр,🇺🇦
United States Minor Outlying Islands,United States Minor Outlying Islands,UM,UMI,581,Americas,North America,Washington DC,0,34.2,USD,eng,.us,🇺🇲
Uruguay,Oriental Republic of Uruguay,UY,URY,858,Americas,South America,Montevideo,3499451,181034,UYU,spa,.uy,🇺🇾
United States,United States of America,US,USA,840,Americas,North America,"Washington, D.C.",340110988,9525067,USD,eng,.us,🇺🇸
Uzbekistan,Republic of Uzbekistan,UZ,UZB,860,Asia,Central Asia,Tashkent,37859698,447400,UZS,rus | uzb,.uz,🇺🇿
Vatican City,Vatican City State,VA,VAT,336,Europe,Southern Europe,Vatican City,882,0.49,EUR,ita | lat,.va,🇻🇦
Saint Vincent and the Grenadines,Saint Vincent and the Grenadines,VC,VCT,670,Americas,Caribbean,Kingstown,110872,389,XCD,eng,.vc,🇻🇨
Venezuela,Bolivarian Republic of Venezuela,VE,VEN,862,Americas,South America,Caracas,28517000,916445,VES,spa,.ve,🇻🇪
British Virgin Islands,Virgin Islands,VG,VGB,092,Americas,Caribbean,Road Town,39471,151,USD,eng,.vg,🇻🇬
United States Virgin Islands,Virgin Islands of the United States,VI,VIR,850,Americas,Caribbean,Charlotte Amalie,87146,347,USD,eng,.vi,🇻🇮
Vietnam,Socialist Republic of Vietnam,VN,VNM,704,Asia,South-Eastern Asia,Hanoi,101343800,331212,VND,vie,.vn,🇻🇳
Vanuatu,Republic of Vanuatu,VU,VUT,548,Oceania,Melanesia,Port Vila,321409,12189,VUV,bis | eng | fra,.vu,🇻🇺
Wallis and Futuna,Territory of the Wallis and Futuna Islands,WF,WLF,876,Oceania,Polynesia,Mata-Utu,11620,142,XPF,fra,.wf,🇼🇫
Samoa,Independent State of Samoa,WS,WSM,882,Oceania,Polynesia,Apia,205557,2842,WST,eng | smo,.ws,🇼🇸
Yemen,Republic of Yemen,YE,YEM,887,Asia,Western Asia,Sana'a,32684503,527968,YER,ara,.ye,🇾🇪
South Africa,Republic of South Africa,ZA,ZAF,710,Africa,Southern Africa,Pretoria | Bloemfontein | Cape Town,63100945,1221037,ZAR,afr | eng | nbl | nso | sot | ssw | tsn | tso | ven | xho | zul,.za,🇿🇦
Zambia,Republic of Zambia,ZM,ZMB,894,Africa,Eastern Africa,Lusaka,19693423,752612,ZMW,eng,.zm,🇿🇲
Zimbabwe,Republic of Zimbabwe,ZW,ZWE,716,Africa,Southern Africa,Harare,17073087,390757,ZWL,bwg | eng | kck | khi | ndc | nde | nya | sna | sot | toi | tsn | tso | ven | xho | zib,.zw,🇿🇼
1 name_common name_official alpha2 alpha3 numeric region subregion capital population area_km2 currencies languages tlds flag
2 Aruba Aruba AW ABW 533 Americas Caribbean Oranjestad 107566 180 AWG nld | pap .aw 🇦🇼
3 Afghanistan Islamic Republic of Afghanistan AF AFG 004 Asia Southern Asia Kabul 43844000 652230 AFN prs | pus | tuk .af 🇦🇫
4 Angola Republic of Angola AO AGO 024 Africa Middle Africa Luanda 36170961 1246700 AOA por .ao 🇦🇴
5 Anguilla Anguilla AI AIA 660 Americas Caribbean The Valley 16010 91 XCD eng .ai 🇦🇮
6 Åland Islands Åland Islands AX ALA 248 Europe Northern Europe Mariehamn 30654 1580 EUR swe .ax 🇦🇽
7 Albania Republic of Albania AL ALB 008 Europe Southeast Europe Tirana 2363314 28748 ALL sqi .al 🇦🇱
8 Andorra Principality of Andorra AD AND 020 Europe Southern Europe Andorra la Vella 88406 468 EUR cat .ad 🇦🇩
9 United Arab Emirates United Arab Emirates AE ARE 784 Asia Western Asia Abu Dhabi 11294243 83600 AED ara .ae | امارات. 🇦🇪
10 Argentina Argentine Republic AR ARG 032 Americas South America Buenos Aires 46735004 2780400 ARS grn | spa .ar 🇦🇷
11 Armenia Republic of Armenia AM ARM 051 Asia Western Asia Yerevan 3076200 29743 AMD hye .am 🇦🇲
12 American Samoa American Samoa AS ASM 016 Oceania Polynesia Pago Pago 49710 199 USD eng | smo .as 🇦🇸
13 Antarctica Antarctica AQ ATA 010 Antarctic 1300 14000000 .aq 🇦🇶
14 French Southern and Antarctic Lands Territory of the French Southern and Antarctic Lands TF ATF 260 Antarctic Port-aux-Français 400 7747 EUR fra .tf 🇹🇫
15 Antigua and Barbuda Antigua and Barbuda AG ATG 028 Americas Caribbean Saint John's 103603 442 XCD eng .ag 🇦🇬
16 Australia Commonwealth of Australia AU AUS 036 Oceania Australia and New Zealand Canberra 27536874 7692024 AUD eng .au 🇦🇺
17 Austria Republic of Austria AT AUT 040 Europe Central Europe Vienna 9200931 83871 EUR deu .at 🇦🇹
18 Azerbaijan Republic of Azerbaijan AZ AZE 031 Asia Western Asia Baku 10241722 86600 AZN aze .az 🇦🇿
19 Burundi Republic of Burundi BI BDI 108 Africa Eastern Africa Gitega 12332788 27834 BIF fra | run .bi 🇧🇮
20 Belgium Kingdom of Belgium BE BEL 056 Europe Western Europe Brussels 11825551 30528 EUR deu | fra | nld .be 🇧🇪
21 Benin Republic of Benin BJ BEN 204 Africa Western Africa Porto-Novo 13224860 112622 XOF fra .bj 🇧🇯
22 Burkina Faso Burkina Faso BF BFA 854 Africa Western Africa Ouagadougou 24070553 272967 XOF fra .bf 🇧🇫
23 Bangladesh People's Republic of Bangladesh BD BGD 050 Asia Southern Asia Dhaka 169828911 147570 BDT ben .bd 🇧🇩
24 Bulgaria Republic of Bulgaria BG BGR 100 Europe Southeast Europe Sofia 6437360 110879 BGN bul .bg 🇧🇬
25 Bahrain Kingdom of Bahrain BH BHR 048 Asia Western Asia Manama 1594654 765 BHD ara .bh 🇧🇭
26 Bahamas Commonwealth of the Bahamas BS BHS 044 Americas Caribbean Nassau 398165 13943 BSD | USD eng .bs 🇧🇸
27 Bosnia and Herzegovina Bosnia and Herzegovina BA BIH 070 Europe Southeast Europe Sarajevo 3422000 51209 BAM bos | hrv | srp .ba 🇧🇦
28 Saint Barthélemy Collectivity of Saint Barthélemy BL BLM 652 Americas Caribbean Gustavia 10562 21 EUR fra .bl 🇧🇱
29 Saint Helena, Ascension and Tristan da Cunha Saint Helena, Ascension and Tristan da Cunha SH SHN 654 Africa Western Africa Jamestown 5651 394 GBP | SHP eng .sh | .ac 🇸🇭
30 Belarus Republic of Belarus BY BLR 112 Europe Eastern Europe Minsk 9109280 207600 BYN bel | rus .by 🇧🇾
31 Belize Belize BZ BLZ 084 Americas Central America Belmopan 417634 22966 BZD bjz | eng | spa .bz 🇧🇿
32 Bermuda Bermuda BM BMU 060 Americas North America Hamilton 64055 54 BMD eng .bm 🇧🇲
33 Bolivia Plurinational State of Bolivia BO BOL 068 Americas South America Sucre 11365333 1098581 BOB aym | grn | que | spa .bo 🇧🇴
34 Caribbean Netherlands Bonaire, Sint Eustatius and Saba BQ BES 535 Americas Caribbean Kralendijk 31980 328 USD eng | nld | pap .bq | .nl 🇧🇶
35 Brazil Federative Republic of Brazil BR BRA 076 Americas South America Brasília 213421037 8515767 BRL por .br 🇧🇷
36 Barbados Barbados BB BRB 052 Americas Caribbean Bridgetown 267800 430 BBD eng .bb 🇧🇧
37 Brunei Nation of Brunei, Abode of Peace BN BRN 096 Asia South-Eastern Asia Bandar Seri Begawan 455500 5765 BND | SGD msa .bn 🇧🇳
38 Bhutan Kingdom of Bhutan BT BTN 064 Asia Southern Asia Thimphu 784043 38394 BTN | INR dzo .bt 🇧🇹
39 Bouvet Island Bouvet Island BV BVT 074 Antarctic 0 49 nor .bv 🇧🇻
40 Botswana Republic of Botswana BW BWA 072 Africa Southern Africa Gaborone 2359609 582000 BWP eng | tsn .bw 🇧🇼
41 Central African Republic Central African Republic CF CAF 140 Africa Middle Africa Bangui 6470307 622984 XAF fra | sag .cf 🇨🇫
42 Canada Canada CA CAN 124 Americas North America Ottawa 41651653 9984670 CAD eng | fra .ca 🇨🇦
43 Cocos (Keeling) Islands Territory of the Cocos (Keeling) Islands CC CCK 166 Oceania Australia and New Zealand West Island 593 14 AUD eng .cc 🇨🇨
44 Switzerland Swiss Confederation CH CHE 756 Europe Western Europe Bern 9082848 41284 CHF fra | gsw | ita | roh .ch 🇨🇭
45 Chile Republic of Chile CL CHL 152 Americas South America Santiago 20206953 756102 CLP spa .cl 🇨🇱
46 China People's Republic of China CN CHN 156 Asia Eastern Asia Beijing 1408280000 9706961 CNY zho .cn | .中国 | .中國 | .公司 | .网络 🇨🇳
47 Ivory Coast Republic of Côte d'Ivoire CI CIV 384 Africa Western Africa Yamoussoukro 31719275 322463 XOF fra .ci 🇨🇮
48 Cameroon Republic of Cameroon CM CMR 120 Africa Middle Africa Yaoundé 29442327 475442 XAF eng | fra .cm 🇨🇲
49 DR Congo Democratic Republic of the Congo CD COD 180 Africa Middle Africa Kinshasa 112832000 2344858 CDF fra | kon | lin | lua | swa .cd 🇨🇩
50 Republic of the Congo Republic of the Congo CG COG 178 Africa Middle Africa Brazzaville 6142180 342000 XAF fra | kon | lin .cg 🇨🇬
51 Cook Islands Cook Islands CK COK 184 Oceania Polynesia Avarua 15040 236 CKD | NZD eng | rar .ck 🇨🇰
52 Colombia Republic of Colombia CO COL 170 Americas South America Bogotá 53057212 1141748 COP spa .co 🇨🇴
53 Comoros Union of the Comoros KM COM 174 Africa Eastern Africa Moroni 919901 1862 KMF ara | fra | zdj .km 🇰🇲
54 Cape Verde Republic of Cabo Verde CV CPV 132 Africa Western Africa Praia 491233 4033 CVE por .cv 🇨🇻
55 Costa Rica Republic of Costa Rica CR CRI 188 Americas Central America San José 5309625 51100 CRC spa .cr 🇨🇷
56 Cuba Republic of Cuba CU CUB 192 Americas Caribbean Havana 9748007 109884 CUC | CUP spa .cu 🇨🇺
57 Curaçao Country of Curaçao CW CUW 531 Americas Caribbean Willemstad 156115 444 ANG eng | nld | pap .cw 🇨🇼
58 Christmas Island Territory of Christmas Island CX CXR 162 Oceania Australia and New Zealand Flying Fish Cove 1692 135 AUD eng .cx 🇨🇽
59 Cayman Islands Cayman Islands KY CYM 136 Americas Caribbean George Town 84738 264 KYD eng .ky 🇰🇾
60 Cyprus Republic of Cyprus CY CYP 196 Europe Southern Europe Nicosia 1442614 9251 EUR ell | tur .cy 🇨🇾
61 Czechia Czech Republic CZ CZE 203 Europe Central Europe Prague 10882341 78865 CZK ces | slk .cz 🇨🇿
62 Germany Federal Republic of Germany DE DEU 276 Europe Western Europe Berlin 83491249 357114 EUR deu .de 🇩🇪
63 Djibouti Republic of Djibouti DJ DJI 262 Africa Eastern Africa Djibouti 1066809 23200 DJF ara | fra .dj 🇩🇯
64 Dominica Commonwealth of Dominica DM DMA 212 Americas Caribbean Roseau 67408 751 XCD eng .dm 🇩🇲
65 Denmark Kingdom of Denmark DK DNK 208 Europe Northern Europe Copenhagen 6011488 43094 DKK dan .dk 🇩🇰
66 Dominican Republic Dominican Republic DO DOM 214 Americas Caribbean Santo Domingo 10771504 48671 DOP spa .do 🇩🇴
67 Algeria People's Democratic Republic of Algeria DZ DZA 012 Africa Northern Africa Algiers 47400000 2381741 DZD ara .dz | الجزائر. 🇩🇿
68 Ecuador Republic of Ecuador EC ECU 218 Americas South America Quito 18103660 276841 USD spa .ec 🇪🇨
69 Egypt Arab Republic of Egypt EG EGY 818 Africa Northern Africa Cairo 107271260 1002450 EGP ara .eg | .مصر 🇪🇬
70 Eritrea State of Eritrea ER ERI 232 Africa Eastern Africa Asmara 3607000 117600 ERN ara | eng | tir .er 🇪🇷
71 Western Sahara Sahrawi Arab Democratic Republic EH ESH 732 Africa Northern Africa El Aaiún 600904 266000 DZD | MAD | MRU ber | mey | spa .eh 🇪🇭
72 Spain Kingdom of Spain ES ESP 724 Europe Southern Europe Madrid 49315949 505992 EUR cat | eus | glc | spa .es 🇪🇸
73 Estonia Republic of Estonia EE EST 233 Europe Northern Europe Tallinn 1369995 45227 EUR est .ee 🇪🇪
74 Ethiopia Federal Democratic Republic of Ethiopia ET ETH 231 Africa Eastern Africa Addis Ababa 111652998 1104300 ETB amh .et 🇪🇹
75 Finland Republic of Finland FI FIN 246 Europe Northern Europe Helsinki 5650325 338455 EUR fin | swe .fi 🇫🇮
76 Fiji Republic of Fiji FJ FJI 242 Oceania Melanesia Suva 900869 18272 FJD eng | fij | hif .fj 🇫🇯
77 Falkland Islands Falkland Islands FK FLK 238 Americas South America Stanley 3662 12173 FKP eng .fk 🇫🇰
78 France French Republic FR FRA 250 Europe Western Europe Paris 66351959 543908 EUR fra .fr 🇫🇷
79 Faroe Islands Faroe Islands FO FRO 234 Europe Northern Europe Tórshavn 54885 1393 DKK | FOK dan | fao .fo 🇫🇴
80 Micronesia Federated States of Micronesia FM FSM 583 Oceania Micronesia Palikir 105564 702 USD eng .fm 🇫🇲
81 Gabon Gabonese Republic GA GAB 266 Africa Middle Africa Libreville 2469296 267668 XAF fra .ga 🇬🇦
82 United Kingdom United Kingdom of Great Britain and Northern Ireland GB GBR 826 Europe Northern Europe London 69281437 244376 GBP eng .uk 🇬🇧
83 Georgia Georgia GE GEO 268 Asia Western Asia Tbilisi 4000921 69700 GEL kat .ge 🇬🇪
84 Guernsey Bailiwick of Guernsey GG GGY 831 Europe Northern Europe St. Peter Port 64781 78 GBP | GGP eng | fra | nfr .gg 🇬🇬
85 Ghana Republic of Ghana GH GHA 288 Africa Western Africa Accra 33742380 238533 GHS eng .gh 🇬🇭
86 Gibraltar Gibraltar GI GIB 292 Europe Southern Europe Gibraltar 38000 6 GIP eng .gi 🇬🇮
87 Guinea Republic of Guinea GN GIN 324 Africa Western Africa Conakry 14363931 245857 GNF fra .gn 🇬🇳
88 Guadeloupe Guadeloupe GP GLP 312 Americas Caribbean Basse-Terre 378561 1628 EUR fra .gp 🇬🇵
89 Gambia Republic of the Gambia GM GMB 270 Africa Western Africa Banjul 2422712 10689 GMD eng .gm 🇬🇲
90 Guinea-Bissau Republic of Guinea-Bissau GW GNB 624 Africa Western Africa Bissau 1781308 36125 XOF por | pov .gw 🇬🇼
91 Equatorial Guinea Republic of Equatorial Guinea GQ GNQ 226 Africa Middle Africa Ciudad de la Paz 1668768 28051 XAF fra | por | spa .gq 🇬🇶
92 Greece Hellenic Republic GR GRC 300 Europe Southern Europe Athens 10400720 131990 EUR ell .gr 🇬🇷
93 Grenada Grenada GD GRD 308 Americas Caribbean St. George's 109021 344 XCD eng .gd 🇬🇩
94 Greenland Greenland GL GRL 304 Americas North America Nuuk 56542 2166086 DKK kal .gl 🇬🇱
95 Guatemala Republic of Guatemala GT GTM 320 Americas Central America Guatemala City 18079810 108889 GTQ spa .gt 🇬🇹
96 French Guiana Guiana GF GUF 254 Americas South America Cayenne 292354 83534 EUR fra .gf 🇬🇫
97 Guam Guam GU GUM 316 Oceania Micronesia Hagåtña 153836 549 USD cha | eng | spa .gu 🇬🇺
98 Guyana Co-operative Republic of Guyana GY GUY 328 Americas South America Georgetown 772975 214969 GYD eng .gy 🇬🇾
99 Hong Kong Hong Kong Special Administrative Region of the People's Republic of China HK HKG 344 Asia Eastern Asia City of Victoria 7527500 1104 HKD eng | zho .hk | .香港 🇭🇰
100 Heard Island and McDonald Islands Heard Island and McDonald Islands HM HMD 334 Antarctic 0 412 eng .hm | .aq 🇭🇲
101 Honduras Republic of Honduras HN HND 340 Americas Central America Tegucigalpa 9892632 112492 HNL spa .hn 🇭🇳
102 Croatia Republic of Croatia HR HRV 191 Europe Southeast Europe Zagreb 3866233 56594 EUR hrv .hr 🇭🇷
103 Haiti Republic of Haiti HT HTI 332 Americas Caribbean Port-au-Prince 11867032 27750 HTG fra | hat .ht 🇭🇹
104 Hungary Hungary HU HUN 348 Europe Central Europe Budapest 9539502 93028 HUF hun .hu 🇭🇺
105 Indonesia Republic of Indonesia ID IDN 360 Asia South-Eastern Asia Jakarta 284438782 1904569 IDR ind .id 🇮🇩
106 Isle of Man Isle of Man IM IMN 833 Europe Northern Europe Douglas 84530 572 GBP | IMP eng | glv .im 🇮🇲
107 India Republic of India IN IND 356 Asia Southern Asia New Delhi 1417492000 3287263 INR eng | hin | tam .in 🇮🇳
108 British Indian Ocean Territory British Indian Ocean Territory IO IOT 086 Africa Eastern Africa Diego Garcia 0 60 USD eng .io 🇮🇴
109 Ireland Republic of Ireland IE IRL 372 Europe Northern Europe Dublin 5458600 70273 EUR eng | gle .ie 🇮🇪
110 Iran Islamic Republic of Iran IR IRN 364 Asia Southern Asia Tehran 85961000 1648195 IRR fas .ir | ایران. 🇮🇷
111 Iraq Republic of Iraq IQ IRQ 368 Asia Western Asia Baghdad 46118793 438317 IQD ara | arc | ckb .iq 🇮🇶
112 Iceland Iceland IS ISL 352 Europe Northern Europe Reykjavik 391810 103000 ISK isl .is 🇮🇸
113 Israel State of Israel IL ISR 376 Asia Western Asia Jerusalem 10134800 21937 ILS ara | heb .il 🇮🇱
114 Italy Italian Republic IT ITA 380 Europe Southern Europe Rome 58927633 301336 EUR cat | ita .it 🇮🇹
115 Jamaica Jamaica JM JAM 388 Americas Caribbean Kingston 2825544 10991 JMD eng | jam .jm 🇯🇲
116 Jersey Bailiwick of Jersey JE JEY 832 Europe Northern Europe Saint Helier 103267 116 GBP | JEP eng | fra | nrf .je 🇯🇪
117 Jordan Hashemite Kingdom of Jordan JO JOR 400 Asia Western Asia Amman 11734000 89342 JOD ara .jo | الاردن. 🇯🇴
118 Japan Japan JP JPN 392 Asia Eastern Asia Tokyo 123210000 377930 JPY jpn .jp | .みんな 🇯🇵
119 Kazakhstan Republic of Kazakhstan KZ KAZ 398 Asia Central Asia Astana 20426568 2724900 KZT kaz | rus .kz | .қаз 🇰🇿
120 Kenya Republic of Kenya KE KEN 404 Africa Eastern Africa Nairobi 53330978 580367 KES eng | swa .ke 🇰🇪
121 Kyrgyzstan Kyrgyz Republic KG KGZ 417 Asia Central Asia Bishkek 7281800 199951 KGS kir | rus .kg 🇰🇬
122 Cambodia Kingdom of Cambodia KH KHM 116 Asia South-Eastern Asia Phnom Penh 17577760 181035 KHR | USD khm .kh 🇰🇭
123 Kiribati Independent and Sovereign Republic of Kiribati KI KIR 296 Oceania Micronesia South Tarawa 120740 811 AUD | KID eng | gil .ki 🇰🇮
124 Saint Kitts and Nevis Federation of Saint Christopher and Nevis KN KNA 659 Americas Caribbean Basseterre 51320 261 XCD eng .kn 🇰🇳
125 South Korea Republic of Korea KR KOR 410 Asia Eastern Asia Seoul 51159889 100210 KRW kor .kr | .한국 🇰🇷
126 Kosovo Republic of Kosovo XK UNK Europe Southeast Europe Pristina 1585566 10908 EUR sqi | srp 🇽🇰
127 Kuwait State of Kuwait KW KWT 414 Asia Western Asia Kuwait City 4881254 17818 KWD ara .kw 🇰🇼
128 Laos Lao People's Democratic Republic LA LAO 418 Asia South-Eastern Asia Vientiane 7647000 236800 LAK lao .la 🇱🇦
129 Lebanon Lebanese Republic LB LBN 422 Asia Western Asia Beirut 5490000 10452 LBP ara | fra .lb 🇱🇧
130 Liberia Republic of Liberia LR LBR 430 Africa Western Africa Monrovia 5248621 111369 LRD eng .lr 🇱🇷
131 Libya State of Libya LY LBY 434 Africa Northern Africa Tripoli 7459000 1759540 LYD ara .ly 🇱🇾
132 Saint Lucia Saint Lucia LC LCA 662 Americas Caribbean Castries 184100 616 XCD eng .lc 🇱🇨
133 Liechtenstein Principality of Liechtenstein LI LIE 438 Europe Western Europe Vaduz 40900 160 CHF deu .li 🇱🇮
134 Sri Lanka Democratic Socialist Republic of Sri Lanka LK LKA 144 Asia Southern Asia Sri Jayawardenepura Kotte 21763170 65610 LKR sin | tam .lk | .இலங்கை | .ලංකා 🇱🇰
135 Lesotho Kingdom of Lesotho LS LSO 426 Africa Southern Africa Maseru 2116427 30355 LSL | ZAR eng | sot .ls 🇱🇸
136 Lithuania Republic of Lithuania LT LTU 440 Europe Northern Europe Vilnius 2894886 65300 EUR lit .lt 🇱🇹
137 Luxembourg Grand Duchy of Luxembourg LU LUX 442 Europe Western Europe Luxembourg 681973 2586 EUR deu | fra | ltz .lu 🇱🇺
138 Latvia Republic of Latvia LV LVA 428 Europe Northern Europe Riga 1829000 64559 EUR lav .lv 🇱🇻
139 Macau Macao Special Administrative Region of the People's Republic of China MO MAC 446 Asia Eastern Asia 685900 30 MOP por | zho .mo 🇲🇴
140 Saint Martin Saint Martin MF MAF 663 Americas Caribbean Marigot 31496 53 EUR fra .fr | .gp 🇲🇫
141 Morocco Kingdom of Morocco MA MAR 504 Africa Northern Africa Rabat 36828330 446550 MAD ara | ber .ma | المغرب. 🇲🇦
142 Monaco Principality of Monaco MC MCO 492 Europe Western Europe Monaco 38423 2.02 EUR fra .mc 🇲🇨
143 Moldova Republic of Moldova MD MDA 498 Europe Eastern Europe Chișinău 2749076 33847 MDL ron .md 🇲🇩
144 Madagascar Republic of Madagascar MG MDG 450 Africa Eastern Africa Antananarivo 31727042 587041 MGA fra | mlg .mg 🇲🇬
145 Maldives Republic of the Maldives MV MDV 462 Asia Southern Asia Malé 515132 300 MVR div .mv 🇲🇻
146 Mexico United Mexican States MX MEX 484 Americas North America Mexico City 130575786 1964375 MXN spa .mx 🇲🇽
147 Marshall Islands Republic of the Marshall Islands MH MHL 584 Oceania Micronesia Majuro 42418 181 USD eng | mah .mh 🇲🇭
148 North Macedonia Republic of North Macedonia MK MKD 807 Europe Southeast Europe Skopje 1822612 25713 MKD mkd .mk 🇲🇰
149 Mali Republic of Mali ML MLI 466 Africa Western Africa Bamako 22395489 1240192 XOF fra .ml 🇲🇱
150 Malta Republic of Malta MT MLT 470 Europe Southern Europe Valletta 574250 316 EUR eng | mlt .mt 🇲🇹
151 Myanmar Republic of the Union of Myanmar MM MMR 104 Asia South-Eastern Asia Naypyidaw 51316756 676578 MMK mya .mm 🇲🇲
152 Montenegro Montenegro ME MNE 499 Europe Southeast Europe Podgorica 623327 13812 EUR cnr .me 🇲🇪
153 Mongolia Mongolia MN MNG 496 Asia Eastern Asia Ulan Bator 3544835 1564110 MNT mon .mn 🇲🇳
154 Northern Mariana Islands Commonwealth of the Northern Mariana Islands MP MNP 580 Oceania Micronesia Saipan 47329 464 USD cal | cha | eng .mp 🇲🇵
155 Mozambique Republic of Mozambique MZ MOZ 508 Africa Eastern Africa Maputo 34090466 801590 MZN por .mz 🇲🇿
156 Mauritania Islamic Republic of Mauritania MR MRT 478 Africa Western Africa Nouakchott 4927532 1030700 MRU ara .mr 🇲🇷
157 Montserrat Montserrat MS MSR 500 Americas Caribbean Plymouth 4386 102 XCD eng .ms 🇲🇸
158 Martinique Martinique MQ MTQ 474 Americas Caribbean Fort-de-France 349925 1128 EUR fra .mq 🇲🇶
159 Mauritius Republic of Mauritius MU MUS 480 Africa Eastern Africa Port Louis 1243741 2040 MUR eng | fra | mfe .mu 🇲🇺
160 Malawi Republic of Malawi MW MWI 454 Africa Eastern Africa Lilongwe 20734262 118484 MWK eng | nya .mw 🇲🇼
161 Malaysia Malaysia MY MYS 458 Asia South-Eastern Asia Kuala Lumpur 34231700 330803 MYR eng | msa .my 🇲🇾
162 Mayotte Department of Mayotte YT MYT 175 Africa Eastern Africa Mamoudzou 320901 374 EUR fra .yt 🇾🇹
163 Namibia Republic of Namibia NA NAM 516 Africa Southern Africa Windhoek 3022401 825615 NAD | ZAR afr | deu | eng | her | hgm | kwn | loz | ndo | tsn .na 🇳🇦
164 New Caledonia New Caledonia NC NCL 540 Oceania Melanesia Nouméa 264596 18575 XPF fra .nc 🇳🇨
165 Niger Republic of Niger NE NER 562 Africa Western Africa Niamey 26312034 1267000 XOF fra .ne 🇳🇪
166 Norfolk Island Territory of Norfolk Island NF NFK 574 Oceania Australia and New Zealand Kingston 2188 36 AUD eng | pih .nf 🇳🇫
167 Nigeria Federal Republic of Nigeria NG NGA 566 Africa Western Africa Abuja 223800000 923768 NGN eng .ng 🇳🇬
168 Nicaragua Republic of Nicaragua NI NIC 558 Americas Central America Managua 6803886 130373 NIO spa .ni 🇳🇮
169 Niue Niue NU NIU 570 Oceania Polynesia Alofi 1681 260 NZD eng | niu .nu 🇳🇺
170 Netherlands Kingdom of the Netherlands NL NLD 528 Europe Western Europe Amsterdam 18100436 41865 EUR nld .nl 🇳🇱
171 Norway Kingdom of Norway NO NOR 578 Europe Northern Europe Oslo 5606944 386224 NOK nno | nob | smi .no 🇳🇴
172 Nepal Federal Democratic Republic of Nepal NP NPL 524 Asia Southern Asia Kathmandu 29911840 147181 NPR nep .np 🇳🇵
173 Nauru Republic of Nauru NR NRU 520 Oceania Micronesia Yaren 11680 21 AUD eng | nau .nr 🇳🇷
174 New Zealand New Zealand NZ NZL 554 Oceania Australia and New Zealand Wellington 5324700 268838 NZD eng | mri | nzs .nz 🇳🇿
175 Oman Sultanate of Oman OM OMN 512 Asia Western Asia Muscat 5343630 309500 OMR ara .om 🇴🇲
176 Pakistan Islamic Republic of Pakistan PK PAK 586 Asia Southern Asia Islamabad 241499431 796095 PKR eng | urd .pk 🇵🇰
177 Panama Republic of Panama PA PAN 591 Americas Central America Panama City 4064780 75417 PAB | USD spa .pa 🇵🇦
178 Pitcairn Islands Pitcairn Group of Islands PN PCN 612 Oceania Polynesia Adamstown 35 47 NZD eng .pn 🇵🇳
179 Peru Republic of Peru PE PER 604 Americas South America Lima 34350244 1285216 PEN aym | que | spa .pe 🇵🇪
180 Philippines Republic of the Philippines PH PHL 608 Asia South-Eastern Asia Manila 114123600 342353 PHP eng | fil .ph 🇵🇭
181 Palau Republic of Palau PW PLW 585 Oceania Micronesia Ngerulmud 16733 459 USD eng | pau .pw 🇵🇼
182 Papua New Guinea Independent State of Papua New Guinea PG PNG 598 Oceania Melanesia Port Moresby 11781559 462840 PGK eng | hmo | tpi .pg 🇵🇬
183 Poland Republic of Poland PL POL 616 Europe Central Europe Warsaw 37392000 312679 PLN pol .pl 🇵🇱
184 Puerto Rico Commonwealth of Puerto Rico PR PRI 630 Americas Caribbean San Juan 3203295 8870 USD eng | spa .pr 🇵🇷
185 North Korea Democratic People's Republic of Korea KP PRK 408 Asia Eastern Asia Pyongyang 25950000 120538 KPW kor .kp 🇰🇵
186 Portugal Portuguese Republic PT PRT 620 Europe Southern Europe Lisbon 10749635 92090 EUR por .pt 🇵🇹
187 Paraguay Republic of Paraguay PY PRY 600 Americas South America Asunción 6109644 406752 PYG grn | spa .py 🇵🇾
188 Palestine State of Palestine PS PSE 275 Asia Western Asia Ramallah | Jerusalem 5483450 6220 EGP | ILS | JOD ara .ps | فلسطين. 🇵🇸
189 French Polynesia French Polynesia PF PYF 258 Oceania Polynesia Papeetē 279500 4167 XPF fra .pf 🇵🇫
190 Qatar State of Qatar QA QAT 634 Asia Western Asia Doha 3173024 11586 QAR ara .qa | قطر. 🇶🇦
191 Réunion Réunion Island RE REU 638 Africa Eastern Africa Saint-Denis 896175 2511 EUR fra .re 🇷🇪
192 Romania Romania RO ROU 642 Europe Southeast Europe Bucharest 19036031 238391 RON ron .ro 🇷🇴
193 Russia Russian Federation RU RUS 643 Europe Eastern Europe Moscow 146028325 17098246 RUB rus .ru | .su | .рф 🇷🇺
194 Rwanda Republic of Rwanda RW RWA 646 Africa Eastern Africa Kigali 14104969 26338 RWF eng | fra | kin .rw 🇷🇼
195 Saudi Arabia Kingdom of Saudi Arabia SA SAU 682 Asia Western Asia Riyadh 35300280 2149690 SAR ara .sa | .السعودية 🇸🇦
196 Sudan Republic of the Sudan SD SDN 729 Africa Northern Africa Khartoum 51662000 1886068 SDG ara | eng .sd 🇸🇩
197 Senegal Republic of Senegal SN SEN 686 Africa Western Africa Dakar 18593258 196722 XOF fra .sn 🇸🇳
198 Singapore Republic of Singapore SG SGP 702 Asia South-Eastern Asia Singapore 6110200 710 SGD eng | msa | tam | zho .sg | .新加坡 | .சிங்கப்பூர் 🇸🇬
199 South Georgia South Georgia and the South Sandwich Islands GS SGS 239 Antarctic King Edward Point 0 3903 GBP eng .gs 🇬🇸
200 Svalbard and Jan Mayen Svalbard og Jan Mayen SJ SJM 744 Europe Northern Europe Longyearbyen 2530 61399 NOK nor .sj 🇸🇯
201 Solomon Islands Solomon Islands SB SLB 090 Oceania Melanesia Honiara 750325 28896 SBD eng .sb 🇸🇧
202 Sierra Leone Republic of Sierra Leone SL SLE 694 Africa Western Africa Freetown 9077691 71740 SLE eng .sl 🇸🇱
203 El Salvador Republic of El Salvador SV SLV 222 Americas Central America San Salvador 6029976 21041 USD spa .sv 🇸🇻
204 San Marino Republic of San Marino SM SMR 674 Europe Southern Europe City of San Marino 34132 61 EUR ita .sm 🇸🇲
205 Somalia Federal Republic of Somalia SO SOM 706 Africa Eastern Africa Mogadishu 19655000 637657 SOS ara | som .so 🇸🇴
206 Saint Pierre and Miquelon Saint Pierre and Miquelon PM SPM 666 Americas North America Saint-Pierre 5819 242 EUR fra .pm 🇵🇲
207 Serbia Republic of Serbia RS SRB 688 Europe Southeast Europe Belgrade 6567783 77589 RSD srp .rs | .срб 🇷🇸
208 South Sudan Republic of South Sudan SS SSD 728 Africa Middle Africa Juba 15786898 619745 SSP eng .ss 🇸🇸
209 São Tomé and Príncipe Democratic Republic of São Tomé and Príncipe ST STP 678 Africa Middle Africa São Tomé 209607 964 STN por .st 🇸🇹
210 Suriname Republic of Suriname SR SUR 740 Americas South America Paramaribo 616500 163820 SRD nld .sr 🇸🇷
211 Slovakia Slovak Republic SK SVK 703 Europe Central Europe Bratislava 5413813 49037 EUR slk .sk 🇸🇰
212 Slovenia Republic of Slovenia SI SVN 705 Europe Central Europe Ljubljana 2130638 20273 EUR slv .si 🇸🇮
213 Sweden Kingdom of Sweden SE SWE 752 Europe Northern Europe Stockholm 10605098 450295 SEK swe .se 🇸🇪
214 Eswatini Kingdom of Eswatini SZ SWZ 748 Africa Southern Africa Mbabane 1235549 17364 SZL | ZAR eng | ssw .sz 🇸🇿
215 Sint Maarten Sint Maarten SX SXM 534 Americas Caribbean Philipsburg 41349 34 ANG eng | fra | nld .sx 🇸🇽
216 Seychelles Republic of Seychelles SC SYC 690 Africa Eastern Africa Victoria 122729 452 SCR crs | eng | fra .sc 🇸🇨
217 Syria Syrian Arab Republic SY SYR 760 Asia Western Asia Damascus 25620000 185180 SYP ara .sy | سوريا. 🇸🇾
218 Turks and Caicos Islands Turks and Caicos Islands TC TCA 796 Americas Caribbean Cockburn Town 50828 948 USD eng .tc 🇹🇨
219 Chad Republic of Chad TD TCD 148 Africa Middle Africa N'Djamena 19340757 1284000 XAF ara | fra .td 🇹🇩
220 Togo Togolese Republic TG TGO 768 Africa Western Africa Lomé 8095498 56785 XOF fra .tg 🇹🇬
221 Thailand Kingdom of Thailand TH THA 764 Asia South-Eastern Asia Bangkok 65859640 513120 THB tha .th | .ไทย 🇹🇭
222 Tajikistan Republic of Tajikistan TJ TJK 762 Asia Central Asia Dushanbe 10499000 143100 TJS rus | tgk .tj 🇹🇯
223 Tokelau Tokelau TK TKL 772 Oceania Polynesia Fakaofo 2608 12 NZD eng | smo | tkl .tk 🇹🇰
224 Turkmenistan Turkmenistan TM TKM 795 Asia Central Asia Ashgabat 7057841 488100 TMT rus | tuk .tm 🇹🇲
225 Timor-Leste Democratic Republic of Timor-Leste TL TLS 626 Asia South-Eastern Asia Dili 1391221 14874 USD por | tet .tl 🇹🇱
226 Tonga Kingdom of Tonga TO TON 776 Oceania Polynesia Nuku'alofa 100179 747 TOP eng | ton .to 🇹🇴
227 Trinidad and Tobago Republic of Trinidad and Tobago TT TTO 780 Americas Caribbean Port of Spain 1367764 5130 TTD eng .tt 🇹🇹
228 Tunisia Tunisian Republic TN TUN 788 Africa Northern Africa Tunis 11972169 163610 TND ara .tn 🇹🇳
229 Turkey Republic of Turkey TR TUR 792 Asia Western Asia Ankara 85664944 783562 TRY tur .tr 🇹🇷
230 Tuvalu Tuvalu TV TUV 798 Oceania Polynesia Funafuti 10643 26 AUD | TVD eng | tvl .tv 🇹🇻
231 Taiwan Republic of China (Taiwan) TW TWN 158 Asia Eastern Asia Taipei 23317031 36197 TWD zho .tw | .台灣 | .台湾 🇹🇼
232 Tanzania United Republic of Tanzania TZ TZA 834 Africa Eastern Africa Dodoma 68153004 947303 TZS eng | swa .tz 🇹🇿
233 Uganda Republic of Uganda UG UGA 800 Africa Eastern Africa Kampala 45905417 241550 UGX eng | swa .ug 🇺🇬
234 Ukraine Ukraine UA UKR 804 Europe Eastern Europe Kyiv 32862000 603550 UAH ukr .ua | .укр 🇺🇦
235 United States Minor Outlying Islands United States Minor Outlying Islands UM UMI 581 Americas North America Washington DC 0 34.2 USD eng .us 🇺🇲
236 Uruguay Oriental Republic of Uruguay UY URY 858 Americas South America Montevideo 3499451 181034 UYU spa .uy 🇺🇾
237 United States United States of America US USA 840 Americas North America Washington, D.C. 340110988 9525067 USD eng .us 🇺🇸
238 Uzbekistan Republic of Uzbekistan UZ UZB 860 Asia Central Asia Tashkent 37859698 447400 UZS rus | uzb .uz 🇺🇿
239 Vatican City Vatican City State VA VAT 336 Europe Southern Europe Vatican City 882 0.49 EUR ita | lat .va 🇻🇦
240 Saint Vincent and the Grenadines Saint Vincent and the Grenadines VC VCT 670 Americas Caribbean Kingstown 110872 389 XCD eng .vc 🇻🇨
241 Venezuela Bolivarian Republic of Venezuela VE VEN 862 Americas South America Caracas 28517000 916445 VES spa .ve 🇻🇪
242 British Virgin Islands Virgin Islands VG VGB 092 Americas Caribbean Road Town 39471 151 USD eng .vg 🇻🇬
243 United States Virgin Islands Virgin Islands of the United States VI VIR 850 Americas Caribbean Charlotte Amalie 87146 347 USD eng .vi 🇻🇮
244 Vietnam Socialist Republic of Vietnam VN VNM 704 Asia South-Eastern Asia Hanoi 101343800 331212 VND vie .vn 🇻🇳
245 Vanuatu Republic of Vanuatu VU VUT 548 Oceania Melanesia Port Vila 321409 12189 VUV bis | eng | fra .vu 🇻🇺
246 Wallis and Futuna Territory of the Wallis and Futuna Islands WF WLF 876 Oceania Polynesia Mata-Utu 11620 142 XPF fra .wf 🇼🇫
247 Samoa Independent State of Samoa WS WSM 882 Oceania Polynesia Apia 205557 2842 WST eng | smo .ws 🇼🇸
248 Yemen Republic of Yemen YE YEM 887 Asia Western Asia Sana'a 32684503 527968 YER ara .ye 🇾🇪
249 South Africa Republic of South Africa ZA ZAF 710 Africa Southern Africa Pretoria | Bloemfontein | Cape Town 63100945 1221037 ZAR afr | eng | nbl | nso | sot | ssw | tsn | tso | ven | xho | zul .za 🇿🇦
250 Zambia Republic of Zambia ZM ZMB 894 Africa Eastern Africa Lusaka 19693423 752612 ZMW eng .zm 🇿🇲
251 Zimbabwe Republic of Zimbabwe ZW ZWE 716 Africa Southern Africa Harare 17073087 390757 ZWL bwg | eng | kck | khi | ndc | nde | nya | sna | sot | toi | tsn | tso | ven | xho | zib .zw 🇿🇼
+251
View File
@@ -0,0 +1,251 @@
name_common,name_official,alpha2,alpha3,numeric,region,subregion,capital,population,area_km2,currencies,languages,tlds,flag
Aruba,Aruba,AW,ABW,533,Americas,Caribbean,Oranjestad,107566,180,AWG,nld | pap,.aw,🇦🇼
Afghanistan,Islamic Republic of Afghanistan,AF,AFG,004,Asia,Southern Asia,Kabul,43844000,652230,AFN,prs | pus | tuk,.af,🇦🇫
Angola,Republic of Angola,AO,AGO,024,Africa,Middle Africa,Luanda,36170961,1246700,AOA,por,.ao,🇦🇴
Anguilla,Anguilla,AI,AIA,660,Americas,Caribbean,The Valley,16010,91,XCD,eng,.ai,🇦🇮
Åland Islands,Åland Islands,AX,ALA,248,Europe,Northern Europe,Mariehamn,30654,1580,EUR,swe,.ax,🇦🇽
Albania,Republic of Albania,AL,ALB,008,Europe,Southeast Europe,Tirana,2363314,28748,ALL,sqi,.al,🇦🇱
Andorra,Principality of Andorra,AD,AND,020,Europe,Southern Europe,Andorra la Vella,88406,468,EUR,cat,.ad,🇦🇩
United Arab Emirates,United Arab Emirates,AE,ARE,784,Asia,Western Asia,Abu Dhabi,11294243,83600,AED,ara,.ae | امارات.,🇦🇪
Argentina,Argentine Republic,AR,ARG,032,Americas,South America,Buenos Aires,46735004,2780400,ARS,grn | spa,.ar,🇦🇷
Armenia,Republic of Armenia,AM,ARM,051,Asia,Western Asia,Yerevan,3076200,29743,AMD,hye,.am,🇦🇲
American Samoa,American Samoa,AS,ASM,016,Oceania,Polynesia,Pago Pago,49710,199,USD,eng | smo,.as,🇦🇸
Antarctica,Antarctica,AQ,ATA,010,Antarctic,,,1300,14000000,,,.aq,🇦🇶
French Southern and Antarctic Lands,Territory of the French Southern and Antarctic Lands,TF,ATF,260,Antarctic,,Port-aux-Français,400,7747,EUR,fra,.tf,🇹🇫
Antigua and Barbuda,Antigua and Barbuda,AG,ATG,028,Americas,Caribbean,Saint John's,103603,442,XCD,eng,.ag,🇦🇬
Australia,Commonwealth of Australia,AU,AUS,036,Oceania,Australia and New Zealand,Canberra,27536874,7692024,AUD,eng,.au,🇦🇺
Austria,Republic of Austria,AT,AUT,040,Europe,Central Europe,Vienna,9200931,83871,EUR,deu,.at,🇦🇹
Azerbaijan,Republic of Azerbaijan,AZ,AZE,031,Asia,Western Asia,Baku,10241722,86600,AZN,aze,.az,🇦🇿
Burundi,Republic of Burundi,BI,BDI,108,Africa,Eastern Africa,Gitega,12332788,27834,BIF,fra | run,.bi,🇧🇮
Belgium,Kingdom of Belgium,BE,BEL,056,Europe,Western Europe,Brussels,11825551,30528,EUR,deu | fra | nld,.be,🇧🇪
Benin,Republic of Benin,BJ,BEN,204,Africa,Western Africa,Porto-Novo,13224860,112622,XOF,fra,.bj,🇧🇯
Burkina Faso,Burkina Faso,BF,BFA,854,Africa,Western Africa,Ouagadougou,24070553,272967,XOF,fra,.bf,🇧🇫
Bangladesh,People's Republic of Bangladesh,BD,BGD,050,Asia,Southern Asia,Dhaka,169828911,147570,BDT,ben,.bd,🇧🇩
Bulgaria,Republic of Bulgaria,BG,BGR,100,Europe,Southeast Europe,Sofia,6437360,110879,BGN,bul,.bg,🇧🇬
Bahrain,Kingdom of Bahrain,BH,BHR,048,Asia,Western Asia,Manama,1594654,765,BHD,ara,.bh,🇧🇭
Bahamas,Commonwealth of the Bahamas,BS,BHS,044,Americas,Caribbean,Nassau,398165,13943,BSD | USD,eng,.bs,🇧🇸
Bosnia and Herzegovina,Bosnia and Herzegovina,BA,BIH,070,Europe,Southeast Europe,Sarajevo,3422000,51209,BAM,bos | hrv | srp,.ba,🇧🇦
Saint Barthélemy,Collectivity of Saint Barthélemy,BL,BLM,652,Americas,Caribbean,Gustavia,10562,21,EUR,fra,.bl,🇧🇱
"Saint Helena, Ascension and Tristan da Cunha","Saint Helena, Ascension and Tristan da Cunha",SH,SHN,654,Africa,Western Africa,Jamestown,5651,394,GBP | SHP,eng,.sh | .ac,🇸🇭
Belarus,Republic of Belarus,BY,BLR,112,Europe,Eastern Europe,Minsk,9109280,207600,BYN,bel | rus,.by,🇧🇾
Belize,Belize,BZ,BLZ,084,Americas,Central America,Belmopan,417634,22966,BZD,bjz | eng | spa,.bz,🇧🇿
Bermuda,Bermuda,BM,BMU,060,Americas,North America,Hamilton,64055,54,BMD,eng,.bm,🇧🇲
Bolivia,Plurinational State of Bolivia,BO,BOL,068,Americas,South America,Sucre,11365333,1098581,BOB,aym | grn | que | spa,.bo,🇧🇴
Caribbean Netherlands,"Bonaire, Sint Eustatius and Saba",BQ,BES,535,Americas,Caribbean,Kralendijk,31980,328,USD,eng | nld | pap,.bq | .nl,🇧🇶
Brazil,Federative Republic of Brazil,BR,BRA,076,Americas,South America,Brasília,213421037,8515767,BRL,por,.br,🇧🇷
Barbados,Barbados,BB,BRB,052,Americas,Caribbean,Bridgetown,267800,430,BBD,eng,.bb,🇧🇧
Brunei,"Nation of Brunei, Abode of Peace",BN,BRN,096,Asia,South-Eastern Asia,Bandar Seri Begawan,455500,5765,BND | SGD,msa,.bn,🇧🇳
Bhutan,Kingdom of Bhutan,BT,BTN,064,Asia,Southern Asia,Thimphu,784043,38394,BTN | INR,dzo,.bt,🇧🇹
Bouvet Island,Bouvet Island,BV,BVT,074,Antarctic,,,0,49,,nor,.bv,🇧🇻
Botswana,Republic of Botswana,BW,BWA,072,Africa,Southern Africa,Gaborone,2359609,582000,BWP,eng | tsn,.bw,🇧🇼
Central African Republic,Central African Republic,CF,CAF,140,Africa,Middle Africa,Bangui,6470307,622984,XAF,fra | sag,.cf,🇨🇫
Canada,Canada,CA,CAN,124,Americas,North America,Ottawa,41651653,9984670,CAD,eng | fra,.ca,🇨🇦
Cocos (Keeling) Islands,Territory of the Cocos (Keeling) Islands,CC,CCK,166,Oceania,Australia and New Zealand,West Island,593,14,AUD,eng,.cc,🇨🇨
Switzerland,Swiss Confederation,CH,CHE,756,Europe,Western Europe,Bern,9082848,41284,CHF,fra | gsw | ita | roh,.ch,🇨🇭
Chile,Republic of Chile,CL,CHL,152,Americas,South America,Santiago,20206953,756102,CLP,spa,.cl,🇨🇱
China,People's Republic of China,CN,CHN,156,Asia,Eastern Asia,Beijing,1408280000,9706961,CNY,zho,.cn | .中国 | .中國 | .公司 | .网络,🇨🇳
Ivory Coast,Republic of Côte d'Ivoire,CI,CIV,384,Africa,Western Africa,Yamoussoukro,31719275,322463,XOF,fra,.ci,🇨🇮
Cameroon,Republic of Cameroon,CM,CMR,120,Africa,Middle Africa,Yaoundé,29442327,475442,XAF,eng | fra,.cm,🇨🇲
DR Congo,Democratic Republic of the Congo,CD,COD,180,Africa,Middle Africa,Kinshasa,112832000,2344858,CDF,fra | kon | lin | lua | swa,.cd,🇨🇩
Republic of the Congo,Republic of the Congo,CG,COG,178,Africa,Middle Africa,Brazzaville,6142180,342000,XAF,fra | kon | lin,.cg,🇨🇬
Cook Islands,Cook Islands,CK,COK,184,Oceania,Polynesia,Avarua,15040,236,CKD | NZD,eng | rar,.ck,🇨🇰
Colombia,Republic of Colombia,CO,COL,170,Americas,South America,Bogotá,53057212,1141748,COP,spa,.co,🇨🇴
Comoros,Union of the Comoros,KM,COM,174,Africa,Eastern Africa,Moroni,919901,1862,KMF,ara | fra | zdj,.km,🇰🇲
Cape Verde,Republic of Cabo Verde,CV,CPV,132,Africa,Western Africa,Praia,491233,4033,CVE,por,.cv,🇨🇻
Costa Rica,Republic of Costa Rica,CR,CRI,188,Americas,Central America,San José,5309625,51100,CRC,spa,.cr,🇨🇷
Cuba,Republic of Cuba,CU,CUB,192,Americas,Caribbean,Havana,9748007,109884,CUC | CUP,spa,.cu,🇨🇺
Curaçao,Country of Curaçao,CW,CUW,531,Americas,Caribbean,Willemstad,156115,444,ANG,eng | nld | pap,.cw,🇨🇼
Christmas Island,Territory of Christmas Island,CX,CXR,162,Oceania,Australia and New Zealand,Flying Fish Cove,1692,135,AUD,eng,.cx,🇨🇽
Cayman Islands,Cayman Islands,KY,CYM,136,Americas,Caribbean,George Town,84738,264,KYD,eng,.ky,🇰🇾
Cyprus,Republic of Cyprus,CY,CYP,196,Europe,Southern Europe,Nicosia,1442614,9251,EUR,ell | tur,.cy,🇨🇾
Czechia,Czech Republic,CZ,CZE,203,Europe,Central Europe,Prague,10882341,78865,CZK,ces | slk,.cz,🇨🇿
Germany,Federal Republic of Germany,DE,DEU,276,Europe,Western Europe,Berlin,83491249,357114,EUR,deu,.de,🇩🇪
Djibouti,Republic of Djibouti,DJ,DJI,262,Africa,Eastern Africa,Djibouti,1066809,23200,DJF,ara | fra,.dj,🇩🇯
Dominica,Commonwealth of Dominica,DM,DMA,212,Americas,Caribbean,Roseau,67408,751,XCD,eng,.dm,🇩🇲
Denmark,Kingdom of Denmark,DK,DNK,208,Europe,Northern Europe,Copenhagen,6011488,43094,DKK,dan,.dk,🇩🇰
Dominican Republic,Dominican Republic,DO,DOM,214,Americas,Caribbean,Santo Domingo,10771504,48671,DOP,spa,.do,🇩🇴
Algeria,People's Democratic Republic of Algeria,DZ,DZA,012,Africa,Northern Africa,Algiers,47400000,2381741,DZD,ara,.dz | الجزائر.,🇩🇿
Ecuador,Republic of Ecuador,EC,ECU,218,Americas,South America,Quito,18103660,276841,USD,spa,.ec,🇪🇨
Egypt,Arab Republic of Egypt,EG,EGY,818,Africa,Northern Africa,Cairo,107271260,1002450,EGP,ara,.eg | .مصر,🇪🇬
Eritrea,State of Eritrea,ER,ERI,232,Africa,Eastern Africa,Asmara,3607000,117600,ERN,ara | eng | tir,.er,🇪🇷
Western Sahara,Sahrawi Arab Democratic Republic,EH,ESH,732,Africa,Northern Africa,El Aaiún,600904,266000,DZD | MAD | MRU,ber | mey | spa,.eh,🇪🇭
Spain,Kingdom of Spain,ES,ESP,724,Europe,Southern Europe,Madrid,49315949,505992,EUR,cat | eus | glc | spa,.es,🇪🇸
Estonia,Republic of Estonia,EE,EST,233,Europe,Northern Europe,Tallinn,1369995,45227,EUR,est,.ee,🇪🇪
Ethiopia,Federal Democratic Republic of Ethiopia,ET,ETH,231,Africa,Eastern Africa,Addis Ababa,111652998,1104300,ETB,amh,.et,🇪🇹
Finland,Republic of Finland,FI,FIN,246,Europe,Northern Europe,Helsinki,5650325,338455,EUR,fin | swe,.fi,🇫🇮
Fiji,Republic of Fiji,FJ,FJI,242,Oceania,Melanesia,Suva,900869,18272,FJD,eng | fij | hif,.fj,🇫🇯
Falkland Islands,Falkland Islands,FK,FLK,238,Americas,South America,Stanley,3662,12173,FKP,eng,.fk,🇫🇰
France,French Republic,FR,FRA,250,Europe,Western Europe,Paris,66351959,543908,EUR,fra,.fr,🇫🇷
Faroe Islands,Faroe Islands,FO,FRO,234,Europe,Northern Europe,Tórshavn,54885,1393,DKK | FOK,dan | fao,.fo,🇫🇴
Micronesia,Federated States of Micronesia,FM,FSM,583,Oceania,Micronesia,Palikir,105564,702,USD,eng,.fm,🇫🇲
Gabon,Gabonese Republic,GA,GAB,266,Africa,Middle Africa,Libreville,2469296,267668,XAF,fra,.ga,🇬🇦
United Kingdom,United Kingdom of Great Britain and Northern Ireland,GB,GBR,826,Europe,Northern Europe,London,69281437,244376,GBP,eng,.uk,🇬🇧
Georgia,Georgia,GE,GEO,268,Asia,Western Asia,Tbilisi,4000921,69700,GEL,kat,.ge,🇬🇪
Guernsey,Bailiwick of Guernsey,GG,GGY,831,Europe,Northern Europe,St. Peter Port,64781,78,GBP | GGP,eng | fra | nfr,.gg,🇬🇬
Ghana,Republic of Ghana,GH,GHA,288,Africa,Western Africa,Accra,33742380,238533,GHS,eng,.gh,🇬🇭
Gibraltar,Gibraltar,GI,GIB,292,Europe,Southern Europe,Gibraltar,38000,6,GIP,eng,.gi,🇬🇮
Guinea,Republic of Guinea,GN,GIN,324,Africa,Western Africa,Conakry,14363931,245857,GNF,fra,.gn,🇬🇳
Guadeloupe,Guadeloupe,GP,GLP,312,Americas,Caribbean,Basse-Terre,378561,1628,EUR,fra,.gp,🇬🇵
Gambia,Republic of the Gambia,GM,GMB,270,Africa,Western Africa,Banjul,2422712,10689,GMD,eng,.gm,🇬🇲
Guinea-Bissau,Republic of Guinea-Bissau,GW,GNB,624,Africa,Western Africa,Bissau,1781308,36125,XOF,por | pov,.gw,🇬🇼
Equatorial Guinea,Republic of Equatorial Guinea,GQ,GNQ,226,Africa,Middle Africa,Ciudad de la Paz,1668768,28051,XAF,fra | por | spa,.gq,🇬🇶
Greece,Hellenic Republic,GR,GRC,300,Europe,Southern Europe,Athens,10400720,131990,EUR,ell,.gr,🇬🇷
Grenada,Grenada,GD,GRD,308,Americas,Caribbean,St. George's,109021,344,XCD,eng,.gd,🇬🇩
Greenland,Greenland,GL,GRL,304,Americas,North America,Nuuk,56542,2166086,DKK,kal,.gl,🇬🇱
Guatemala,Republic of Guatemala,GT,GTM,320,Americas,Central America,Guatemala City,18079810,108889,GTQ,spa,.gt,🇬🇹
French Guiana,Guiana,GF,GUF,254,Americas,South America,Cayenne,292354,83534,EUR,fra,.gf,🇬🇫
Guam,Guam,GU,GUM,316,Oceania,Micronesia,Hagåtña,153836,549,USD,cha | eng | spa,.gu,🇬🇺
Guyana,Co-operative Republic of Guyana,GY,GUY,328,Americas,South America,Georgetown,772975,214969,GYD,eng,.gy,🇬🇾
Hong Kong,Hong Kong Special Administrative Region of the People's Republic of China,HK,HKG,344,Asia,Eastern Asia,City of Victoria,7527500,1104,HKD,eng | zho,.hk | .香港,🇭🇰
Heard Island and McDonald Islands,Heard Island and McDonald Islands,HM,HMD,334,Antarctic,,,0,412,,eng,.hm | .aq,🇭🇲
Honduras,Republic of Honduras,HN,HND,340,Americas,Central America,Tegucigalpa,9892632,112492,HNL,spa,.hn,🇭🇳
Croatia,Republic of Croatia,HR,HRV,191,Europe,Southeast Europe,Zagreb,3866233,56594,EUR,hrv,.hr,🇭🇷
Haiti,Republic of Haiti,HT,HTI,332,Americas,Caribbean,Port-au-Prince,11867032,27750,HTG,fra | hat,.ht,🇭🇹
Hungary,Hungary,HU,HUN,348,Europe,Central Europe,Budapest,9539502,93028,HUF,hun,.hu,🇭🇺
Indonesia,Republic of Indonesia,ID,IDN,360,Asia,South-Eastern Asia,Jakarta,284438782,1904569,IDR,ind,.id,🇮🇩
Isle of Man,Isle of Man,IM,IMN,833,Europe,Northern Europe,Douglas,84530,572,GBP | IMP,eng | glv,.im,🇮🇲
India,Republic of India,IN,IND,356,Asia,Southern Asia,New Delhi,1417492000,3287263,INR,eng | hin | tam,.in,🇮🇳
British Indian Ocean Territory,British Indian Ocean Territory,IO,IOT,086,Africa,Eastern Africa,Diego Garcia,0,60,USD,eng,.io,🇮🇴
Ireland,Republic of Ireland,IE,IRL,372,Europe,Northern Europe,Dublin,5458600,70273,EUR,eng | gle,.ie,🇮🇪
Iran,Islamic Republic of Iran,IR,IRN,364,Asia,Southern Asia,Tehran,85961000,1648195,IRR,fas,.ir | ایران.,🇮🇷
Iraq,Republic of Iraq,IQ,IRQ,368,Asia,Western Asia,Baghdad,46118793,438317,IQD,ara | arc | ckb,.iq,🇮🇶
Iceland,Iceland,IS,ISL,352,Europe,Northern Europe,Reykjavik,391810,103000,ISK,isl,.is,🇮🇸
Israel,State of Israel,IL,ISR,376,Asia,Western Asia,Jerusalem,10134800,21937,ILS,ara | heb,.il,🇮🇱
Italy,Italian Republic,IT,ITA,380,Europe,Southern Europe,Rome,58927633,301336,EUR,cat | ita,.it,🇮🇹
Jamaica,Jamaica,JM,JAM,388,Americas,Caribbean,Kingston,2825544,10991,JMD,eng | jam,.jm,🇯🇲
Jersey,Bailiwick of Jersey,JE,JEY,832,Europe,Northern Europe,Saint Helier,103267,116,GBP | JEP,eng | fra | nrf,.je,🇯🇪
Jordan,Hashemite Kingdom of Jordan,JO,JOR,400,Asia,Western Asia,Amman,11734000,89342,JOD,ara,.jo | الاردن.,🇯🇴
Japan,Japan,JP,JPN,392,Asia,Eastern Asia,Tokyo,123210000,377930,JPY,jpn,.jp | .みんな,🇯🇵
Kazakhstan,Republic of Kazakhstan,KZ,KAZ,398,Asia,Central Asia,Astana,20426568,2724900,KZT,kaz | rus,.kz | .қаз,🇰🇿
Kenya,Republic of Kenya,KE,KEN,404,Africa,Eastern Africa,Nairobi,53330978,580367,KES,eng | swa,.ke,🇰🇪
Kyrgyzstan,Kyrgyz Republic,KG,KGZ,417,Asia,Central Asia,Bishkek,7281800,199951,KGS,kir | rus,.kg,🇰🇬
Cambodia,Kingdom of Cambodia,KH,KHM,116,Asia,South-Eastern Asia,Phnom Penh,17577760,181035,KHR | USD,khm,.kh,🇰🇭
Kiribati,Independent and Sovereign Republic of Kiribati,KI,KIR,296,Oceania,Micronesia,South Tarawa,120740,811,AUD | KID,eng | gil,.ki,🇰🇮
Saint Kitts and Nevis,Federation of Saint Christopher and Nevis,KN,KNA,659,Americas,Caribbean,Basseterre,51320,261,XCD,eng,.kn,🇰🇳
South Korea,Republic of Korea,KR,KOR,410,Asia,Eastern Asia,Seoul,51159889,100210,KRW,kor,.kr | .한국,🇰🇷
Kosovo,Republic of Kosovo,XK,UNK,,Europe,Southeast Europe,Pristina,1585566,10908,EUR,sqi | srp,,🇽🇰
Kuwait,State of Kuwait,KW,KWT,414,Asia,Western Asia,Kuwait City,4881254,17818,KWD,ara,.kw,🇰🇼
Laos,Lao People's Democratic Republic,LA,LAO,418,Asia,South-Eastern Asia,Vientiane,7647000,236800,LAK,lao,.la,🇱🇦
Lebanon,Lebanese Republic,LB,LBN,422,Asia,Western Asia,Beirut,5490000,10452,LBP,ara | fra,.lb,🇱🇧
Liberia,Republic of Liberia,LR,LBR,430,Africa,Western Africa,Monrovia,5248621,111369,LRD,eng,.lr,🇱🇷
Libya,State of Libya,LY,LBY,434,Africa,Northern Africa,Tripoli,7459000,1759540,LYD,ara,.ly,🇱🇾
Saint Lucia,Saint Lucia,LC,LCA,662,Americas,Caribbean,Castries,184100,616,XCD,eng,.lc,🇱🇨
Liechtenstein,Principality of Liechtenstein,LI,LIE,438,Europe,Western Europe,Vaduz,40900,160,CHF,deu,.li,🇱🇮
Sri Lanka,Democratic Socialist Republic of Sri Lanka,LK,LKA,144,Asia,Southern Asia,Sri Jayawardenepura Kotte,21763170,65610,LKR,sin | tam,.lk | .இலங்கை | .ලංකා,🇱🇰
Lesotho,Kingdom of Lesotho,LS,LSO,426,Africa,Southern Africa,Maseru,2116427,30355,LSL | ZAR,eng | sot,.ls,🇱🇸
Lithuania,Republic of Lithuania,LT,LTU,440,Europe,Northern Europe,Vilnius,2894886,65300,EUR,lit,.lt,🇱🇹
Luxembourg,Grand Duchy of Luxembourg,LU,LUX,442,Europe,Western Europe,Luxembourg,681973,2586,EUR,deu | fra | ltz,.lu,🇱🇺
Latvia,Republic of Latvia,LV,LVA,428,Europe,Northern Europe,Riga,1829000,64559,EUR,lav,.lv,🇱🇻
Macau,Macao Special Administrative Region of the People's Republic of China,MO,MAC,446,Asia,Eastern Asia,,685900,30,MOP,por | zho,.mo,🇲🇴
Saint Martin,Saint Martin,MF,MAF,663,Americas,Caribbean,Marigot,31496,53,EUR,fra,.fr | .gp,🇲🇫
Morocco,Kingdom of Morocco,MA,MAR,504,Africa,Northern Africa,Rabat,36828330,446550,MAD,ara | ber,.ma | المغرب.,🇲🇦
Monaco,Principality of Monaco,MC,MCO,492,Europe,Western Europe,Monaco,38423,2.02,EUR,fra,.mc,🇲🇨
Moldova,Republic of Moldova,MD,MDA,498,Europe,Eastern Europe,Chișinău,2749076,33847,MDL,ron,.md,🇲🇩
Madagascar,Republic of Madagascar,MG,MDG,450,Africa,Eastern Africa,Antananarivo,31727042,587041,MGA,fra | mlg,.mg,🇲🇬
Maldives,Republic of the Maldives,MV,MDV,462,Asia,Southern Asia,Malé,515132,300,MVR,div,.mv,🇲🇻
Mexico,United Mexican States,MX,MEX,484,Americas,North America,Mexico City,130575786,1964375,MXN,spa,.mx,🇲🇽
Marshall Islands,Republic of the Marshall Islands,MH,MHL,584,Oceania,Micronesia,Majuro,42418,181,USD,eng | mah,.mh,🇲🇭
North Macedonia,Republic of North Macedonia,MK,MKD,807,Europe,Southeast Europe,Skopje,1822612,25713,MKD,mkd,.mk,🇲🇰
Mali,Republic of Mali,ML,MLI,466,Africa,Western Africa,Bamako,22395489,1240192,XOF,fra,.ml,🇲🇱
Malta,Republic of Malta,MT,MLT,470,Europe,Southern Europe,Valletta,574250,316,EUR,eng | mlt,.mt,🇲🇹
Myanmar,Republic of the Union of Myanmar,MM,MMR,104,Asia,South-Eastern Asia,Naypyidaw,51316756,676578,MMK,mya,.mm,🇲🇲
Montenegro,Montenegro,ME,MNE,499,Europe,Southeast Europe,Podgorica,623327,13812,EUR,cnr,.me,🇲🇪
Mongolia,Mongolia,MN,MNG,496,Asia,Eastern Asia,Ulan Bator,3544835,1564110,MNT,mon,.mn,🇲🇳
Northern Mariana Islands,Commonwealth of the Northern Mariana Islands,MP,MNP,580,Oceania,Micronesia,Saipan,47329,464,USD,cal | cha | eng,.mp,🇲🇵
Mozambique,Republic of Mozambique,MZ,MOZ,508,Africa,Eastern Africa,Maputo,34090466,801590,MZN,por,.mz,🇲🇿
Mauritania,Islamic Republic of Mauritania,MR,MRT,478,Africa,Western Africa,Nouakchott,4927532,1030700,MRU,ara,.mr,🇲🇷
Montserrat,Montserrat,MS,MSR,500,Americas,Caribbean,Plymouth,4386,102,XCD,eng,.ms,🇲🇸
Martinique,Martinique,MQ,MTQ,474,Americas,Caribbean,Fort-de-France,349925,1128,EUR,fra,.mq,🇲🇶
Mauritius,Republic of Mauritius,MU,MUS,480,Africa,Eastern Africa,Port Louis,1243741,2040,MUR,eng | fra | mfe,.mu,🇲🇺
Malawi,Republic of Malawi,MW,MWI,454,Africa,Eastern Africa,Lilongwe,20734262,118484,MWK,eng | nya,.mw,🇲🇼
Malaysia,Malaysia,MY,MYS,458,Asia,South-Eastern Asia,Kuala Lumpur,34231700,330803,MYR,eng | msa,.my,🇲🇾
Mayotte,Department of Mayotte,YT,MYT,175,Africa,Eastern Africa,Mamoudzou,320901,374,EUR,fra,.yt,🇾🇹
Namibia,Republic of Namibia,NA,NAM,516,Africa,Southern Africa,Windhoek,3022401,825615,NAD | ZAR,afr | deu | eng | her | hgm | kwn | loz | ndo | tsn,.na,🇳🇦
New Caledonia,New Caledonia,NC,NCL,540,Oceania,Melanesia,Nouméa,264596,18575,XPF,fra,.nc,🇳🇨
Niger,Republic of Niger,NE,NER,562,Africa,Western Africa,Niamey,26312034,1267000,XOF,fra,.ne,🇳🇪
Norfolk Island,Territory of Norfolk Island,NF,NFK,574,Oceania,Australia and New Zealand,Kingston,2188,36,AUD,eng | pih,.nf,🇳🇫
Nigeria,Federal Republic of Nigeria,NG,NGA,566,Africa,Western Africa,Abuja,223800000,923768,NGN,eng,.ng,🇳🇬
Nicaragua,Republic of Nicaragua,NI,NIC,558,Americas,Central America,Managua,6803886,130373,NIO,spa,.ni,🇳🇮
Niue,Niue,NU,NIU,570,Oceania,Polynesia,Alofi,1681,260,NZD,eng | niu,.nu,🇳🇺
Netherlands,Kingdom of the Netherlands,NL,NLD,528,Europe,Western Europe,Amsterdam,18100436,41865,EUR,nld,.nl,🇳🇱
Norway,Kingdom of Norway,NO,NOR,578,Europe,Northern Europe,Oslo,5606944,386224,NOK,nno | nob | smi,.no,🇳🇴
Nepal,Federal Democratic Republic of Nepal,NP,NPL,524,Asia,Southern Asia,Kathmandu,29911840,147181,NPR,nep,.np,🇳🇵
Nauru,Republic of Nauru,NR,NRU,520,Oceania,Micronesia,Yaren,11680,21,AUD,eng | nau,.nr,🇳🇷
New Zealand,New Zealand,NZ,NZL,554,Oceania,Australia and New Zealand,Wellington,5324700,268838,NZD,eng | mri | nzs,.nz,🇳🇿
Oman,Sultanate of Oman,OM,OMN,512,Asia,Western Asia,Muscat,5343630,309500,OMR,ara,.om,🇴🇲
Pakistan,Islamic Republic of Pakistan,PK,PAK,586,Asia,Southern Asia,Islamabad,241499431,796095,PKR,eng | urd,.pk,🇵🇰
Panama,Republic of Panama,PA,PAN,591,Americas,Central America,Panama City,4064780,75417,PAB | USD,spa,.pa,🇵🇦
Pitcairn Islands,Pitcairn Group of Islands,PN,PCN,612,Oceania,Polynesia,Adamstown,35,47,NZD,eng,.pn,🇵🇳
Peru,Republic of Peru,PE,PER,604,Americas,South America,Lima,34350244,1285216,PEN,aym | que | spa,.pe,🇵🇪
Philippines,Republic of the Philippines,PH,PHL,608,Asia,South-Eastern Asia,Manila,114123600,342353,PHP,eng | fil,.ph,🇵🇭
Palau,Republic of Palau,PW,PLW,585,Oceania,Micronesia,Ngerulmud,16733,459,USD,eng | pau,.pw,🇵🇼
Papua New Guinea,Independent State of Papua New Guinea,PG,PNG,598,Oceania,Melanesia,Port Moresby,11781559,462840,PGK,eng | hmo | tpi,.pg,🇵🇬
Poland,Republic of Poland,PL,POL,616,Europe,Central Europe,Warsaw,37392000,312679,PLN,pol,.pl,🇵🇱
Puerto Rico,Commonwealth of Puerto Rico,PR,PRI,630,Americas,Caribbean,San Juan,3203295,8870,USD,eng | spa,.pr,🇵🇷
North Korea,Democratic People's Republic of Korea,KP,PRK,408,Asia,Eastern Asia,Pyongyang,25950000,120538,KPW,kor,.kp,🇰🇵
Portugal,Portuguese Republic,PT,PRT,620,Europe,Southern Europe,Lisbon,10749635,92090,EUR,por,.pt,🇵🇹
Paraguay,Republic of Paraguay,PY,PRY,600,Americas,South America,Asunción,6109644,406752,PYG,grn | spa,.py,🇵🇾
Palestine,State of Palestine,PS,PSE,275,Asia,Western Asia,Ramallah | Jerusalem,5483450,6220,EGP | ILS | JOD,ara,.ps | فلسطين.,🇵🇸
French Polynesia,French Polynesia,PF,PYF,258,Oceania,Polynesia,Papeetē,279500,4167,XPF,fra,.pf,🇵🇫
Qatar,State of Qatar,QA,QAT,634,Asia,Western Asia,Doha,3173024,11586,QAR,ara,.qa | قطر.,🇶🇦
Réunion,Réunion Island,RE,REU,638,Africa,Eastern Africa,Saint-Denis,896175,2511,EUR,fra,.re,🇷🇪
Romania,Romania,RO,ROU,642,Europe,Southeast Europe,Bucharest,19036031,238391,RON,ron,.ro,🇷🇴
Russia,Russian Federation,RU,RUS,643,Europe,Eastern Europe,Moscow,146028325,17098246,RUB,rus,.ru | .su | .рф,🇷🇺
Rwanda,Republic of Rwanda,RW,RWA,646,Africa,Eastern Africa,Kigali,14104969,26338,RWF,eng | fra | kin,.rw,🇷🇼
Saudi Arabia,Kingdom of Saudi Arabia,SA,SAU,682,Asia,Western Asia,Riyadh,35300280,2149690,SAR,ara,.sa | .السعودية,🇸🇦
Sudan,Republic of the Sudan,SD,SDN,729,Africa,Northern Africa,Khartoum,51662000,1886068,SDG,ara | eng,.sd,🇸🇩
Senegal,Republic of Senegal,SN,SEN,686,Africa,Western Africa,Dakar,18593258,196722,XOF,fra,.sn,🇸🇳
Singapore,Republic of Singapore,SG,SGP,702,Asia,South-Eastern Asia,Singapore,6110200,710,SGD,eng | msa | tam | zho,.sg | .新加坡 | .சிங்கப்பூர்,🇸🇬
South Georgia,South Georgia and the South Sandwich Islands,GS,SGS,239,Antarctic,,King Edward Point,0,3903,GBP,eng,.gs,🇬🇸
Svalbard and Jan Mayen,Svalbard og Jan Mayen,SJ,SJM,744,Europe,Northern Europe,Longyearbyen,2530,61399,NOK,nor,.sj,🇸🇯
Solomon Islands,Solomon Islands,SB,SLB,090,Oceania,Melanesia,Honiara,750325,28896,SBD,eng,.sb,🇸🇧
Sierra Leone,Republic of Sierra Leone,SL,SLE,694,Africa,Western Africa,Freetown,9077691,71740,SLE,eng,.sl,🇸🇱
El Salvador,Republic of El Salvador,SV,SLV,222,Americas,Central America,San Salvador,6029976,21041,USD,spa,.sv,🇸🇻
San Marino,Republic of San Marino,SM,SMR,674,Europe,Southern Europe,City of San Marino,34132,61,EUR,ita,.sm,🇸🇲
Somalia,Federal Republic of Somalia,SO,SOM,706,Africa,Eastern Africa,Mogadishu,19655000,637657,SOS,ara | som,.so,🇸🇴
Saint Pierre and Miquelon,Saint Pierre and Miquelon,PM,SPM,666,Americas,North America,Saint-Pierre,5819,242,EUR,fra,.pm,🇵🇲
Serbia,Republic of Serbia,RS,SRB,688,Europe,Southeast Europe,Belgrade,6567783,77589,RSD,srp,.rs | .срб,🇷🇸
South Sudan,Republic of South Sudan,SS,SSD,728,Africa,Middle Africa,Juba,15786898,619745,SSP,eng,.ss,🇸🇸
São Tomé and Príncipe,Democratic Republic of São Tomé and Príncipe,ST,STP,678,Africa,Middle Africa,São Tomé,209607,964,STN,por,.st,🇸🇹
Suriname,Republic of Suriname,SR,SUR,740,Americas,South America,Paramaribo,616500,163820,SRD,nld,.sr,🇸🇷
Slovakia,Slovak Republic,SK,SVK,703,Europe,Central Europe,Bratislava,5413813,49037,EUR,slk,.sk,🇸🇰
Slovenia,Republic of Slovenia,SI,SVN,705,Europe,Central Europe,Ljubljana,2130638,20273,EUR,slv,.si,🇸🇮
Sweden,Kingdom of Sweden,SE,SWE,752,Europe,Northern Europe,Stockholm,10605098,450295,SEK,swe,.se,🇸🇪
Eswatini,Kingdom of Eswatini,SZ,SWZ,748,Africa,Southern Africa,Mbabane,1235549,17364,SZL | ZAR,eng | ssw,.sz,🇸🇿
Sint Maarten,Sint Maarten,SX,SXM,534,Americas,Caribbean,Philipsburg,41349,34,ANG,eng | fra | nld,.sx,🇸🇽
Seychelles,Republic of Seychelles,SC,SYC,690,Africa,Eastern Africa,Victoria,122729,452,SCR,crs | eng | fra,.sc,🇸🇨
Syria,Syrian Arab Republic,SY,SYR,760,Asia,Western Asia,Damascus,25620000,185180,SYP,ara,.sy | سوريا.,🇸🇾
Turks and Caicos Islands,Turks and Caicos Islands,TC,TCA,796,Americas,Caribbean,Cockburn Town,50828,948,USD,eng,.tc,🇹🇨
Chad,Republic of Chad,TD,TCD,148,Africa,Middle Africa,N'Djamena,19340757,1284000,XAF,ara | fra,.td,🇹🇩
Togo,Togolese Republic,TG,TGO,768,Africa,Western Africa,Lomé,8095498,56785,XOF,fra,.tg,🇹🇬
Thailand,Kingdom of Thailand,TH,THA,764,Asia,South-Eastern Asia,Bangkok,65859640,513120,THB,tha,.th | .ไทย,🇹🇭
Tajikistan,Republic of Tajikistan,TJ,TJK,762,Asia,Central Asia,Dushanbe,10499000,143100,TJS,rus | tgk,.tj,🇹🇯
Tokelau,Tokelau,TK,TKL,772,Oceania,Polynesia,Fakaofo,2608,12,NZD,eng | smo | tkl,.tk,🇹🇰
Turkmenistan,Turkmenistan,TM,TKM,795,Asia,Central Asia,Ashgabat,7057841,488100,TMT,rus | tuk,.tm,🇹🇲
Timor-Leste,Democratic Republic of Timor-Leste,TL,TLS,626,Asia,South-Eastern Asia,Dili,1391221,14874,USD,por | tet,.tl,🇹🇱
Tonga,Kingdom of Tonga,TO,TON,776,Oceania,Polynesia,Nuku'alofa,100179,747,TOP,eng | ton,.to,🇹🇴
Trinidad and Tobago,Republic of Trinidad and Tobago,TT,TTO,780,Americas,Caribbean,Port of Spain,1367764,5130,TTD,eng,.tt,🇹🇹
Tunisia,Tunisian Republic,TN,TUN,788,Africa,Northern Africa,Tunis,11972169,163610,TND,ara,.tn,🇹🇳
Turkey,Republic of Turkey,TR,TUR,792,Asia,Western Asia,Ankara,85664944,783562,TRY,tur,.tr,🇹🇷
Tuvalu,Tuvalu,TV,TUV,798,Oceania,Polynesia,Funafuti,10643,26,AUD | TVD,eng | tvl,.tv,🇹🇻
Taiwan,Republic of China (Taiwan),TW,TWN,158,Asia,Eastern Asia,Taipei,23317031,36197,TWD,zho,.tw | .台灣 | .台湾,🇹🇼
Tanzania,United Republic of Tanzania,TZ,TZA,834,Africa,Eastern Africa,Dodoma,68153004,947303,TZS,eng | swa,.tz,🇹🇿
Uganda,Republic of Uganda,UG,UGA,800,Africa,Eastern Africa,Kampala,45905417,241550,UGX,eng | swa,.ug,🇺🇬
Ukraine,Ukraine,UA,UKR,804,Europe,Eastern Europe,Kyiv,32862000,603550,UAH,ukr,.ua | .укр,🇺🇦
United States Minor Outlying Islands,United States Minor Outlying Islands,UM,UMI,581,Americas,North America,Washington DC,0,34.2,USD,eng,.us,🇺🇲
Uruguay,Oriental Republic of Uruguay,UY,URY,858,Americas,South America,Montevideo,3499451,181034,UYU,spa,.uy,🇺🇾
United States,United States of America,US,USA,840,Americas,North America,"Washington, D.C.",340110988,9525067,USD,eng,.us,🇺🇸
Uzbekistan,Republic of Uzbekistan,UZ,UZB,860,Asia,Central Asia,Tashkent,37859698,447400,UZS,rus | uzb,.uz,🇺🇿
Vatican City,Vatican City State,VA,VAT,336,Europe,Southern Europe,Vatican City,882,0.49,EUR,ita | lat,.va,🇻🇦
Saint Vincent and the Grenadines,Saint Vincent and the Grenadines,VC,VCT,670,Americas,Caribbean,Kingstown,110872,389,XCD,eng,.vc,🇻🇨
Venezuela,Bolivarian Republic of Venezuela,VE,VEN,862,Americas,South America,Caracas,28517000,916445,VES,spa,.ve,🇻🇪
British Virgin Islands,Virgin Islands,VG,VGB,092,Americas,Caribbean,Road Town,39471,151,USD,eng,.vg,🇻🇬
United States Virgin Islands,Virgin Islands of the United States,VI,VIR,850,Americas,Caribbean,Charlotte Amalie,87146,347,USD,eng,.vi,🇻🇮
Vietnam,Socialist Republic of Vietnam,VN,VNM,704,Asia,South-Eastern Asia,Hanoi,101343800,331212,VND,vie,.vn,🇻🇳
Vanuatu,Republic of Vanuatu,VU,VUT,548,Oceania,Melanesia,Port Vila,321409,12189,VUV,bis | eng | fra,.vu,🇻🇺
Wallis and Futuna,Territory of the Wallis and Futuna Islands,WF,WLF,876,Oceania,Polynesia,Mata-Utu,11620,142,XPF,fra,.wf,🇼🇫
Samoa,Independent State of Samoa,WS,WSM,882,Oceania,Polynesia,Apia,205557,2842,WST,eng | smo,.ws,🇼🇸
Yemen,Republic of Yemen,YE,YEM,887,Asia,Western Asia,Sana'a,32684503,527968,YER,ara,.ye,🇾🇪
South Africa,Republic of South Africa,ZA,ZAF,710,Africa,Southern Africa,Pretoria | Bloemfontein | Cape Town,63100945,1221037,ZAR,afr | eng | nbl | nso | sot | ssw | tsn | tso | ven | xho | zul,.za,🇿🇦
Zambia,Republic of Zambia,ZM,ZMB,894,Africa,Eastern Africa,Lusaka,19693423,752612,ZMW,eng,.zm,🇿🇲
Zimbabwe,Republic of Zimbabwe,ZW,ZWE,716,Africa,Southern Africa,Harare,17073087,390757,ZWL,bwg | eng | kck | khi | ndc | nde | nya | sna | sot | toi | tsn | tso | ven | xho | zib,.zw,🇿🇼
1 name_common name_official alpha2 alpha3 numeric region subregion capital population area_km2 currencies languages tlds flag
2 Aruba Aruba AW ABW 533 Americas Caribbean Oranjestad 107566 180 AWG nld | pap .aw 🇦🇼
3 Afghanistan Islamic Republic of Afghanistan AF AFG 004 Asia Southern Asia Kabul 43844000 652230 AFN prs | pus | tuk .af 🇦🇫
4 Angola Republic of Angola AO AGO 024 Africa Middle Africa Luanda 36170961 1246700 AOA por .ao 🇦🇴
5 Anguilla Anguilla AI AIA 660 Americas Caribbean The Valley 16010 91 XCD eng .ai 🇦🇮
6 Åland Islands Åland Islands AX ALA 248 Europe Northern Europe Mariehamn 30654 1580 EUR swe .ax 🇦🇽
7 Albania Republic of Albania AL ALB 008 Europe Southeast Europe Tirana 2363314 28748 ALL sqi .al 🇦🇱
8 Andorra Principality of Andorra AD AND 020 Europe Southern Europe Andorra la Vella 88406 468 EUR cat .ad 🇦🇩
9 United Arab Emirates United Arab Emirates AE ARE 784 Asia Western Asia Abu Dhabi 11294243 83600 AED ara .ae | امارات. 🇦🇪
10 Argentina Argentine Republic AR ARG 032 Americas South America Buenos Aires 46735004 2780400 ARS grn | spa .ar 🇦🇷
11 Armenia Republic of Armenia AM ARM 051 Asia Western Asia Yerevan 3076200 29743 AMD hye .am 🇦🇲
12 American Samoa American Samoa AS ASM 016 Oceania Polynesia Pago Pago 49710 199 USD eng | smo .as 🇦🇸
13 Antarctica Antarctica AQ ATA 010 Antarctic 1300 14000000 .aq 🇦🇶
14 French Southern and Antarctic Lands Territory of the French Southern and Antarctic Lands TF ATF 260 Antarctic Port-aux-Français 400 7747 EUR fra .tf 🇹🇫
15 Antigua and Barbuda Antigua and Barbuda AG ATG 028 Americas Caribbean Saint John's 103603 442 XCD eng .ag 🇦🇬
16 Australia Commonwealth of Australia AU AUS 036 Oceania Australia and New Zealand Canberra 27536874 7692024 AUD eng .au 🇦🇺
17 Austria Republic of Austria AT AUT 040 Europe Central Europe Vienna 9200931 83871 EUR deu .at 🇦🇹
18 Azerbaijan Republic of Azerbaijan AZ AZE 031 Asia Western Asia Baku 10241722 86600 AZN aze .az 🇦🇿
19 Burundi Republic of Burundi BI BDI 108 Africa Eastern Africa Gitega 12332788 27834 BIF fra | run .bi 🇧🇮
20 Belgium Kingdom of Belgium BE BEL 056 Europe Western Europe Brussels 11825551 30528 EUR deu | fra | nld .be 🇧🇪
21 Benin Republic of Benin BJ BEN 204 Africa Western Africa Porto-Novo 13224860 112622 XOF fra .bj 🇧🇯
22 Burkina Faso Burkina Faso BF BFA 854 Africa Western Africa Ouagadougou 24070553 272967 XOF fra .bf 🇧🇫
23 Bangladesh People's Republic of Bangladesh BD BGD 050 Asia Southern Asia Dhaka 169828911 147570 BDT ben .bd 🇧🇩
24 Bulgaria Republic of Bulgaria BG BGR 100 Europe Southeast Europe Sofia 6437360 110879 BGN bul .bg 🇧🇬
25 Bahrain Kingdom of Bahrain BH BHR 048 Asia Western Asia Manama 1594654 765 BHD ara .bh 🇧🇭
26 Bahamas Commonwealth of the Bahamas BS BHS 044 Americas Caribbean Nassau 398165 13943 BSD | USD eng .bs 🇧🇸
27 Bosnia and Herzegovina Bosnia and Herzegovina BA BIH 070 Europe Southeast Europe Sarajevo 3422000 51209 BAM bos | hrv | srp .ba 🇧🇦
28 Saint Barthélemy Collectivity of Saint Barthélemy BL BLM 652 Americas Caribbean Gustavia 10562 21 EUR fra .bl 🇧🇱
29 Saint Helena, Ascension and Tristan da Cunha Saint Helena, Ascension and Tristan da Cunha SH SHN 654 Africa Western Africa Jamestown 5651 394 GBP | SHP eng .sh | .ac 🇸🇭
30 Belarus Republic of Belarus BY BLR 112 Europe Eastern Europe Minsk 9109280 207600 BYN bel | rus .by 🇧🇾
31 Belize Belize BZ BLZ 084 Americas Central America Belmopan 417634 22966 BZD bjz | eng | spa .bz 🇧🇿
32 Bermuda Bermuda BM BMU 060 Americas North America Hamilton 64055 54 BMD eng .bm 🇧🇲
33 Bolivia Plurinational State of Bolivia BO BOL 068 Americas South America Sucre 11365333 1098581 BOB aym | grn | que | spa .bo 🇧🇴
34 Caribbean Netherlands Bonaire, Sint Eustatius and Saba BQ BES 535 Americas Caribbean Kralendijk 31980 328 USD eng | nld | pap .bq | .nl 🇧🇶
35 Brazil Federative Republic of Brazil BR BRA 076 Americas South America Brasília 213421037 8515767 BRL por .br 🇧🇷
36 Barbados Barbados BB BRB 052 Americas Caribbean Bridgetown 267800 430 BBD eng .bb 🇧🇧
37 Brunei Nation of Brunei, Abode of Peace BN BRN 096 Asia South-Eastern Asia Bandar Seri Begawan 455500 5765 BND | SGD msa .bn 🇧🇳
38 Bhutan Kingdom of Bhutan BT BTN 064 Asia Southern Asia Thimphu 784043 38394 BTN | INR dzo .bt 🇧🇹
39 Bouvet Island Bouvet Island BV BVT 074 Antarctic 0 49 nor .bv 🇧🇻
40 Botswana Republic of Botswana BW BWA 072 Africa Southern Africa Gaborone 2359609 582000 BWP eng | tsn .bw 🇧🇼
41 Central African Republic Central African Republic CF CAF 140 Africa Middle Africa Bangui 6470307 622984 XAF fra | sag .cf 🇨🇫
42 Canada Canada CA CAN 124 Americas North America Ottawa 41651653 9984670 CAD eng | fra .ca 🇨🇦
43 Cocos (Keeling) Islands Territory of the Cocos (Keeling) Islands CC CCK 166 Oceania Australia and New Zealand West Island 593 14 AUD eng .cc 🇨🇨
44 Switzerland Swiss Confederation CH CHE 756 Europe Western Europe Bern 9082848 41284 CHF fra | gsw | ita | roh .ch 🇨🇭
45 Chile Republic of Chile CL CHL 152 Americas South America Santiago 20206953 756102 CLP spa .cl 🇨🇱
46 China People's Republic of China CN CHN 156 Asia Eastern Asia Beijing 1408280000 9706961 CNY zho .cn | .中国 | .中國 | .公司 | .网络 🇨🇳
47 Ivory Coast Republic of Côte d'Ivoire CI CIV 384 Africa Western Africa Yamoussoukro 31719275 322463 XOF fra .ci 🇨🇮
48 Cameroon Republic of Cameroon CM CMR 120 Africa Middle Africa Yaoundé 29442327 475442 XAF eng | fra .cm 🇨🇲
49 DR Congo Democratic Republic of the Congo CD COD 180 Africa Middle Africa Kinshasa 112832000 2344858 CDF fra | kon | lin | lua | swa .cd 🇨🇩
50 Republic of the Congo Republic of the Congo CG COG 178 Africa Middle Africa Brazzaville 6142180 342000 XAF fra | kon | lin .cg 🇨🇬
51 Cook Islands Cook Islands CK COK 184 Oceania Polynesia Avarua 15040 236 CKD | NZD eng | rar .ck 🇨🇰
52 Colombia Republic of Colombia CO COL 170 Americas South America Bogotá 53057212 1141748 COP spa .co 🇨🇴
53 Comoros Union of the Comoros KM COM 174 Africa Eastern Africa Moroni 919901 1862 KMF ara | fra | zdj .km 🇰🇲
54 Cape Verde Republic of Cabo Verde CV CPV 132 Africa Western Africa Praia 491233 4033 CVE por .cv 🇨🇻
55 Costa Rica Republic of Costa Rica CR CRI 188 Americas Central America San José 5309625 51100 CRC spa .cr 🇨🇷
56 Cuba Republic of Cuba CU CUB 192 Americas Caribbean Havana 9748007 109884 CUC | CUP spa .cu 🇨🇺
57 Curaçao Country of Curaçao CW CUW 531 Americas Caribbean Willemstad 156115 444 ANG eng | nld | pap .cw 🇨🇼
58 Christmas Island Territory of Christmas Island CX CXR 162 Oceania Australia and New Zealand Flying Fish Cove 1692 135 AUD eng .cx 🇨🇽
59 Cayman Islands Cayman Islands KY CYM 136 Americas Caribbean George Town 84738 264 KYD eng .ky 🇰🇾
60 Cyprus Republic of Cyprus CY CYP 196 Europe Southern Europe Nicosia 1442614 9251 EUR ell | tur .cy 🇨🇾
61 Czechia Czech Republic CZ CZE 203 Europe Central Europe Prague 10882341 78865 CZK ces | slk .cz 🇨🇿
62 Germany Federal Republic of Germany DE DEU 276 Europe Western Europe Berlin 83491249 357114 EUR deu .de 🇩🇪
63 Djibouti Republic of Djibouti DJ DJI 262 Africa Eastern Africa Djibouti 1066809 23200 DJF ara | fra .dj 🇩🇯
64 Dominica Commonwealth of Dominica DM DMA 212 Americas Caribbean Roseau 67408 751 XCD eng .dm 🇩🇲
65 Denmark Kingdom of Denmark DK DNK 208 Europe Northern Europe Copenhagen 6011488 43094 DKK dan .dk 🇩🇰
66 Dominican Republic Dominican Republic DO DOM 214 Americas Caribbean Santo Domingo 10771504 48671 DOP spa .do 🇩🇴
67 Algeria People's Democratic Republic of Algeria DZ DZA 012 Africa Northern Africa Algiers 47400000 2381741 DZD ara .dz | الجزائر. 🇩🇿
68 Ecuador Republic of Ecuador EC ECU 218 Americas South America Quito 18103660 276841 USD spa .ec 🇪🇨
69 Egypt Arab Republic of Egypt EG EGY 818 Africa Northern Africa Cairo 107271260 1002450 EGP ara .eg | .مصر 🇪🇬
70 Eritrea State of Eritrea ER ERI 232 Africa Eastern Africa Asmara 3607000 117600 ERN ara | eng | tir .er 🇪🇷
71 Western Sahara Sahrawi Arab Democratic Republic EH ESH 732 Africa Northern Africa El Aaiún 600904 266000 DZD | MAD | MRU ber | mey | spa .eh 🇪🇭
72 Spain Kingdom of Spain ES ESP 724 Europe Southern Europe Madrid 49315949 505992 EUR cat | eus | glc | spa .es 🇪🇸
73 Estonia Republic of Estonia EE EST 233 Europe Northern Europe Tallinn 1369995 45227 EUR est .ee 🇪🇪
74 Ethiopia Federal Democratic Republic of Ethiopia ET ETH 231 Africa Eastern Africa Addis Ababa 111652998 1104300 ETB amh .et 🇪🇹
75 Finland Republic of Finland FI FIN 246 Europe Northern Europe Helsinki 5650325 338455 EUR fin | swe .fi 🇫🇮
76 Fiji Republic of Fiji FJ FJI 242 Oceania Melanesia Suva 900869 18272 FJD eng | fij | hif .fj 🇫🇯
77 Falkland Islands Falkland Islands FK FLK 238 Americas South America Stanley 3662 12173 FKP eng .fk 🇫🇰
78 France French Republic FR FRA 250 Europe Western Europe Paris 66351959 543908 EUR fra .fr 🇫🇷
79 Faroe Islands Faroe Islands FO FRO 234 Europe Northern Europe Tórshavn 54885 1393 DKK | FOK dan | fao .fo 🇫🇴
80 Micronesia Federated States of Micronesia FM FSM 583 Oceania Micronesia Palikir 105564 702 USD eng .fm 🇫🇲
81 Gabon Gabonese Republic GA GAB 266 Africa Middle Africa Libreville 2469296 267668 XAF fra .ga 🇬🇦
82 United Kingdom United Kingdom of Great Britain and Northern Ireland GB GBR 826 Europe Northern Europe London 69281437 244376 GBP eng .uk 🇬🇧
83 Georgia Georgia GE GEO 268 Asia Western Asia Tbilisi 4000921 69700 GEL kat .ge 🇬🇪
84 Guernsey Bailiwick of Guernsey GG GGY 831 Europe Northern Europe St. Peter Port 64781 78 GBP | GGP eng | fra | nfr .gg 🇬🇬
85 Ghana Republic of Ghana GH GHA 288 Africa Western Africa Accra 33742380 238533 GHS eng .gh 🇬🇭
86 Gibraltar Gibraltar GI GIB 292 Europe Southern Europe Gibraltar 38000 6 GIP eng .gi 🇬🇮
87 Guinea Republic of Guinea GN GIN 324 Africa Western Africa Conakry 14363931 245857 GNF fra .gn 🇬🇳
88 Guadeloupe Guadeloupe GP GLP 312 Americas Caribbean Basse-Terre 378561 1628 EUR fra .gp 🇬🇵
89 Gambia Republic of the Gambia GM GMB 270 Africa Western Africa Banjul 2422712 10689 GMD eng .gm 🇬🇲
90 Guinea-Bissau Republic of Guinea-Bissau GW GNB 624 Africa Western Africa Bissau 1781308 36125 XOF por | pov .gw 🇬🇼
91 Equatorial Guinea Republic of Equatorial Guinea GQ GNQ 226 Africa Middle Africa Ciudad de la Paz 1668768 28051 XAF fra | por | spa .gq 🇬🇶
92 Greece Hellenic Republic GR GRC 300 Europe Southern Europe Athens 10400720 131990 EUR ell .gr 🇬🇷
93 Grenada Grenada GD GRD 308 Americas Caribbean St. George's 109021 344 XCD eng .gd 🇬🇩
94 Greenland Greenland GL GRL 304 Americas North America Nuuk 56542 2166086 DKK kal .gl 🇬🇱
95 Guatemala Republic of Guatemala GT GTM 320 Americas Central America Guatemala City 18079810 108889 GTQ spa .gt 🇬🇹
96 French Guiana Guiana GF GUF 254 Americas South America Cayenne 292354 83534 EUR fra .gf 🇬🇫
97 Guam Guam GU GUM 316 Oceania Micronesia Hagåtña 153836 549 USD cha | eng | spa .gu 🇬🇺
98 Guyana Co-operative Republic of Guyana GY GUY 328 Americas South America Georgetown 772975 214969 GYD eng .gy 🇬🇾
99 Hong Kong Hong Kong Special Administrative Region of the People's Republic of China HK HKG 344 Asia Eastern Asia City of Victoria 7527500 1104 HKD eng | zho .hk | .香港 🇭🇰
100 Heard Island and McDonald Islands Heard Island and McDonald Islands HM HMD 334 Antarctic 0 412 eng .hm | .aq 🇭🇲
101 Honduras Republic of Honduras HN HND 340 Americas Central America Tegucigalpa 9892632 112492 HNL spa .hn 🇭🇳
102 Croatia Republic of Croatia HR HRV 191 Europe Southeast Europe Zagreb 3866233 56594 EUR hrv .hr 🇭🇷
103 Haiti Republic of Haiti HT HTI 332 Americas Caribbean Port-au-Prince 11867032 27750 HTG fra | hat .ht 🇭🇹
104 Hungary Hungary HU HUN 348 Europe Central Europe Budapest 9539502 93028 HUF hun .hu 🇭🇺
105 Indonesia Republic of Indonesia ID IDN 360 Asia South-Eastern Asia Jakarta 284438782 1904569 IDR ind .id 🇮🇩
106 Isle of Man Isle of Man IM IMN 833 Europe Northern Europe Douglas 84530 572 GBP | IMP eng | glv .im 🇮🇲
107 India Republic of India IN IND 356 Asia Southern Asia New Delhi 1417492000 3287263 INR eng | hin | tam .in 🇮🇳
108 British Indian Ocean Territory British Indian Ocean Territory IO IOT 086 Africa Eastern Africa Diego Garcia 0 60 USD eng .io 🇮🇴
109 Ireland Republic of Ireland IE IRL 372 Europe Northern Europe Dublin 5458600 70273 EUR eng | gle .ie 🇮🇪
110 Iran Islamic Republic of Iran IR IRN 364 Asia Southern Asia Tehran 85961000 1648195 IRR fas .ir | ایران. 🇮🇷
111 Iraq Republic of Iraq IQ IRQ 368 Asia Western Asia Baghdad 46118793 438317 IQD ara | arc | ckb .iq 🇮🇶
112 Iceland Iceland IS ISL 352 Europe Northern Europe Reykjavik 391810 103000 ISK isl .is 🇮🇸
113 Israel State of Israel IL ISR 376 Asia Western Asia Jerusalem 10134800 21937 ILS ara | heb .il 🇮🇱
114 Italy Italian Republic IT ITA 380 Europe Southern Europe Rome 58927633 301336 EUR cat | ita .it 🇮🇹
115 Jamaica Jamaica JM JAM 388 Americas Caribbean Kingston 2825544 10991 JMD eng | jam .jm 🇯🇲
116 Jersey Bailiwick of Jersey JE JEY 832 Europe Northern Europe Saint Helier 103267 116 GBP | JEP eng | fra | nrf .je 🇯🇪
117 Jordan Hashemite Kingdom of Jordan JO JOR 400 Asia Western Asia Amman 11734000 89342 JOD ara .jo | الاردن. 🇯🇴
118 Japan Japan JP JPN 392 Asia Eastern Asia Tokyo 123210000 377930 JPY jpn .jp | .みんな 🇯🇵
119 Kazakhstan Republic of Kazakhstan KZ KAZ 398 Asia Central Asia Astana 20426568 2724900 KZT kaz | rus .kz | .қаз 🇰🇿
120 Kenya Republic of Kenya KE KEN 404 Africa Eastern Africa Nairobi 53330978 580367 KES eng | swa .ke 🇰🇪
121 Kyrgyzstan Kyrgyz Republic KG KGZ 417 Asia Central Asia Bishkek 7281800 199951 KGS kir | rus .kg 🇰🇬
122 Cambodia Kingdom of Cambodia KH KHM 116 Asia South-Eastern Asia Phnom Penh 17577760 181035 KHR | USD khm .kh 🇰🇭
123 Kiribati Independent and Sovereign Republic of Kiribati KI KIR 296 Oceania Micronesia South Tarawa 120740 811 AUD | KID eng | gil .ki 🇰🇮
124 Saint Kitts and Nevis Federation of Saint Christopher and Nevis KN KNA 659 Americas Caribbean Basseterre 51320 261 XCD eng .kn 🇰🇳
125 South Korea Republic of Korea KR KOR 410 Asia Eastern Asia Seoul 51159889 100210 KRW kor .kr | .한국 🇰🇷
126 Kosovo Republic of Kosovo XK UNK Europe Southeast Europe Pristina 1585566 10908 EUR sqi | srp 🇽🇰
127 Kuwait State of Kuwait KW KWT 414 Asia Western Asia Kuwait City 4881254 17818 KWD ara .kw 🇰🇼
128 Laos Lao People's Democratic Republic LA LAO 418 Asia South-Eastern Asia Vientiane 7647000 236800 LAK lao .la 🇱🇦
129 Lebanon Lebanese Republic LB LBN 422 Asia Western Asia Beirut 5490000 10452 LBP ara | fra .lb 🇱🇧
130 Liberia Republic of Liberia LR LBR 430 Africa Western Africa Monrovia 5248621 111369 LRD eng .lr 🇱🇷
131 Libya State of Libya LY LBY 434 Africa Northern Africa Tripoli 7459000 1759540 LYD ara .ly 🇱🇾
132 Saint Lucia Saint Lucia LC LCA 662 Americas Caribbean Castries 184100 616 XCD eng .lc 🇱🇨
133 Liechtenstein Principality of Liechtenstein LI LIE 438 Europe Western Europe Vaduz 40900 160 CHF deu .li 🇱🇮
134 Sri Lanka Democratic Socialist Republic of Sri Lanka LK LKA 144 Asia Southern Asia Sri Jayawardenepura Kotte 21763170 65610 LKR sin | tam .lk | .இலங்கை | .ලංකා 🇱🇰
135 Lesotho Kingdom of Lesotho LS LSO 426 Africa Southern Africa Maseru 2116427 30355 LSL | ZAR eng | sot .ls 🇱🇸
136 Lithuania Republic of Lithuania LT LTU 440 Europe Northern Europe Vilnius 2894886 65300 EUR lit .lt 🇱🇹
137 Luxembourg Grand Duchy of Luxembourg LU LUX 442 Europe Western Europe Luxembourg 681973 2586 EUR deu | fra | ltz .lu 🇱🇺
138 Latvia Republic of Latvia LV LVA 428 Europe Northern Europe Riga 1829000 64559 EUR lav .lv 🇱🇻
139 Macau Macao Special Administrative Region of the People's Republic of China MO MAC 446 Asia Eastern Asia 685900 30 MOP por | zho .mo 🇲🇴
140 Saint Martin Saint Martin MF MAF 663 Americas Caribbean Marigot 31496 53 EUR fra .fr | .gp 🇲🇫
141 Morocco Kingdom of Morocco MA MAR 504 Africa Northern Africa Rabat 36828330 446550 MAD ara | ber .ma | المغرب. 🇲🇦
142 Monaco Principality of Monaco MC MCO 492 Europe Western Europe Monaco 38423 2.02 EUR fra .mc 🇲🇨
143 Moldova Republic of Moldova MD MDA 498 Europe Eastern Europe Chișinău 2749076 33847 MDL ron .md 🇲🇩
144 Madagascar Republic of Madagascar MG MDG 450 Africa Eastern Africa Antananarivo 31727042 587041 MGA fra | mlg .mg 🇲🇬
145 Maldives Republic of the Maldives MV MDV 462 Asia Southern Asia Malé 515132 300 MVR div .mv 🇲🇻
146 Mexico United Mexican States MX MEX 484 Americas North America Mexico City 130575786 1964375 MXN spa .mx 🇲🇽
147 Marshall Islands Republic of the Marshall Islands MH MHL 584 Oceania Micronesia Majuro 42418 181 USD eng | mah .mh 🇲🇭
148 North Macedonia Republic of North Macedonia MK MKD 807 Europe Southeast Europe Skopje 1822612 25713 MKD mkd .mk 🇲🇰
149 Mali Republic of Mali ML MLI 466 Africa Western Africa Bamako 22395489 1240192 XOF fra .ml 🇲🇱
150 Malta Republic of Malta MT MLT 470 Europe Southern Europe Valletta 574250 316 EUR eng | mlt .mt 🇲🇹
151 Myanmar Republic of the Union of Myanmar MM MMR 104 Asia South-Eastern Asia Naypyidaw 51316756 676578 MMK mya .mm 🇲🇲
152 Montenegro Montenegro ME MNE 499 Europe Southeast Europe Podgorica 623327 13812 EUR cnr .me 🇲🇪
153 Mongolia Mongolia MN MNG 496 Asia Eastern Asia Ulan Bator 3544835 1564110 MNT mon .mn 🇲🇳
154 Northern Mariana Islands Commonwealth of the Northern Mariana Islands MP MNP 580 Oceania Micronesia Saipan 47329 464 USD cal | cha | eng .mp 🇲🇵
155 Mozambique Republic of Mozambique MZ MOZ 508 Africa Eastern Africa Maputo 34090466 801590 MZN por .mz 🇲🇿
156 Mauritania Islamic Republic of Mauritania MR MRT 478 Africa Western Africa Nouakchott 4927532 1030700 MRU ara .mr 🇲🇷
157 Montserrat Montserrat MS MSR 500 Americas Caribbean Plymouth 4386 102 XCD eng .ms 🇲🇸
158 Martinique Martinique MQ MTQ 474 Americas Caribbean Fort-de-France 349925 1128 EUR fra .mq 🇲🇶
159 Mauritius Republic of Mauritius MU MUS 480 Africa Eastern Africa Port Louis 1243741 2040 MUR eng | fra | mfe .mu 🇲🇺
160 Malawi Republic of Malawi MW MWI 454 Africa Eastern Africa Lilongwe 20734262 118484 MWK eng | nya .mw 🇲🇼
161 Malaysia Malaysia MY MYS 458 Asia South-Eastern Asia Kuala Lumpur 34231700 330803 MYR eng | msa .my 🇲🇾
162 Mayotte Department of Mayotte YT MYT 175 Africa Eastern Africa Mamoudzou 320901 374 EUR fra .yt 🇾🇹
163 Namibia Republic of Namibia NA NAM 516 Africa Southern Africa Windhoek 3022401 825615 NAD | ZAR afr | deu | eng | her | hgm | kwn | loz | ndo | tsn .na 🇳🇦
164 New Caledonia New Caledonia NC NCL 540 Oceania Melanesia Nouméa 264596 18575 XPF fra .nc 🇳🇨
165 Niger Republic of Niger NE NER 562 Africa Western Africa Niamey 26312034 1267000 XOF fra .ne 🇳🇪
166 Norfolk Island Territory of Norfolk Island NF NFK 574 Oceania Australia and New Zealand Kingston 2188 36 AUD eng | pih .nf 🇳🇫
167 Nigeria Federal Republic of Nigeria NG NGA 566 Africa Western Africa Abuja 223800000 923768 NGN eng .ng 🇳🇬
168 Nicaragua Republic of Nicaragua NI NIC 558 Americas Central America Managua 6803886 130373 NIO spa .ni 🇳🇮
169 Niue Niue NU NIU 570 Oceania Polynesia Alofi 1681 260 NZD eng | niu .nu 🇳🇺
170 Netherlands Kingdom of the Netherlands NL NLD 528 Europe Western Europe Amsterdam 18100436 41865 EUR nld .nl 🇳🇱
171 Norway Kingdom of Norway NO NOR 578 Europe Northern Europe Oslo 5606944 386224 NOK nno | nob | smi .no 🇳🇴
172 Nepal Federal Democratic Republic of Nepal NP NPL 524 Asia Southern Asia Kathmandu 29911840 147181 NPR nep .np 🇳🇵
173 Nauru Republic of Nauru NR NRU 520 Oceania Micronesia Yaren 11680 21 AUD eng | nau .nr 🇳🇷
174 New Zealand New Zealand NZ NZL 554 Oceania Australia and New Zealand Wellington 5324700 268838 NZD eng | mri | nzs .nz 🇳🇿
175 Oman Sultanate of Oman OM OMN 512 Asia Western Asia Muscat 5343630 309500 OMR ara .om 🇴🇲
176 Pakistan Islamic Republic of Pakistan PK PAK 586 Asia Southern Asia Islamabad 241499431 796095 PKR eng | urd .pk 🇵🇰
177 Panama Republic of Panama PA PAN 591 Americas Central America Panama City 4064780 75417 PAB | USD spa .pa 🇵🇦
178 Pitcairn Islands Pitcairn Group of Islands PN PCN 612 Oceania Polynesia Adamstown 35 47 NZD eng .pn 🇵🇳
179 Peru Republic of Peru PE PER 604 Americas South America Lima 34350244 1285216 PEN aym | que | spa .pe 🇵🇪
180 Philippines Republic of the Philippines PH PHL 608 Asia South-Eastern Asia Manila 114123600 342353 PHP eng | fil .ph 🇵🇭
181 Palau Republic of Palau PW PLW 585 Oceania Micronesia Ngerulmud 16733 459 USD eng | pau .pw 🇵🇼
182 Papua New Guinea Independent State of Papua New Guinea PG PNG 598 Oceania Melanesia Port Moresby 11781559 462840 PGK eng | hmo | tpi .pg 🇵🇬
183 Poland Republic of Poland PL POL 616 Europe Central Europe Warsaw 37392000 312679 PLN pol .pl 🇵🇱
184 Puerto Rico Commonwealth of Puerto Rico PR PRI 630 Americas Caribbean San Juan 3203295 8870 USD eng | spa .pr 🇵🇷
185 North Korea Democratic People's Republic of Korea KP PRK 408 Asia Eastern Asia Pyongyang 25950000 120538 KPW kor .kp 🇰🇵
186 Portugal Portuguese Republic PT PRT 620 Europe Southern Europe Lisbon 10749635 92090 EUR por .pt 🇵🇹
187 Paraguay Republic of Paraguay PY PRY 600 Americas South America Asunción 6109644 406752 PYG grn | spa .py 🇵🇾
188 Palestine State of Palestine PS PSE 275 Asia Western Asia Ramallah | Jerusalem 5483450 6220 EGP | ILS | JOD ara .ps | فلسطين. 🇵🇸
189 French Polynesia French Polynesia PF PYF 258 Oceania Polynesia Papeetē 279500 4167 XPF fra .pf 🇵🇫
190 Qatar State of Qatar QA QAT 634 Asia Western Asia Doha 3173024 11586 QAR ara .qa | قطر. 🇶🇦
191 Réunion Réunion Island RE REU 638 Africa Eastern Africa Saint-Denis 896175 2511 EUR fra .re 🇷🇪
192 Romania Romania RO ROU 642 Europe Southeast Europe Bucharest 19036031 238391 RON ron .ro 🇷🇴
193 Russia Russian Federation RU RUS 643 Europe Eastern Europe Moscow 146028325 17098246 RUB rus .ru | .su | .рф 🇷🇺
194 Rwanda Republic of Rwanda RW RWA 646 Africa Eastern Africa Kigali 14104969 26338 RWF eng | fra | kin .rw 🇷🇼
195 Saudi Arabia Kingdom of Saudi Arabia SA SAU 682 Asia Western Asia Riyadh 35300280 2149690 SAR ara .sa | .السعودية 🇸🇦
196 Sudan Republic of the Sudan SD SDN 729 Africa Northern Africa Khartoum 51662000 1886068 SDG ara | eng .sd 🇸🇩
197 Senegal Republic of Senegal SN SEN 686 Africa Western Africa Dakar 18593258 196722 XOF fra .sn 🇸🇳
198 Singapore Republic of Singapore SG SGP 702 Asia South-Eastern Asia Singapore 6110200 710 SGD eng | msa | tam | zho .sg | .新加坡 | .சிங்கப்பூர் 🇸🇬
199 South Georgia South Georgia and the South Sandwich Islands GS SGS 239 Antarctic King Edward Point 0 3903 GBP eng .gs 🇬🇸
200 Svalbard and Jan Mayen Svalbard og Jan Mayen SJ SJM 744 Europe Northern Europe Longyearbyen 2530 61399 NOK nor .sj 🇸🇯
201 Solomon Islands Solomon Islands SB SLB 090 Oceania Melanesia Honiara 750325 28896 SBD eng .sb 🇸🇧
202 Sierra Leone Republic of Sierra Leone SL SLE 694 Africa Western Africa Freetown 9077691 71740 SLE eng .sl 🇸🇱
203 El Salvador Republic of El Salvador SV SLV 222 Americas Central America San Salvador 6029976 21041 USD spa .sv 🇸🇻
204 San Marino Republic of San Marino SM SMR 674 Europe Southern Europe City of San Marino 34132 61 EUR ita .sm 🇸🇲
205 Somalia Federal Republic of Somalia SO SOM 706 Africa Eastern Africa Mogadishu 19655000 637657 SOS ara | som .so 🇸🇴
206 Saint Pierre and Miquelon Saint Pierre and Miquelon PM SPM 666 Americas North America Saint-Pierre 5819 242 EUR fra .pm 🇵🇲
207 Serbia Republic of Serbia RS SRB 688 Europe Southeast Europe Belgrade 6567783 77589 RSD srp .rs | .срб 🇷🇸
208 South Sudan Republic of South Sudan SS SSD 728 Africa Middle Africa Juba 15786898 619745 SSP eng .ss 🇸🇸
209 São Tomé and Príncipe Democratic Republic of São Tomé and Príncipe ST STP 678 Africa Middle Africa São Tomé 209607 964 STN por .st 🇸🇹
210 Suriname Republic of Suriname SR SUR 740 Americas South America Paramaribo 616500 163820 SRD nld .sr 🇸🇷
211 Slovakia Slovak Republic SK SVK 703 Europe Central Europe Bratislava 5413813 49037 EUR slk .sk 🇸🇰
212 Slovenia Republic of Slovenia SI SVN 705 Europe Central Europe Ljubljana 2130638 20273 EUR slv .si 🇸🇮
213 Sweden Kingdom of Sweden SE SWE 752 Europe Northern Europe Stockholm 10605098 450295 SEK swe .se 🇸🇪
214 Eswatini Kingdom of Eswatini SZ SWZ 748 Africa Southern Africa Mbabane 1235549 17364 SZL | ZAR eng | ssw .sz 🇸🇿
215 Sint Maarten Sint Maarten SX SXM 534 Americas Caribbean Philipsburg 41349 34 ANG eng | fra | nld .sx 🇸🇽
216 Seychelles Republic of Seychelles SC SYC 690 Africa Eastern Africa Victoria 122729 452 SCR crs | eng | fra .sc 🇸🇨
217 Syria Syrian Arab Republic SY SYR 760 Asia Western Asia Damascus 25620000 185180 SYP ara .sy | سوريا. 🇸🇾
218 Turks and Caicos Islands Turks and Caicos Islands TC TCA 796 Americas Caribbean Cockburn Town 50828 948 USD eng .tc 🇹🇨
219 Chad Republic of Chad TD TCD 148 Africa Middle Africa N'Djamena 19340757 1284000 XAF ara | fra .td 🇹🇩
220 Togo Togolese Republic TG TGO 768 Africa Western Africa Lomé 8095498 56785 XOF fra .tg 🇹🇬
221 Thailand Kingdom of Thailand TH THA 764 Asia South-Eastern Asia Bangkok 65859640 513120 THB tha .th | .ไทย 🇹🇭
222 Tajikistan Republic of Tajikistan TJ TJK 762 Asia Central Asia Dushanbe 10499000 143100 TJS rus | tgk .tj 🇹🇯
223 Tokelau Tokelau TK TKL 772 Oceania Polynesia Fakaofo 2608 12 NZD eng | smo | tkl .tk 🇹🇰
224 Turkmenistan Turkmenistan TM TKM 795 Asia Central Asia Ashgabat 7057841 488100 TMT rus | tuk .tm 🇹🇲
225 Timor-Leste Democratic Republic of Timor-Leste TL TLS 626 Asia South-Eastern Asia Dili 1391221 14874 USD por | tet .tl 🇹🇱
226 Tonga Kingdom of Tonga TO TON 776 Oceania Polynesia Nuku'alofa 100179 747 TOP eng | ton .to 🇹🇴
227 Trinidad and Tobago Republic of Trinidad and Tobago TT TTO 780 Americas Caribbean Port of Spain 1367764 5130 TTD eng .tt 🇹🇹
228 Tunisia Tunisian Republic TN TUN 788 Africa Northern Africa Tunis 11972169 163610 TND ara .tn 🇹🇳
229 Turkey Republic of Turkey TR TUR 792 Asia Western Asia Ankara 85664944 783562 TRY tur .tr 🇹🇷
230 Tuvalu Tuvalu TV TUV 798 Oceania Polynesia Funafuti 10643 26 AUD | TVD eng | tvl .tv 🇹🇻
231 Taiwan Republic of China (Taiwan) TW TWN 158 Asia Eastern Asia Taipei 23317031 36197 TWD zho .tw | .台灣 | .台湾 🇹🇼
232 Tanzania United Republic of Tanzania TZ TZA 834 Africa Eastern Africa Dodoma 68153004 947303 TZS eng | swa .tz 🇹🇿
233 Uganda Republic of Uganda UG UGA 800 Africa Eastern Africa Kampala 45905417 241550 UGX eng | swa .ug 🇺🇬
234 Ukraine Ukraine UA UKR 804 Europe Eastern Europe Kyiv 32862000 603550 UAH ukr .ua | .укр 🇺🇦
235 United States Minor Outlying Islands United States Minor Outlying Islands UM UMI 581 Americas North America Washington DC 0 34.2 USD eng .us 🇺🇲
236 Uruguay Oriental Republic of Uruguay UY URY 858 Americas South America Montevideo 3499451 181034 UYU spa .uy 🇺🇾
237 United States United States of America US USA 840 Americas North America Washington, D.C. 340110988 9525067 USD eng .us 🇺🇸
238 Uzbekistan Republic of Uzbekistan UZ UZB 860 Asia Central Asia Tashkent 37859698 447400 UZS rus | uzb .uz 🇺🇿
239 Vatican City Vatican City State VA VAT 336 Europe Southern Europe Vatican City 882 0.49 EUR ita | lat .va 🇻🇦
240 Saint Vincent and the Grenadines Saint Vincent and the Grenadines VC VCT 670 Americas Caribbean Kingstown 110872 389 XCD eng .vc 🇻🇨
241 Venezuela Bolivarian Republic of Venezuela VE VEN 862 Americas South America Caracas 28517000 916445 VES spa .ve 🇻🇪
242 British Virgin Islands Virgin Islands VG VGB 092 Americas Caribbean Road Town 39471 151 USD eng .vg 🇻🇬
243 United States Virgin Islands Virgin Islands of the United States VI VIR 850 Americas Caribbean Charlotte Amalie 87146 347 USD eng .vi 🇻🇮
244 Vietnam Socialist Republic of Vietnam VN VNM 704 Asia South-Eastern Asia Hanoi 101343800 331212 VND vie .vn 🇻🇳
245 Vanuatu Republic of Vanuatu VU VUT 548 Oceania Melanesia Port Vila 321409 12189 VUV bis | eng | fra .vu 🇻🇺
246 Wallis and Futuna Territory of the Wallis and Futuna Islands WF WLF 876 Oceania Polynesia Mata-Utu 11620 142 XPF fra .wf 🇼🇫
247 Samoa Independent State of Samoa WS WSM 882 Oceania Polynesia Apia 205557 2842 WST eng | smo .ws 🇼🇸
248 Yemen Republic of Yemen YE YEM 887 Asia Western Asia Sana'a 32684503 527968 YER ara .ye 🇾🇪
249 South Africa Republic of South Africa ZA ZAF 710 Africa Southern Africa Pretoria | Bloemfontein | Cape Town 63100945 1221037 ZAR afr | eng | nbl | nso | sot | ssw | tsn | tso | ven | xho | zul .za 🇿🇦
250 Zambia Republic of Zambia ZM ZMB 894 Africa Eastern Africa Lusaka 19693423 752612 ZMW eng .zm 🇿🇲
251 Zimbabwe Republic of Zimbabwe ZW ZWE 716 Africa Southern Africa Harare 17073087 390757 ZWL bwg | eng | kck | khi | ndc | nde | nya | sna | sot | toi | tsn | tso | ven | xho | zib .zw 🇿🇼
@@ -0,0 +1,241 @@
rank,country,population,share,date,source
1,World,8232000000,100%,13 Jun 2025,UN projection[1]
2,India,1429404000,17.3%,1 Jul 2026,Official projection
3,China,1404890000,17.0%,31 Dec 2025,Official estimate
4,United States,341784857,4.1%,1 Jul 2025,Official estimate
5,Indonesia,290125073,3.5%,30 Jun 2026,National annual projection
6,Pakistan,241499431,2.9%,1 Mar 2023,2023 census result
7,Nigeria,223800000,2.7%,1 Jul 2023,Official projection
8,Brazil,214211951,2.6%,1 Jul 2026,Official estimate
9,Bangladesh,169828911,2.1%,14 Jun 2022,2022 census result
10,Russia,146028325,1.8%,1 Jan 2025,Official estimate
11,Mexico,131231919,1.6%,30 Jun 2026,National quarterly estimate
12,Japan,122690000,1.5%,1 Oct 2026,Monthly national estimate
13,Democratic Republic of the Congo,116452162,1.4%,1 Jul 2026,UN projection
14,Philippines,114849400,1.4%,1 Jul 2026,Official projection
15,Ethiopia,111652998,1.3%,1 Jul 2025,National annual projection
16,Egypt,108613296,1.3%,1 Jan 2026,Official estimate
17,Vietnam,102300000,1.2%,31 Dec 2025,Official estimate
18,Iran,87134000,1.1%,21 Mar 2026,Official estimate
19,Turkey,86092168,1.0%,31 Dec 2025,Official estimate
20,Germany,83298787,1.0%,30 Jun 2026,National quarterly estimate
21,Thailand,70250751,0.8%,2025,Preliminary census results
22,Tanzania,70038850,0.8%,1 Jul 2026,Official projection
23,United Kingdom,69487000,0.8%,30 Jun 2025,Official estimate
24,France,69081996,0.8%,1 Jan 2026,Yearly national estimate
25,South Africa,63522380,0.8%,30 Jun 2026,Official estimate
26,Italy,58949500,0.7%,31 Jul 2026,Monthly national estimate
27,Kenya,54227015,0.7%,1 Jul 2026,Official projection
28,Colombia,53399171,0.6%,1 Jan 2026,Official projection
29,Sudan,53282719,0.6%,1 Jul 2026,UN projection
30,Myanmar,51375327,0.6%,15 Oct 2024,2024 census result
31,South Korea,51088284,0.6%,31 Jul 2026,Monthly national estimate
32,Spain,49801559,0.6%,1 Jul 2026,National quarterly estimate
33,Algeria,47400000,0.6%,1 Jan 2025,National annual projection
34,Argentina,46466688,0.6%,1 Jul 2026,National annual projection
35,Iraq,46118793,0.6%,21 Nov 2024,2024 census result
36,Uganda,45905417,0.6%,10 May 2024,2024 census result
37,Afghanistan,43844000,0.5%,1 Jul 2025,UN projection[41][42] (see note)
38,Canada,41798407,0.5%,1 Jul 2026,National quarterly estimate
39,Uzbekistan,39047321,0.5%,15 Jan 2026,2026 census result
40,Angola,38778554,0.5%,1 Jan 2026,National estimate
41,Morocco,37254695,0.4%,1 Jul 2026,National annual projection
42,Poland,37221000,0.4%,31 Aug 2026,Monthly national estimate
43,Saudi Arabia,35300280,0.4%,1 Jul 2024,Official estimate
44,Mozambique,34958973,0.4%,1 Jul 2026,National annual projection
45,Malaysia,34389400,0.4%,30 Jun 2026,National quarterly estimate
46,Ghana,34378768,0.4%,1 Jul 2026,National annual projection
47,Peru,34157732,0.4%,4 Aug 2025,Census 2025
48,Ivory Coast,33293101,0.4%,1 Jul 2026,National annual projection
49,Yemen,32684503,0.4%,1 Jul 2023,Official estimate
50,Madagascar,32658977,0.4%,1 Jul 2026,National annual projection
51,Nepal,30034040,0.4%,1 Jul 2026,National annual projection
52,Cameroon,29442327,0.4%,1 Jul 2025,National annual projection
53,Ukraine,28700000,0.3%,1 Sep 2025,State migration service
54,Venezuela,28633711,0.3%,1 Jul 2026,UN projection
55,Australia,27921150,0.3%,31 Mar 2026,Official projection
56,Niger,27522750,0.3%,1 Jul 2025,National annual projection
57,Syria,26472497,0.3%,1 Jul 2026,Monthly estimate
58,North Korea,25950000,0.3%,1 Jul 2024,National annual projection
59,Burkina Faso,24736828,0.3%,1 Jul 2026,Official projection
60,Mali,23929000,0.3%,1 Jul 2024,Official projection
61,Taiwan,23213251,0.3%,30 Sep 2026,Official estimate
62,Zambia,23003214,0.3%,1 Jul 2026,Official estimate
63,Sri Lanka,21778000,0.3%,1 Jul 2026,Official estimate
64,Malawi,21201635,0.3%,1 Jul 2026,National annual projection
65,Kazakhstan,20618796,0.2%,1 Sep 2026,Official estimate
66,Somalia,20305907,0.2%,1 Jul 2026,UN projection
67,Chile,20150948,0.2%,30 Jun 2026,National annual projection
68,Chad,20031602,0.2%,1 Jul 2026,National annual projection
69,Senegal,19575061,0.2%,1 Jul 2026,National annual projection
70,Romania,19041322,0.2%,1 Jan 2026,Official estimate
71,Guatemala,18312373,0.2%,1 Jul 2026,National annual projection
72,Ecuador,18243816,0.2%,1 Jul 2026,National annual projection
73,Netherlands,18192693,0.2%,30 Sep 2026,Official estimate
74,Cambodia,17816143,0.2%,1 Jul 2026,Official projection
75,Guinea,17521167,0.2%,1 Jul 2025,Census July 2025
76,Zimbabwe,16175966,0.2%,1 Jul 2026,Official projection
77,South Sudan,15786898,0.2%,1 Jul 2025,National annual projection
78,Rwanda,14418145,0.2%,1 Jul 2026,National annual projection
79,Benin,13551992,0.2%,1 Jul 2026,National annual projection
80,Burundi,12332788,0.1%,16 Aug 2024,Preliminary census result
81,Tunisia,11992843,0.1%,1 Jan 2026,National estimate
82,Belgium,11944011,0.1%,1 Aug 2026,Official estimate
83,Jordan,11937000,0.1%,31 Dec 2025,National estimate
84,Haiti,11867032,0.1%,1 Jul 2024,National annual projection
85,Portugal,11424031,0.1%,31 Dec 2025,Official estimate
86,Bolivia,11365333,0.1%,23 Mar 2024,2024 census result
87,United Arab Emirates,11294243,0.1%,31 Dec 2024,Official estimate
88,Czech Republic,10903655,0.1%,30 Jun 2026,Official estimate
89,Dominican Republic,10771504,0.1%,10 Nov 2022,2022 census result
90,Tajikistan,10721000,0.1%,1 Jan 2026,Official estimate
91,Sweden,10621103,0.1%,31 Aug 2026,Monthly national estimate
92,Greece,10372335,0.1%,1 Jan 2025,Official estimate
93,Israel,10296300,0.1%,30 Sep 2026,Monthly national estimate
94,Azerbaijan,10273450,0.1%,1 Jul 2026,Monthly national estimate
95,Honduras,10186738,0.1%,1 Jul 2026,National annual projection
96,Papua New Guinea,10185363,0.1%,16 Jun 2024,2024 census result
97,Hungary,9488428,0.1%,1 Jan 2026,Official estimate
98,Cuba,9434593,0.1%,31 Dec 2025,Official estimate
99,Sierra Leone,9270700,0.1%,1 Jul 2026,National annual projection
100,Austria,9217573,0.1%,1 Jul 2026,National quarterly estimate
101,Switzerland,9154896,0.1%,30 Jun 2026,National quarterly estimate
102,Belarus,9056080,0.1%,1 Jan 2026,Official estimate
103,Togo,8095498,0.10%,8 Nov 2022,2022 census result
104,Laos,7745000,0.09%,1 Jul 2025,National annual projection
105,Libya,7539852,0.09%,1 Jul 2026,UN projection
106,Hong Kong (China),7518300,0.09%,30 Jun 2026,National estimate
107,Kyrgyzstan,7404300,0.09%,1 Jan 2026,Monthly national estimate
108,Turkmenistan,7057841,0.09%,17 Dec 2022,2022 census result
109,Nicaragua,6874748,0.08%,30 Jun 2024,Official estimate
110,Serbia,6532019,0.08%,1 Jan 2026,Official estimate
111,Central African Republic,6470307,0.08%,1 Jul 2024,National annual projection
112,Bulgaria,6423207,0.08%,31 Dec 2025,Official estimate
113,Singapore,6208500,0.07%,30 Jun 2026,National annual projection
114,Republic of the Congo,6142180,0.07%,17 May 2023,2023 census result
115,Paraguay,6109644,0.07%,9 Nov 2022,2022 census result
116,Denmark,6038638,0.07%,1 Sep 2026,Monthly national estimate
117,El Salvador,6029976,0.07%,2 May 2024,2024 census result
118,Lebanon,5895466,0.07%,2026,Official estimate
119,Finland,5662086,0.07%,30 Sep 2026,Monthly national estimate
120,Norway,5636904,0.07%,30 Jun 2026,National quarterly estimate
121,Palestine,5557096,0.07%,31 Dec 2025,National annual projection
122,Ireland,5525600,0.07%,1 Apr 2026,National estimate
123,Oman,5454352,0.07%,30 Sep 2026,Monthly national estimate
124,Slovakia,5403009,0.07%,30 Jun 2026,National quarterly estimate
125,New Zealand,5357300,0.06%,30 Jun 2026,National quarterly estimate
126,Liberia,5248621,0.06%,10 Nov 2022,2022 census result
127,Costa Rica,5217296,0.06%,30 Jun 2026,National annual projection
128,Mauritania,4927532,0.06%,25 Dec 2023,2023 census result
129,Kuwait,4881254,0.06%,1 Jan 2025,Official estimate
130,Panama,4064780,0.05%,1 Jul 2026,2023 census result
131,Georgia,3941100,0.05%,1 Jan 2026,Official estimate
132,Croatia,3874993,0.05%,1 Jul 2025,Official estimate
133,Eritrea,3682669,0.04%,1 Jul 2026,UN projection[115] (see note)
134,Mongolia,3591120,0.04%,31 Dec 2025,National annual projection
135,Uruguay,3480601,0.04%,30 Jun 2026,National annual projection
136,Bosnia and Herzegovina,3412000,0.04%,1 Jul 2024,Official estimate
137,Qatar,3370611,0.04%,31 Mar 2026,Monthly national estimate
138,Puerto Rico (US),3184835,0.04%,1 Jul 2025,Annual projection
139,Armenia,3103900,0.04%,1 Jan 2026,Official estimate
140,Namibia,3022401,0.04%,24 Sep 2023,2023 Census
141,Lithuania,2889444,0.03%,1 Oct 2026,Monthly national estimate
142,Jamaica,2774538,0.03%,12 Sep 2022,2022 census result
143,Botswana,2515633,0.03%,1 Jul 2026,Official estimate
144,Gabon,2469296,0.03%,1 Jul 2025,National annual projection
145,Gambia,2422712,0.03%,1 May 2024,Preliminary census results
146,Moldova,2365600,0.03%,1 Jan 2026,Official estimate
147,Albania,2335930,0.03%,1 Jan 2026,Official estimate
148,Slovenia,2138751,0.03%,1 Jul 2026,National quarterly estimate
149,Lesotho,2116427,0.03%,2024,Official survey
150,Guinea-Bissau,1890252,0.02%,1 Jul 2026,National annual projection[164][dubious – discuss]
151,Latvia,1829800,0.02%,1 Sep 2026,Monthly national estimate
152,North Macedonia,1819074,0.02%,31 Dec 2025,Official estimate
153,Equatorial Guinea,1727151,0.02%,1 Jul 2025,Official estimate
154,Bahrain,1603260,0.02%,30 Jun 2025,Official estimate
155,Kosovo,1582322,0.02%,31 Dec 2025,2024 national census
156,Timor-Leste,1409452,0.02%,1 Jul 2026,National annual projection
157,Trinidad and Tobago,1367764,0.02%,30 Jun 2025,Official estimate
158,Estonia,1360745,0.02%,1 Jan 2026,Official estimate
159,Mauritius,1240316,0.01%,30 Jun 2026,National estimate
160,Eswatini,1235549,0.01%,1 Jul 2024,Official projection
161,Djibouti,1066809,0.01%,20 May 2024,2024 census result
162,Cyprus,996600,0.01%,31 Dec 2025,Official estimate
163,Guyana,956044,0.01%,31 Dec 2024,Official estimate
164,Comoros,944388,0.01%,2026,Official estimate
165,Fiji,902623,0.01%,1 Jan 2026,National annual projection
166,Bhutan,790718,0.010%,2026,National annual projection
167,Solomon Islands,750325,0.009%,1 Jul 2024,National annual projection
168,Luxembourg,690959,0.008%,1 Jan 2026,Official estimate
169,Macau (China),686500,0.008%,30 Jun 2026,National quarterly estimate
170,Montenegro,622902,0.008%,1 Jan 2026,Official estimate
171,Suriname,616500,0.007%,1 Jul 2021,Official estimate
172,Western Sahara (disputed),610813,0.007%,1 Jul 2026,UN projection
173,Malta,588254,0.007%,31 Dec 2025,Official estimate
174,Maldives,515132,0.006%,13 Sep 2022,2022 census result
175,Cape Verde,491233,0.006%,16 Jun 2021,2021 census result
176,Northern Cyprus,476214,0.006%,31 Dec 2023,Official projection
177,Brunei,458600,0.006%,1 Jul 2025,Official estimate
178,Belize,418982,0.005%,1 Jul 2026,Official estimate
179,Bahamas,398165,0.005%,4 Apr 2022,2022 census result
180,Iceland,396500,0.005%,1 Jul 2026,National quarterly estimate
181,Transnistria,367776,0.004%,31 Mar 2024,Official estimate
182,Vanuatu,321409,0.004%,1 Jul 2024,National annual projection
183,French Polynesia (France),279500,0.003%,31 Dec 2025,National annual projection
184,New Caledonia (France),264596,0.003%,1 Jan 2025,National annual projection
185,Barbados,261692,0.003%,31 Dec 2025,Official estimate
186,Abkhazia,244236,0.003%,1 Jan 2022,Official estimate
187,São Tomé and Príncipe,209607,0.003%,2024,Preliminary census result
188,Samoa,205557,0.002%,6 Nov 2021,2021 Census
189,Saint Lucia,184100,0.002%,1 Jul 2023,Official estimate
190,Curaçao (Netherlands),158006,0.002%,1 Jan 2026,Official estimate
191,Guam (US),153836,0.002%,1 Apr 2020,2020 census result
192,Seychelles,123565,0.001%,30 Jun 2026,Official estimate
193,Kiribati,120740,0.001%,1 Jul 2021,National annual projection
194,Aruba (Netherlands),110625,0.001%,31 Dec 2025,Official estimate
195,Saint Vincent and the Grenadines,109296,0.001%,15 Jun 2023,2023 census result
196,Grenada,109021,0.001%,2021,Preliminary Census results
197,Antigua and Barbuda,106365,0.001%,1 Jan 2026,Official estimate
198,Jersey (UK),104540,0.001%,31 Dec 2024,2021 census result
199,Tonga,100179,0.001%,30 Nov 2021,2021 census result
200,Andorra,90122,0.001%,30 Sep 2026,Monthly national estimate
201,Cayman Islands (UK),88833,0.001%,31 Dec 2024,National annual projection
202,U.S. Virgin Islands (US),87146,0.001%,1 Apr 2020,2020 census result
203,Isle of Man (UK),84975,0.001%,1 Apr 2025,Official estimate
204,Micronesia,75817,0.0009%,12 Feb 2023,2023 Census
205,Dominica,65431,0.0008%,2026,Official estimate
206,Guernsey (UK),64781,0.0008%,31 Dec 2023,National quarterly estimate
207,Bermuda (UK),64055,0.0008%,1 Jul 2021,National annual projection
208,Greenland (Denmark),56945,0.0007%,1 Jul 2026,National quarterly estimate
209,South Ossetia,56520,0.0007%,31 Dec 2021,Official estimate
210,Faroe Islands (Denmark),55640,0.0007%,1 Sep 2026,Monthly national estimate
211,Turks and Caicos Islands (UK),52299,0.0006%,1 Jul 2025,Official estimate
212,Saint Kitts and Nevis,51320,0.0006%,2022,2022 census result
213,American Samoa (US),49710,0.0006%,1 Apr 2020,2020 census result
214,Northern Mariana Islands (US),47329,0.0006%,1 Apr 2020,2020 census result
215,Marshall Islands,42418,0.0005%,30 Sep 2021,2021 Census
216,Sint Maarten (Netherlands),41349,0.0005%,1 Jan 2025,Official estimate
217,Liechtenstein,41228,0.0005%,31 Dec 2025,National estimate
218,British Virgin Islands (UK),39471,0.0005%,1 Jul 2024,UN projection
219,Monaco,38857,0.0005%,31 Dec 2025,Census
220,Gibraltar (UK),38196,0.0005%,14 Nov 2022,Preliminary census results
221,San Marino,34151,0.0004%,30 Sep 2026,Monthly national estimate
222,Saint Martin (France),31496,0.0004%,1 Jan 2025,Official estimate
223,Palau,16733,0.0002%,1 Jul 2021,2021 Census
224,Anguilla (UK),16010,0.0002%,31 Dec 2024,Official estimate
225,Cook Islands (New Zealand),15040,0.0002%,1 Jul 2021,2021 Census
226,Nauru,11680,0.0001%,30 Oct 2021,2021 Census
227,Wallis and Futuna (France),11620,0.0001%,24 Jul 2023,2023 Census
228,Tuvalu,10643,0.0001%,12 Dec 2022,2022 Census
229,Saint Barthélemy (France),10562,0.0001%,1 Jan 2025,Official estimate
230,Saint Pierre and Miquelon (France),5819,0%,1 Jan 2025,Official estimate
231,Saint Helena\, Ascension and Tristan da Cunha (UK),5651,0%,1 Jul 2021,2021 Census[240][241]
232,Montserrat (UK),4386,0%,23 Sep 2023,2023 census result
233,Falkland Islands (UK),3662,0%,10 Oct 2021,2021 census result
234,Tokelau (New Zealand),2608,0%,1 Jan 2025,2025 Census
235,Norfolk Island (Australia),2188,0%,1 Jan 2021,2021 Census
236,Christmas Island (Australia),1692,0%,1 Jan 2021,2021 Census
237,Niue (New Zealand),1681,0%,11 Nov 2022,2022 Census
238,Vatican City,882,0%,31 Dec 2024,Official figure
239,Cocos (Keeling) Islands (Australia),593,0%,30 Jun 2020,2021 Census
240,Pitcairn Islands (UK),35,0%,2023,Official estimate
1 rank country population share date source
2 1 World 8232000000 100% 13 Jun 2025 UN projection[1]
3 2 India 1429404000 17.3% 1 Jul 2026 Official projection
4 3 China 1404890000 17.0% 31 Dec 2025 Official estimate
5 4 United States 341784857 4.1% 1 Jul 2025 Official estimate
6 5 Indonesia 290125073 3.5% 30 Jun 2026 National annual projection
7 6 Pakistan 241499431 2.9% 1 Mar 2023 2023 census result
8 7 Nigeria 223800000 2.7% 1 Jul 2023 Official projection
9 8 Brazil 214211951 2.6% 1 Jul 2026 Official estimate
10 9 Bangladesh 169828911 2.1% 14 Jun 2022 2022 census result
11 10 Russia 146028325 1.8% 1 Jan 2025 Official estimate
12 11 Mexico 131231919 1.6% 30 Jun 2026 National quarterly estimate
13 12 Japan 122690000 1.5% 1 Oct 2026 Monthly national estimate
14 13 Democratic Republic of the Congo 116452162 1.4% 1 Jul 2026 UN projection
15 14 Philippines 114849400 1.4% 1 Jul 2026 Official projection
16 15 Ethiopia 111652998 1.3% 1 Jul 2025 National annual projection
17 16 Egypt 108613296 1.3% 1 Jan 2026 Official estimate
18 17 Vietnam 102300000 1.2% 31 Dec 2025 Official estimate
19 18 Iran 87134000 1.1% 21 Mar 2026 Official estimate
20 19 Turkey 86092168 1.0% 31 Dec 2025 Official estimate
21 20 Germany 83298787 1.0% 30 Jun 2026 National quarterly estimate
22 21 Thailand 70250751 0.8% 2025 Preliminary census results
23 22 Tanzania 70038850 0.8% 1 Jul 2026 Official projection
24 23 United Kingdom 69487000 0.8% 30 Jun 2025 Official estimate
25 24 France 69081996 0.8% 1 Jan 2026 Yearly national estimate
26 25 South Africa 63522380 0.8% 30 Jun 2026 Official estimate
27 26 Italy 58949500 0.7% 31 Jul 2026 Monthly national estimate
28 27 Kenya 54227015 0.7% 1 Jul 2026 Official projection
29 28 Colombia 53399171 0.6% 1 Jan 2026 Official projection
30 29 Sudan 53282719 0.6% 1 Jul 2026 UN projection
31 30 Myanmar 51375327 0.6% 15 Oct 2024 2024 census result
32 31 South Korea 51088284 0.6% 31 Jul 2026 Monthly national estimate
33 32 Spain 49801559 0.6% 1 Jul 2026 National quarterly estimate
34 33 Algeria 47400000 0.6% 1 Jan 2025 National annual projection
35 34 Argentina 46466688 0.6% 1 Jul 2026 National annual projection
36 35 Iraq 46118793 0.6% 21 Nov 2024 2024 census result
37 36 Uganda 45905417 0.6% 10 May 2024 2024 census result
38 37 Afghanistan 43844000 0.5% 1 Jul 2025 UN projection[41][42] (see note)
39 38 Canada 41798407 0.5% 1 Jul 2026 National quarterly estimate
40 39 Uzbekistan 39047321 0.5% 15 Jan 2026 2026 census result
41 40 Angola 38778554 0.5% 1 Jan 2026 National estimate
42 41 Morocco 37254695 0.4% 1 Jul 2026 National annual projection
43 42 Poland 37221000 0.4% 31 Aug 2026 Monthly national estimate
44 43 Saudi Arabia 35300280 0.4% 1 Jul 2024 Official estimate
45 44 Mozambique 34958973 0.4% 1 Jul 2026 National annual projection
46 45 Malaysia 34389400 0.4% 30 Jun 2026 National quarterly estimate
47 46 Ghana 34378768 0.4% 1 Jul 2026 National annual projection
48 47 Peru 34157732 0.4% 4 Aug 2025 Census 2025
49 48 Ivory Coast 33293101 0.4% 1 Jul 2026 National annual projection
50 49 Yemen 32684503 0.4% 1 Jul 2023 Official estimate
51 50 Madagascar 32658977 0.4% 1 Jul 2026 National annual projection
52 51 Nepal 30034040 0.4% 1 Jul 2026 National annual projection
53 52 Cameroon 29442327 0.4% 1 Jul 2025 National annual projection
54 53 Ukraine 28700000 0.3% 1 Sep 2025 State migration service
55 54 Venezuela 28633711 0.3% 1 Jul 2026 UN projection
56 55 Australia 27921150 0.3% 31 Mar 2026 Official projection
57 56 Niger 27522750 0.3% 1 Jul 2025 National annual projection
58 57 Syria 26472497 0.3% 1 Jul 2026 Monthly estimate
59 58 North Korea 25950000 0.3% 1 Jul 2024 National annual projection
60 59 Burkina Faso 24736828 0.3% 1 Jul 2026 Official projection
61 60 Mali 23929000 0.3% 1 Jul 2024 Official projection
62 61 Taiwan 23213251 0.3% 30 Sep 2026 Official estimate
63 62 Zambia 23003214 0.3% 1 Jul 2026 Official estimate
64 63 Sri Lanka 21778000 0.3% 1 Jul 2026 Official estimate
65 64 Malawi 21201635 0.3% 1 Jul 2026 National annual projection
66 65 Kazakhstan 20618796 0.2% 1 Sep 2026 Official estimate
67 66 Somalia 20305907 0.2% 1 Jul 2026 UN projection
68 67 Chile 20150948 0.2% 30 Jun 2026 National annual projection
69 68 Chad 20031602 0.2% 1 Jul 2026 National annual projection
70 69 Senegal 19575061 0.2% 1 Jul 2026 National annual projection
71 70 Romania 19041322 0.2% 1 Jan 2026 Official estimate
72 71 Guatemala 18312373 0.2% 1 Jul 2026 National annual projection
73 72 Ecuador 18243816 0.2% 1 Jul 2026 National annual projection
74 73 Netherlands 18192693 0.2% 30 Sep 2026 Official estimate
75 74 Cambodia 17816143 0.2% 1 Jul 2026 Official projection
76 75 Guinea 17521167 0.2% 1 Jul 2025 Census July 2025
77 76 Zimbabwe 16175966 0.2% 1 Jul 2026 Official projection
78 77 South Sudan 15786898 0.2% 1 Jul 2025 National annual projection
79 78 Rwanda 14418145 0.2% 1 Jul 2026 National annual projection
80 79 Benin 13551992 0.2% 1 Jul 2026 National annual projection
81 80 Burundi 12332788 0.1% 16 Aug 2024 Preliminary census result
82 81 Tunisia 11992843 0.1% 1 Jan 2026 National estimate
83 82 Belgium 11944011 0.1% 1 Aug 2026 Official estimate
84 83 Jordan 11937000 0.1% 31 Dec 2025 National estimate
85 84 Haiti 11867032 0.1% 1 Jul 2024 National annual projection
86 85 Portugal 11424031 0.1% 31 Dec 2025 Official estimate
87 86 Bolivia 11365333 0.1% 23 Mar 2024 2024 census result
88 87 United Arab Emirates 11294243 0.1% 31 Dec 2024 Official estimate
89 88 Czech Republic 10903655 0.1% 30 Jun 2026 Official estimate
90 89 Dominican Republic 10771504 0.1% 10 Nov 2022 2022 census result
91 90 Tajikistan 10721000 0.1% 1 Jan 2026 Official estimate
92 91 Sweden 10621103 0.1% 31 Aug 2026 Monthly national estimate
93 92 Greece 10372335 0.1% 1 Jan 2025 Official estimate
94 93 Israel 10296300 0.1% 30 Sep 2026 Monthly national estimate
95 94 Azerbaijan 10273450 0.1% 1 Jul 2026 Monthly national estimate
96 95 Honduras 10186738 0.1% 1 Jul 2026 National annual projection
97 96 Papua New Guinea 10185363 0.1% 16 Jun 2024 2024 census result
98 97 Hungary 9488428 0.1% 1 Jan 2026 Official estimate
99 98 Cuba 9434593 0.1% 31 Dec 2025 Official estimate
100 99 Sierra Leone 9270700 0.1% 1 Jul 2026 National annual projection
101 100 Austria 9217573 0.1% 1 Jul 2026 National quarterly estimate
102 101 Switzerland 9154896 0.1% 30 Jun 2026 National quarterly estimate
103 102 Belarus 9056080 0.1% 1 Jan 2026 Official estimate
104 103 Togo 8095498 0.10% 8 Nov 2022 2022 census result
105 104 Laos 7745000 0.09% 1 Jul 2025 National annual projection
106 105 Libya 7539852 0.09% 1 Jul 2026 UN projection
107 106 Hong Kong (China) 7518300 0.09% 30 Jun 2026 National estimate
108 107 Kyrgyzstan 7404300 0.09% 1 Jan 2026 Monthly national estimate
109 108 Turkmenistan 7057841 0.09% 17 Dec 2022 2022 census result
110 109 Nicaragua 6874748 0.08% 30 Jun 2024 Official estimate
111 110 Serbia 6532019 0.08% 1 Jan 2026 Official estimate
112 111 Central African Republic 6470307 0.08% 1 Jul 2024 National annual projection
113 112 Bulgaria 6423207 0.08% 31 Dec 2025 Official estimate
114 113 Singapore 6208500 0.07% 30 Jun 2026 National annual projection
115 114 Republic of the Congo 6142180 0.07% 17 May 2023 2023 census result
116 115 Paraguay 6109644 0.07% 9 Nov 2022 2022 census result
117 116 Denmark 6038638 0.07% 1 Sep 2026 Monthly national estimate
118 117 El Salvador 6029976 0.07% 2 May 2024 2024 census result
119 118 Lebanon 5895466 0.07% 2026 Official estimate
120 119 Finland 5662086 0.07% 30 Sep 2026 Monthly national estimate
121 120 Norway 5636904 0.07% 30 Jun 2026 National quarterly estimate
122 121 Palestine 5557096 0.07% 31 Dec 2025 National annual projection
123 122 Ireland 5525600 0.07% 1 Apr 2026 National estimate
124 123 Oman 5454352 0.07% 30 Sep 2026 Monthly national estimate
125 124 Slovakia 5403009 0.07% 30 Jun 2026 National quarterly estimate
126 125 New Zealand 5357300 0.06% 30 Jun 2026 National quarterly estimate
127 126 Liberia 5248621 0.06% 10 Nov 2022 2022 census result
128 127 Costa Rica 5217296 0.06% 30 Jun 2026 National annual projection
129 128 Mauritania 4927532 0.06% 25 Dec 2023 2023 census result
130 129 Kuwait 4881254 0.06% 1 Jan 2025 Official estimate
131 130 Panama 4064780 0.05% 1 Jul 2026 2023 census result
132 131 Georgia 3941100 0.05% 1 Jan 2026 Official estimate
133 132 Croatia 3874993 0.05% 1 Jul 2025 Official estimate
134 133 Eritrea 3682669 0.04% 1 Jul 2026 UN projection[115] (see note)
135 134 Mongolia 3591120 0.04% 31 Dec 2025 National annual projection
136 135 Uruguay 3480601 0.04% 30 Jun 2026 National annual projection
137 136 Bosnia and Herzegovina 3412000 0.04% 1 Jul 2024 Official estimate
138 137 Qatar 3370611 0.04% 31 Mar 2026 Monthly national estimate
139 138 Puerto Rico (US) 3184835 0.04% 1 Jul 2025 Annual projection
140 139 Armenia 3103900 0.04% 1 Jan 2026 Official estimate
141 140 Namibia 3022401 0.04% 24 Sep 2023 2023 Census
142 141 Lithuania 2889444 0.03% 1 Oct 2026 Monthly national estimate
143 142 Jamaica 2774538 0.03% 12 Sep 2022 2022 census result
144 143 Botswana 2515633 0.03% 1 Jul 2026 Official estimate
145 144 Gabon 2469296 0.03% 1 Jul 2025 National annual projection
146 145 Gambia 2422712 0.03% 1 May 2024 Preliminary census results
147 146 Moldova 2365600 0.03% 1 Jan 2026 Official estimate
148 147 Albania 2335930 0.03% 1 Jan 2026 Official estimate
149 148 Slovenia 2138751 0.03% 1 Jul 2026 National quarterly estimate
150 149 Lesotho 2116427 0.03% 2024 Official survey
151 150 Guinea-Bissau 1890252 0.02% 1 Jul 2026 National annual projection[164][dubious – discuss]
152 151 Latvia 1829800 0.02% 1 Sep 2026 Monthly national estimate
153 152 North Macedonia 1819074 0.02% 31 Dec 2025 Official estimate
154 153 Equatorial Guinea 1727151 0.02% 1 Jul 2025 Official estimate
155 154 Bahrain 1603260 0.02% 30 Jun 2025 Official estimate
156 155 Kosovo 1582322 0.02% 31 Dec 2025 2024 national census
157 156 Timor-Leste 1409452 0.02% 1 Jul 2026 National annual projection
158 157 Trinidad and Tobago 1367764 0.02% 30 Jun 2025 Official estimate
159 158 Estonia 1360745 0.02% 1 Jan 2026 Official estimate
160 159 Mauritius 1240316 0.01% 30 Jun 2026 National estimate
161 160 Eswatini 1235549 0.01% 1 Jul 2024 Official projection
162 161 Djibouti 1066809 0.01% 20 May 2024 2024 census result
163 162 Cyprus 996600 0.01% 31 Dec 2025 Official estimate
164 163 Guyana 956044 0.01% 31 Dec 2024 Official estimate
165 164 Comoros 944388 0.01% 2026 Official estimate
166 165 Fiji 902623 0.01% 1 Jan 2026 National annual projection
167 166 Bhutan 790718 0.010% 2026 National annual projection
168 167 Solomon Islands 750325 0.009% 1 Jul 2024 National annual projection
169 168 Luxembourg 690959 0.008% 1 Jan 2026 Official estimate
170 169 Macau (China) 686500 0.008% 30 Jun 2026 National quarterly estimate
171 170 Montenegro 622902 0.008% 1 Jan 2026 Official estimate
172 171 Suriname 616500 0.007% 1 Jul 2021 Official estimate
173 172 Western Sahara (disputed) 610813 0.007% 1 Jul 2026 UN projection
174 173 Malta 588254 0.007% 31 Dec 2025 Official estimate
175 174 Maldives 515132 0.006% 13 Sep 2022 2022 census result
176 175 Cape Verde 491233 0.006% 16 Jun 2021 2021 census result
177 176 Northern Cyprus 476214 0.006% 31 Dec 2023 Official projection
178 177 Brunei 458600 0.006% 1 Jul 2025 Official estimate
179 178 Belize 418982 0.005% 1 Jul 2026 Official estimate
180 179 Bahamas 398165 0.005% 4 Apr 2022 2022 census result
181 180 Iceland 396500 0.005% 1 Jul 2026 National quarterly estimate
182 181 Transnistria 367776 0.004% 31 Mar 2024 Official estimate
183 182 Vanuatu 321409 0.004% 1 Jul 2024 National annual projection
184 183 French Polynesia (France) 279500 0.003% 31 Dec 2025 National annual projection
185 184 New Caledonia (France) 264596 0.003% 1 Jan 2025 National annual projection
186 185 Barbados 261692 0.003% 31 Dec 2025 Official estimate
187 186 Abkhazia 244236 0.003% 1 Jan 2022 Official estimate
188 187 São Tomé and Príncipe 209607 0.003% 2024 Preliminary census result
189 188 Samoa 205557 0.002% 6 Nov 2021 2021 Census
190 189 Saint Lucia 184100 0.002% 1 Jul 2023 Official estimate
191 190 Curaçao (Netherlands) 158006 0.002% 1 Jan 2026 Official estimate
192 191 Guam (US) 153836 0.002% 1 Apr 2020 2020 census result
193 192 Seychelles 123565 0.001% 30 Jun 2026 Official estimate
194 193 Kiribati 120740 0.001% 1 Jul 2021 National annual projection
195 194 Aruba (Netherlands) 110625 0.001% 31 Dec 2025 Official estimate
196 195 Saint Vincent and the Grenadines 109296 0.001% 15 Jun 2023 2023 census result
197 196 Grenada 109021 0.001% 2021 Preliminary Census results
198 197 Antigua and Barbuda 106365 0.001% 1 Jan 2026 Official estimate
199 198 Jersey (UK) 104540 0.001% 31 Dec 2024 2021 census result
200 199 Tonga 100179 0.001% 30 Nov 2021 2021 census result
201 200 Andorra 90122 0.001% 30 Sep 2026 Monthly national estimate
202 201 Cayman Islands (UK) 88833 0.001% 31 Dec 2024 National annual projection
203 202 U.S. Virgin Islands (US) 87146 0.001% 1 Apr 2020 2020 census result
204 203 Isle of Man (UK) 84975 0.001% 1 Apr 2025 Official estimate
205 204 Micronesia 75817 0.0009% 12 Feb 2023 2023 Census
206 205 Dominica 65431 0.0008% 2026 Official estimate
207 206 Guernsey (UK) 64781 0.0008% 31 Dec 2023 National quarterly estimate
208 207 Bermuda (UK) 64055 0.0008% 1 Jul 2021 National annual projection
209 208 Greenland (Denmark) 56945 0.0007% 1 Jul 2026 National quarterly estimate
210 209 South Ossetia 56520 0.0007% 31 Dec 2021 Official estimate
211 210 Faroe Islands (Denmark) 55640 0.0007% 1 Sep 2026 Monthly national estimate
212 211 Turks and Caicos Islands (UK) 52299 0.0006% 1 Jul 2025 Official estimate
213 212 Saint Kitts and Nevis 51320 0.0006% 2022 2022 census result
214 213 American Samoa (US) 49710 0.0006% 1 Apr 2020 2020 census result
215 214 Northern Mariana Islands (US) 47329 0.0006% 1 Apr 2020 2020 census result
216 215 Marshall Islands 42418 0.0005% 30 Sep 2021 2021 Census
217 216 Sint Maarten (Netherlands) 41349 0.0005% 1 Jan 2025 Official estimate
218 217 Liechtenstein 41228 0.0005% 31 Dec 2025 National estimate
219 218 British Virgin Islands (UK) 39471 0.0005% 1 Jul 2024 UN projection
220 219 Monaco 38857 0.0005% 31 Dec 2025 Census
221 220 Gibraltar (UK) 38196 0.0005% 14 Nov 2022 Preliminary census results
222 221 San Marino 34151 0.0004% 30 Sep 2026 Monthly national estimate
223 222 Saint Martin (France) 31496 0.0004% 1 Jan 2025 Official estimate
224 223 Palau 16733 0.0002% 1 Jul 2021 2021 Census
225 224 Anguilla (UK) 16010 0.0002% 31 Dec 2024 Official estimate
226 225 Cook Islands (New Zealand) 15040 0.0002% 1 Jul 2021 2021 Census
227 226 Nauru 11680 0.0001% 30 Oct 2021 2021 Census
228 227 Wallis and Futuna (France) 11620 0.0001% 24 Jul 2023 2023 Census
229 228 Tuvalu 10643 0.0001% 12 Dec 2022 2022 Census
230 229 Saint Barthélemy (France) 10562 0.0001% 1 Jan 2025 Official estimate
231 230 Saint Pierre and Miquelon (France) 5819 0% 1 Jan 2025 Official estimate
232 231 Saint Helena\ Ascension and Tristan da Cunha (UK) 5651 0% 1 Jul 2021 2021 Census[240][241]
233 232 Montserrat (UK) 4386 0% 23 Sep 2023 2023 census result
234 233 Falkland Islands (UK) 3662 0% 10 Oct 2021 2021 census result
235 234 Tokelau (New Zealand) 2608 0% 1 Jan 2025 2025 Census
236 235 Norfolk Island (Australia) 2188 0% 1 Jan 2021 2021 Census
237 236 Christmas Island (Australia) 1692 0% 1 Jan 2021 2021 Census
238 237 Niue (New Zealand) 1681 0% 11 Nov 2022 2022 Census
239 238 Vatican City 882 0% 31 Dec 2024 Official figure
240 239 Cocos (Keeling) Islands (Australia) 593 0% 30 Jun 2020 2021 Census
241 240 Pitcairn Islands (UK) 35 0% 2023 Official estimate
@@ -0,0 +1,47 @@
#!/usr/bin/env python3
"""extract_author_census.py
Extract-lane artifact: per-author commit census of the troupe repository.
Source (real tool call): `git -C /root/troupe-standup log --format=%an`
aggregated with a stdlib Counter. No LLM summarization, no fabricated rows.
Output: 2026-11-02-author-census.csv (rank,author,commits)
"""
import csv
import subprocess
from collections import Counter
REPO = "/root/troupe-standup"
OUT = "/root/troupe-standup/wizard-work/ledger/2026-11-02-author-census.csv"
TOP_N = 20
def main():
out = subprocess.run(
["git", "-C", REPO, "log", "--format=%an"],
check=True, capture_output=True, text=True,
).stdout
counts = Counter(out.splitlines())
total = sum(counts.values())
distinct = len(counts)
rows = sorted(counts.items(), key=lambda kv: (-kv[1], kv[0]))[:TOP_N]
with open(OUT, "w", newline="") as fh:
w = csv.writer(fh)
w.writerow(["rank", "author", "commits"])
for i, (author, n) in enumerate(rows, start=1):
w.writerow([i, author, n])
print(f"total commits : {total}")
print(f"distinct authors: {distinct}")
print(f"rows written : {len(rows)} -> {OUT}")
print("top 5:")
for author, n in rows[:5]:
print(f" {n:>5} {author}")
if __name__ == "__main__":
main()
+100
View File
@@ -0,0 +1,100 @@
#!/usr/bin/env python3
"""Flatten the REST Countries v3.1 dataset into a clean, flat table.
Usage:
python3 extract_countries.py <source_json> <output_csv>
Source (raw, from the REST Countries repository):
https://raw.githubusercontent.com/restcountries/restcountries/master/src/main/resources/countriesV3.1.json
The JSON is an array of 250 country records; this script flattens every record
to one CSV row with the fixed 14-column contract below.
Columns (order):
name_common | name_official | alpha2 | alpha3 | numeric |
region | subregion | capital | population | area_km2 |
currencies | languages | tlds | flag
"""
import csv
import json
import sys
def as_text(value):
"""Empty string for None/empty, plain str otherwise."""
if value is None or value == '':
return ''
return str(value)
def list_join(value):
"""Join a list of strings with ' | '; empty string for None."""
if value is None:
return ''
return ' | '.join(str(item) for item in value)
def currency_codes(currencies):
if not isinstance(currencies, dict):
return ''
return ' | '.join(sorted(currencies.keys()))
def language_codes(languages):
if not isinstance(languages, dict):
return ''
return ' | '.join(sorted(languages.keys()))
def flatten(record):
name = record.get('name') or {}
return [
as_text(name.get('common')), # name_common
as_text(name.get('official')), # name_official
as_text(record.get('cca2')), # alpha2
as_text(record.get('cca3')), # alpha3
as_text(record.get('ccn3')), # numeric
as_text(record.get('region')), # region
as_text(record.get('subregion')), # subregion
list_join(record.get('capital')), # capital
as_text(record.get('population')), # population
as_text(record.get('area')), # area_km2
currency_codes(record.get('currencies')), # currencies
language_codes(record.get('languages')), # languages
list_join(record.get('tld')), # tlds
as_text(record.get('flag')), # flag
]
HEADERS = [
'name_common', 'name_official', 'alpha2', 'alpha3', 'numeric',
'region', 'subregion', 'capital', 'population', 'area_km2',
'currencies', 'languages', 'tlds', 'flag',
]
def main():
if len(sys.argv) != 3:
sys.stderr.write('usage: extract_countries.py <source_json> <output_csv>\n')
return 2
source_path, out_path = sys.argv[1], sys.argv[2]
try:
with open(source_path, encoding='utf-8') as fh:
records = json.load(fh)
except (OSError, ValueError) as exc:
sys.stderr.write('cannot read source %s: %s\n' % (source_path, exc))
return 1
if not isinstance(records, list):
sys.stderr.write('source JSON is not a list\n')
return 1
with open(out_path, 'w', encoding='utf-8', newline='') as fh:
writer = csv.writer(fh, lineterminator='\n')
writer.writerow(HEADERS)
for record in records:
writer.writerow(flatten(record))
print('records_in: %d' % len(records))
print('wrote: %s' % out_path)
return 0
if __name__ == '__main__':
sys.exit(main())
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,60 @@
#!/usr/bin/env python3
# Verify 2026-11-02 commit census by author (top 15).
#
# Exits 0 iff the committed CSV at wizard-work/ledger/2026-11-02-commit-census-by-author.csv
# matches a clean re-derivation from git (recompute -> sort -> head -15) field-for-field,
# and the repo's rev-list count matches the sum of the re-derived rows.
# Exit code IS the verdict: 0 pass, nonzero fault.
import csv
import subprocess
import sys
REPO = "/root/troupe-standup"
CSV_PATH = "wizard-work/ledger/2026-11-02-commit-census-by-author.csv"
def git(*args):
return subprocess.run(
["git", "-C", REPO] + list(args), check=True, capture_output=True, text=True
).stdout
def recompute_top15():
out = git("log", "--format=%aN")
counts = {}
for line in out.splitlines():
name = line.strip()
if name:
counts[name] = counts.get(name, 0) + 1
return sorted(counts.items(), key=lambda kv: (-kv[1], kv[0]))[:15]
def main():
expected = recompute_top15()
total = git("rev-list", "--count", "HEAD").strip()
with open(CSV_PATH, newline="") as fh:
rows = list(csv.DictReader(fh))
problems = []
if len(rows) != len(expected):
problems.append("row count %d != expected %d" % (len(rows), len(expected)))
for i, (row, (name, cnt)) in enumerate(zip(rows, expected), start=1):
want = "%d,%s,%d" % (i, name, cnt)
got = "%s,%s,%s" % (row.get("rank"), row.get("author"), row.get("commits"))
if want != got:
problems.append("row %d: want %s got %s" % (i, want, got))
if problems:
print("FAIL")
for p in problems:
print(" -", p)
sys.exit(1)
print("PASS: top-15 author census matches git re-derivation; total=%s" % total)
sys.exit(0)
if __name__ == "__main__":
main()
+84
View File
@@ -0,0 +1,84 @@
#!/usr/bin/env python3
"""Independent cross-check: extracted CSV vs the raw source JSON.
Usage:
python3 verify_extraction.py <source_json> <csv_path>
Verifies that every source record appears exactly once in the CSV:
- row count equals the source record count
- alpha-2 code sets match exactly
- name_common values match for every row
Exits 0 only if all checks pass. Evidence, not the formal gate.
"""
import csv
import json
import sys
def main():
if len(sys.argv) != 3:
sys.stderr.write('usage: verify_extraction.py <source_json> <csv_path>\n')
return 2
source_path, csv_path = sys.argv[1], sys.argv[2]
try:
with open(source_path, encoding='utf-8') as fh:
records = json.load(fh)
except (OSError, ValueError) as exc:
sys.stderr.write('cannot read source %s: %s\n' % (source_path, exc))
return 1
if not isinstance(records, list):
sys.stderr.write('source JSON is not a list\n')
return 1
source = {}
for rec in records:
code = str(rec.get('cca2')) if rec.get('cca2') else None
name = str((rec.get('name') or {}).get('common')) if rec.get('name') else ''
if code:
source[code] = name
try:
with open(csv_path, encoding='utf-8') as fh:
rows = list(csv.reader(fh))
except OSError as exc:
sys.stderr.write('cannot read csv %s: %s\n' % (csv_path, exc))
return 1
if not rows:
sys.stderr.write('csv is empty\n')
return 1
header, data = rows[0], rows[1:]
problems = []
if len(data) != len(source):
problems.append('row count %d != source count %d'
% (len(data), len(source)))
csv_codes = {}
for row in data:
if len(row) != 14:
problems.append('row with %d fields: %r' % (len(row), row))
continue
csv_codes[row[2]] = row[0]
missing = sorted(set(source) - set(csv_codes))
extra = sorted(set(csv_codes) - set(source))
if missing:
problems.append('alpha-2 missing from csv: %r' % missing)
if extra:
problems.append('alpha-2 extra in csv: %r' % extra)
mismatches = [c for c in source if csv_codes.get(c) != source[c]]
if mismatches:
problems.append('name_common mismatches: %r' % mismatches)
if problems:
sys.stderr.write('VERIFY FAILED\n')
for problem in problems:
sys.stderr.write(' - %s\n' % problem)
return 1
print('verify: ok rows=%d codes=%d source=%d header=%r'
% (len(data), len(csv_codes), len(source), header))
return 0
if __name__ == '__main__':
sys.exit(main())
+118
View File
@@ -0,0 +1,118 @@
#!/bin/bash
# CHECK change-request-template-v1.0
# Verifies the draft artifact meets schema requirements.
# Exit 0 = PASS, 1 = FAIL, 2 = cannot grade (missing file).
set -euo pipefail
FILE="/root/troupe-standup/wizard-work/quill/change-request-template-v1.0.md"
if [ ! -f "$FILE" ]; then
echo "FAIL: artifact missing at $FILE"
exit 2
fi
FAIL=0
# 1. File size > 3000 bytes
BYTES=$(wc -c < "$FILE")
if [ "$BYTES" -lt 3000 ]; then
echo "FAIL: file too small ($BYTES bytes, minimum 3000)"
FAIL=1
else
echo "PASS: size $BYTES bytes"
fi
# 2. Required top-level sections (1-7)
for i in 1 2 3 4 5 6 7; do
if ! grep -q "^## ${i}\. " "$FILE"; then
echo "FAIL: missing section '## ${i}. '"
FAIL=1
fi
done
grep -q "^## 1\. Purpose" "$FILE" && echo "PASS: section 1 present" || { echo "FAIL: section 1 missing"; FAIL=1; }
grep -q "^## 7\. Changelog" "$FILE" && echo "PASS: section 7 present" || { echo "FAIL: section 7 missing"; FAIL=1; }
# 3. Fenced template block exists
if ! grep -q '```markdown' "$FILE"; then
echo "FAIL: no fenced template block"
FAIL=1
else
echo "PASS: fenced template block present"
fi
# 4. Required template fields present
for field in "Risk Level" "Window" "Summary" "Scope" "Validation" "Rollback" "Approval"; do
if ! grep -q "$field" "$FILE"; then
echo "FAIL: missing template field '$field'"
FAIL=1
fi
done
grep -q "Risk Level" "$FILE" && echo "PASS: Risk Level field present" || FAIL=1
grep -q "Low / Medium / High / Blocker" "$FILE" && echo "PASS: Risk Level enum defined" || FAIL=1
# 5. Example section present and free of unfilled placeholders
if ! grep -q "^## 6\. Example" "$FILE"; then
echo "FAIL: missing Example section"
FAIL=1
else
echo "PASS: Example section present"
fi
# Extract example block content: find fenced code block within Example section
EXAMPLE_BLOCK=""
IN_EXAMPLE=0
IN_FENCE=0
while IFS= read -r line; do
if [[ "$line" =~ ^##[[:space:]]+6\. ]]; then
IN_EXAMPLE=1
elif [ "$IN_EXAMPLE" -eq 1 ] && [[ "$line" =~ ^##[[:space:]]+[0-9] ]]; then
IN_EXAMPLE=0
fi
if [ "$IN_EXAMPLE" -eq 1 ] && [[ "$line" =~ ^\`\`\` ]]; then
if [ "$IN_FENCE" -eq 0 ]; then
IN_FENCE=1
else
IN_FENCE=0
break
fi
continue
fi
if [ "$IN_FENCE" -eq 1 ]; then
EXAMPLE_BLOCK="${EXAMPLE_BLOCK}${line}"$'\n'
fi
done < "$FILE"
if [ -n "$EXAMPLE_BLOCK" ]; then
if echo "$EXAMPLE_BLOCK" | grep -q '\[PROJECT\]'; then
echo "FAIL: example contains unfilled placeholder [PROJECT]"
FAIL=1
else
echo "PASS: example free of [PROJECT]"
fi
if echo "$EXAMPLE_BLOCK" | grep -q '\[REQUESTOR\]'; then
echo "FAIL: example contains unfilled placeholder [REQUESTOR]"
FAIL=1
else
echo "PASS: example free of [REQUESTOR]"
fi
else
echo "FAIL: could not extract example block"
FAIL=1
fi
# 6. Changelog table exists with v1.0 row
if ! grep -q "| v1.0 " "$FILE"; then
echo "FAIL: changelog missing v1.0 row"
FAIL=1
else
echo "PASS: changelog v1.0 row present"
fi
# Final
if [ "$FAIL" -eq 0 ]; then
echo "RESULT: PASS"
exit 0
else
echo "RESULT: FAIL ($FAIL checks failed)"
exit 1
fi
+25 -115
View File
@@ -1,120 +1,30 @@
#!/usr/bin/env bash
set -euo pipefail
# CHECK-quill-draft-compliance (lane copy) -- delegates to the repository gate.
#
# WHAT THIS FILE USED TO BE, AND WHY IT IS NOT ANY MORE (Q154)
# It was a second, independent implementation of the same gate: a bash script
# with a `python3 -` heredoc that scanned the lane through the absolute path
# /root/troupe-standup/wizard-work/quill, appended a row read from
# /root/.hermes/wizard-outputs/quill/ (a file outside the repository), and
# regenerated the table WITHOUT its header line so that its `diff` would read
# clean -- which is why the committed table at HEAD had 82 rows and no header.
# Two implementations of one gate is also why the tree carried two different
# verdicts for the same artifact.
#
# There is now exactly one gate, at the repository root, and this path is a
# pointer to it: same legs, same exit codes, no second rule list, no host
# path. Arguments are passed through.
#
# Exit codes are the root gate's: 0 all legs passed, 1 a fault, 2 ungradable.
set -u
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$SCRIPT_DIR"
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" || exit 2
ROOT="$(cd "$HERE/../.." && pwd)" || exit 2
GATE="$ROOT/CHECK-quill-draft-compliance"
TSV="$PROJECT_ROOT/draft-compliance-report-2026-10-31.tsv"
REPORT="$PROJECT_ROOT/draft-verification-report-2026-11-01.md"
if [[ ! -f "$TSV" ]]; then
echo "Missing TSV: $TSV"
exit 1
fi
if [[ ! -f "$REPORT" ]]; then
echo "Missing report: $REPORT"
exit 1
if [ ! -f "$GATE" ]; then
echo "delegation target missing: $GATE" >&2
exit 2
fi
# Generate fresh TSV using Python
FRESH=$(mktemp)
python3 - "$FRESH" <<'PY'
import sys
from pathlib import Path
wizard_work = Path("/root/troupe-standup/wizard-work/quill")
exclude = {"draft-compliance-report-2026-10-31.md", "draft-verification-report-2026-11-01.md"}
verification_report = "draft-verification-report-2026-11-01.md"
rows = []
for p in sorted(wizard_work.glob("*.md")):
if p.name in exclude:
continue
rel = p.name
lines = p.read_text(errors="replace").splitlines()
line_count = len(lines)
has_verdict = any(l.strip().startswith("VERDICT:") for l in lines)
has_check = any(l.strip().startswith("CHECK:") for l in lines)
bare_cmd = ""
for l in lines:
s = l.strip()
if s.startswith("CHECK:"):
bare_cmd = s[len("CHECK:"):].strip()
break
rows.append((rel, line_count, has_verdict, has_check, bool(bare_cmd), bare_cmd))
# Include verification report
report_path = Path("/root/.hermes/wizard-outputs/quill/draft-verification-report-2026-11-01.md")
if report_path.exists():
lines = report_path.read_text(errors="replace").splitlines()
line_count = len(lines)
has_verdict = any(l.strip().startswith("VERDICT:") for l in lines)
has_check = any(l.strip().startswith("CHECK:") for l in lines)
bare_cmd = ""
for l in lines:
s = l.strip()
if s.startswith("CHECK:"):
bare_cmd = s[len("CHECK:"):].strip()
break
rows.append((verification_report, line_count, has_verdict, has_check, bool(bare_cmd), bare_cmd))
rows.sort(key=lambda r: r[0])
with open(sys.argv[1], "w") as f:
f.write(f"# measured {len(rows)} markdown files\n")
for rel, lc, hv, hc, hbc, cmd in rows:
f.write(f"{rel}\t{lc}\t{hv}\t{hc}\t{hbc}\t{cmd}\n")
PY
if ! diff -u "$TSV" "$FRESH" > /dev/null; then
echo "TSV mismatch"
diff -u "$TSV" "$FRESH" | head -20
rm -f "$FRESH"
exit 1
fi
# Verify report summary numbers match TSV
pop=$(grep -oP 'Total `\.md` drafts scanned\s*\|\s*\K\d+' "$REPORT" || true)
verdict=$(grep -oP 'Drafts with `VERDICT:`\s*\|\s*\K\d+' "$REPORT" || true)
check=$(grep -oP 'Drafts with `CHECK:`\s*\|\s*\K\d+' "$REPORT" || true)
bare=$(grep -oP 'Drafts with a bare `CHECK:` command\s*\|\s*\K\d+' "$REPORT" || true)
failing=$(grep -oP 'Drafts failing at least one column\s*\|\s*\K\d+' "$REPORT" || true)
tsv_pop=$(tail -n +2 "$TSV" | wc -l)
tsv_verdict=$(awk -F'\t' '$3 == "True" {count++} END {print count+0}' "$TSV")
tsv_check=$(awk -F'\t' '$4 == "True" {count++} END {print count+0}' "$TSV")
tsv_bare=$(awk -F'\t' '$5 == "True" {count++} END {print count+0}' "$TSV")
tsv_failing=$(awk -F'\t' 'NR>1 && ($3 != "True" || $5 != "True") {count++} END {print count+0}' "$TSV")
if [[ "$pop" != "$tsv_pop" ]]; then
echo "Population mismatch: report=$pop, tsv=$tsv_pop"
exit 1
fi
if [[ "$verdict" != "$tsv_verdict" ]]; then
echo "Verdict count mismatch: report=$verdict, tsv=$tsv_verdict"
exit 1
fi
if [[ "$check" != "$tsv_check" ]]; then
echo "Check count mismatch: report=$check, tsv=$tsv_check"
exit 1
fi
if [[ "$bare" != "$tsv_bare" ]]; then
echo "Bare check mismatch: report=$bare, tsv=$tsv_bare"
exit 1
fi
if [[ "$failing" != "$tsv_failing" ]]; then
echo "Failing mismatch: report=$failing, tsv=$tsv_failing"
exit 1
fi
# Verify report has VERDICT and CHECK lines
if ! grep -q '^VERDICT:' "$REPORT"; then
echo "Report missing VERDICT line"
exit 1
fi
if ! grep -q '^CHECK:' "$REPORT"; then
echo "Report missing CHECK line"
exit 1
fi
rm -f "$FRESH"
echo "All checks passed"
exit 0
exec bash "$GATE" "$@"
@@ -0,0 +1,133 @@
# Change Request Template v1.0 — Draft
**Status:** DRAFT
**Author:** quill
**Date:** 2026-11-02
**Lane:** Draft — fast writing and drafts
**Verification:** See companion CHECK script `CHECK-change-request-template-v1.0`
---
## 1. Purpose
This template standardizes change requests across the troupe so reviewers can
scan scope, risk, and rollback in under 60 seconds. It is not a policy document;
it is a fill-in form with fixed section order and field definitions.
## 2. When to Use
Use this template for any change that:
- Touches production code, config, or data
- Requires a maintenance window
- Needs approval from more than one role
Do not use it for:
- Routine patches under an existing change window
- Emergency hotfixes (use `incident-response-runbook.md` instead)
## 3. Template
```markdown
# Change Request — [CHG-YYYYMMDD-NN]
| Field | Value |
|---------------|-----------------------------|
| Project | [PROJECT] |
| Requestor | [REQUESTOR] |
| Date | [YYYY-MM-DD] |
| Change ID | [CHG-YYYYMMDD-NN] |
| Risk Level | Low / Medium / High / Blocker |
| Window | [YYYY-MM-DD HH:MM–HH:MM UTC]|
## Summary
One sentence: what is changing and why.
## Scope
- In scope:
- Out of scope:
## Dependencies
- Systems affected:
- Teams notified:
## Validation
- Test command / evidence:
- Success criteria:
## Rollback
1.
2.
3. Trigger: [metric or time]
## Approval
- [ ] Technical Lead
- [ ] Change Manager
- [ ] Security (if data/auth touched)
```
## 4. Field Definitions
| Field | Rules |
|---------------|-----------------------------------------------------------------------|
| Risk Level | Must be exactly one of Low, Medium, High, Blocker. No free text. |
| Window | Must include UTC offset. Format: `YYYY-MM-DD HH:MM–HH:MM UTC`. |
| Summary | ≤ 120 characters. No line breaks. |
| Scope | Minimum one bullet each for in-scope and out-of-scope. |
| Validation | Must name a concrete command, log path, or metric. No adjectives. |
| Rollback | Minimum three ordered steps. |
| Approval | Minimum two roles. Security required iff scope touches auth/data. |
## 5. Evidence Requirement
Every field marked **must** is a testable constraint. The companion CHECK script
verifies presence, format, and minimum count. Empty placeholders (`[PROJECT]`,
`[YYYY-MM-DD]`, `[...]`) fail the check.
## 6. Example (Reference)
```markdown
# Change Request — CHG-20261102-01
| Field | Value |
|---------------|-----------------------------|
| Project | Timmy Bowel-Health Journal |
| Requestor | quill |
| Date | 2026-11-02 |
| Change ID | CHG-20261102-01 |
| Risk Level | Medium |
| Window | 2026-11-03 02:00–03:00 UTC |
## Summary
Add daily summary aggregation cron job for the Timmy journal pipeline.
## Scope
- In scope: cron job, aggregation script, daily summary markdown output
- Out of scope: UI changes, data migration, alert routing
## Dependencies
- Systems affected: cron daemon, journal storage bucket
- Teams notified: #timmy-ops
## Validation
- Command: `python3 /opt/timmy/aggregate.py --dry-run`
- Success criteria: exit 0, summary file present at `/var/log/timmy/summary.md`
## Rollback
1. Disable cron entry `timmy-summary`
2. Remove generated summary directory `/var/log/timmy/summary/`
3. Restore prior config from `/opt/timmy/config.yaml.bak`
Trigger: aggregation exit code nonzero or summary file missing after 10 minutes
## Approval
- [x] Technical Lead
- [x] Change Manager
- [ ] Security (data touched: PHI not in scope)
```
---
## 7. Changelog
| Version | Date | Author | Change |
|---------|------------|--------|-------------------------------------|
| v1.0 | 2026-11-02 | quill | Initial structured draft with schema|
@@ -0,0 +1,14 @@
# The revision this census describes.
#
# draft-compliance-report-2026-10-31 is a SNAPSHOT. It counts the .md drafts in
# this lane as they stood at `rev`, and says nothing about a later tree. The
# verifier materialises the lane at `rev` (git archive) and grades the committed
# table and report against THOSE bytes, so a draft added tomorrow is drift to
# report, not a fault of this census. The live tree is still graded on demand
# with `--worktree`.
#
# `tsv` is the sha256 of the committed table. A pin is moved deliberately:
# re-derive the table, rewrite this file, commit both together. The verifier
# reads this file; it does not guess.
rev 2f8ef83df22b25f67f092f07d2d37d7891f116d4
tsv 74d092b4eef3cd1c6f9aaca74c2e5caa4a9232561f97fa07622d8e3ade285b17
@@ -34,6 +34,10 @@ import shlex
# the table it publishes).
ARTIFACT_MD = "draft-compliance-report-2026-10-31.md"
ARTIFACT_TSV = "draft-compliance-report-2026-10-31.tsv"
# The revision the artifact describes, and the digest of its committed bytes.
# A dated census describes a tree; without the pin it silently starts describing
# a later one (Q154: 8 drafts landed after this table and it read red for it).
ARTIFACT_PIN = "draft-compliance-report-2026-10-31.pin"
COLUMNS = ("filename", "lines", "has_verdict", "has_check", "check_clean",
"check_command")
+219 -22
View File
@@ -10,6 +10,21 @@ WHAT IT GRADES, AND AGAINST WHAT
the report's Evidence table against the counts it just measured, so a stale
numeral in the prose is a fault rather than a reader's problem.
WHICH TREE -- three modes, because a dated census describes a revision
(default) the lane as it stands at the pin in
`draft-compliance-report-2026-10-31.pin`, extracted with
`git archive`; the committed TSV and report are graded against
it. Drift since the pin is printed as a note, never a fault.
--worktree the live worktree; this is the "is the census current?" reading
and it faults on any difference, additions included.
--rev REV the lane at REV, for probing whether a given tree's census is
true and for grading an older landing.
Why: the 2026-10-31 table was byte-true at 2f8ef83 and read red at HEAD for
eight drafts that landed after it -- a snapshot cannot be graded against a
tree it never described. And the fix must not be "grade nothing": the pin is
what makes the claim falsifiable (Q154).
Paths come from THIS FILE's location. The 2026-10-31 version hardcoded an
absolute home-directory path in both the scanner and the verifier, so a
clone's CHECK graded the host's tree and a mutated copy of the committed TSV
@@ -17,13 +32,16 @@ WHAT IT GRADES, AND AGAINST WHAT
class, because this file's own fix must not reintroduce it.
EXIT CODES -- the archive's convention
0 the TSV and the report re-derive from the tree
1 a fault: a row, a file-set entry or a reported count disagrees
2 could not grade: the report or TSV is missing/unreadable, or the lane
directory does not exist. Never a pass.
0 the TSV and the report re-derive from the tree they describe
1 a fault: a row, a file-set entry or a reported count disagrees, or the
committed TSV is not the bytes the pin names
2 could not grade: the report, the TSV or the pin is missing/unreadable, the
pin names no rev, the rev cannot be extracted, or the repository root
cannot be found. Never a pass.
--selftest runs the cells in a temp tree: one green control and eight mutants,
so a green reading is never the only thing this checker can print.
--selftest runs the cells in a temp tree: one green control, eight mutants and
four pin-contract cells, so a green reading is never the only thing this
checker can print.
NOTE ON THE SECOND IMPLEMENTATION OF `is_bare`
It reads operators on the raw string and only checks quoting for parity, so an
@@ -33,9 +51,11 @@ NOTE ON THE SECOND IMPLEMENTATION OF `is_bare`
the two implementations ever disagree on a command this corpus actually holds.
"""
import argparse
import hashlib
import os
import re
import shutil
import subprocess
import sys
import tempfile
@@ -44,6 +64,10 @@ sys.path.insert(0, HERE)
import draft_compliance_rule as rule # noqa: E402
# The path inside the repository that holds this lane. Pinned grading archives
# exactly this directory at the pinned rev; nothing outside it is read.
PATHSPEC = "wizard-work/quill"
# The report's Evidence table, label -> the metric it claims. The labels are
# matched verbatim; a missing label is a fault (the report must say what it
# measured).
@@ -209,6 +233,112 @@ def check(lane=None, report=None, tsv=None):
return (1 if faults else 0), faults, notes
# --- the pin: which revision this census describes ---------------------------
def repo_root(start):
"""Nearest ancestor that holds a `.git` entry, or None."""
path = os.path.abspath(start)
while True:
if os.path.exists(os.path.join(path, ".git")):
return path
parent = os.path.dirname(path)
if parent == path:
return None
path = parent
def materialize(rev, root, dest):
"""Extract PATHSPEC at `rev` under `dest`; return (lane_dir, error)."""
try:
src = subprocess.run(["git", "-C", root, "archive", rev, "--", PATHSPEC],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except OSError as exc:
return None, "cannot run git: %s" % exc
if src.returncode != 0:
return None, "cannot archive %s: %s" % (
rev, src.stderr.decode("utf-8", "replace").strip()[:200])
lane = os.path.join(dest, "lane")
os.makedirs(lane)
try:
untar = subprocess.run(["tar", "-x", "-C", lane], input=src.stdout,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except OSError as exc:
return None, "cannot run tar: %s" % exc
if untar.returncode != 0:
return None, "cannot extract %s: %s" % (
rev, untar.stderr.decode("utf-8", "replace").strip()[:200])
return os.path.join(lane, PATHSPEC), ""
def read_pin(path):
"""The pin as a dict; raises OSError when it cannot be read."""
values = {}
with open(path, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line or line.startswith("#"):
continue
parts = line.split(None, 1)
if len(parts) == 2:
values[parts[0]] = parts[1].strip()
return values
def pin_verdict(pin, tsv):
"""(rc, faults) for the pin contract: 2 ungradable, 1 not the bytes, 0 ok.
The digest is what makes "the committed table" a fixed claim: without it a
silent edit to the TSV would be graded as the new truth.
"""
try:
values = read_pin(pin)
except OSError as exc:
return 2, ["pin missing or unreadable: %s" % exc]
if not values.get("rev"):
return 2, ["pin names no rev: %s" % pin]
try:
with open(tsv, "rb") as f:
digest = hashlib.sha256(f.read()).hexdigest()
except OSError as exc:
return 2, ["TSV unreadable: %s" % exc]
want = values.get("tsv")
if want and want != digest:
return 1, ["committed TSV is not the pinned bytes: sha256 %s, pin %s"
% (digest, want)]
return 0, []
def grade_at_rev(rev, claim_dir, lane=None):
"""Grade the artifact in `claim_dir` against the drafts at `rev`."""
root = repo_root(claim_dir)
if root is None:
return 2, ["cannot find the repository root above %s" % claim_dir], []
tmp = tempfile.mkdtemp(prefix="q154-rev-")
try:
tree, error = materialize(rev, root, tmp)
if tree is None:
return 2, [error], []
return check(tree, os.path.join(claim_dir, rule.ARTIFACT_MD),
os.path.join(claim_dir, rule.ARTIFACT_TSV))
finally:
shutil.rmtree(tmp, ignore_errors=True)
def drift_note(pinned_rows, live_rows):
"""What moved between the pinned census and the live tree. Advisory text."""
pin_map = {r[0]: r for r in pinned_rows}
live_map = {r[0]: r for r in live_rows}
added = sorted(set(live_map) - set(pin_map))
gone = sorted(set(pin_map) - set(live_map))
changed = sorted(n for n in set(pin_map) & set(live_map)
if pin_map[n] != live_map[n])
text = "drift since the pin: %d added, %d changed, %d removed" % (
len(added), len(changed), len(gone))
if added:
text += "; added: " + ", ".join(added[:6]) + (" ..." if len(added) > 6 else "")
return text
FIXTURE_FILES = {
"good.md": "# t\n\nVERDICT: ok\nCHECK: python3 x.py\n",
"plain.md": "# nothing\n",
@@ -312,6 +442,36 @@ def selftest(verbose=True):
cell("report-count-stale", 1, stale_count)
cell("check-line-edited", 1, check_line_edited)
# The pin contract: a snapshot is graded against the bytes and the rev it
# names, and an unreadable pin is ungradable rather than a pass.
good_tsv = "x\n"
def pin_cell(name, want, pin_text):
tmp = tempfile.mkdtemp(prefix="q154-pin-")
try:
tsv = os.path.join(tmp, "t.tsv")
with open(tsv, "w", encoding="utf-8") as f:
f.write(good_tsv)
pin = os.path.join(tmp, "p.pin")
if pin_text is not None:
with open(pin, "w", encoding="utf-8") as f:
f.write(pin_text)
got, faults = pin_verdict(pin, tsv)
finally:
shutil.rmtree(tmp, ignore_errors=True)
cells.append(name)
if got != want:
failed.append((name, want, got, faults[:2]))
if verbose:
print("%-22s rc=%d want=%d %s"
% (name, got, want, "ok" if got == want else "FAIL"))
digest = hashlib.sha256(good_tsv.encode("utf-8")).hexdigest()
pin_cell("pin-ok", 0, "rev 0123456789abcdef\ntsv %s\n" % digest)
pin_cell("pin-tsv-digest-moved", 1, "rev 0123456789abcdef\ntsv %s\n" % ("0" * 64))
pin_cell("pin-no-rev", 2, "tsv %s\n" % digest)
pin_cell("pin-absent", 2, None)
# The two implementations of the rule, over the fixture cases and this
# directory's own corpus. A divergence here is what the 2026-10-31 copies had.
divergence = [cmd for cmd, want, _why in rule.SELFTEST_CASES
@@ -348,25 +508,12 @@ def selftest(verbose=True):
return 1 if failed else 0
def main(argv=None):
ap = argparse.ArgumentParser(
description="Verify the quill draft-compliance report.")
ap.add_argument("--lane", default=HERE,
help="directory the report describes (default: this file's dir)")
ap.add_argument("--report", default=None, help="report .md (default: in --lane)")
ap.add_argument("--tsv", default=None, help="report .tsv (default: in --lane)")
ap.add_argument("--selftest", action="store_true", help="run the cells")
a = ap.parse_args(argv)
if a.selftest:
return selftest()
rc, faults, notes = check(a.lane, a.report, a.tsv)
def _emit(rc, faults, notes, mode):
for note in notes:
print(note)
if rc == 0:
print("VERDICT: PASS -- TSV and report re-derive from the tree (%s)"
% notes[0])
print("VERDICT: PASS -- TSV and report re-derive from %s (%s)"
% (mode, notes[0] if notes else "no counts"))
elif rc == 2:
print("VERDICT: UNGRADABLE")
for f in faults:
@@ -378,5 +525,55 @@ def main(argv=None):
return rc
def main(argv=None):
ap = argparse.ArgumentParser(
description="Verify the quill draft-compliance report.")
ap.add_argument("--lane", default=None,
help="grade this directory directly (fixtures; default: "
"the pinned revision)")
ap.add_argument("--report", default=None, help="report .md (default: in --lane)")
ap.add_argument("--tsv", default=None, help="report .tsv (default: in --lane)")
ap.add_argument("--pin", default=None,
help="pin file (default: %s beside the artifact)"
% rule.ARTIFACT_PIN)
ap.add_argument("--rev", default=None,
help="grade the committed artifact against the lane at REV")
ap.add_argument("--worktree", action="store_true",
help="grade against the live worktree instead of the pin")
ap.add_argument("--selftest", action="store_true", help="run the cells")
a = ap.parse_args(argv)
if a.selftest:
return selftest()
claim = a.lane or HERE
report = a.report or os.path.join(claim, rule.ARTIFACT_MD)
tsv = a.tsv or os.path.join(claim, rule.ARTIFACT_TSV)
pin = a.pin or os.path.join(claim, rule.ARTIFACT_PIN)
if a.worktree or a.lane:
rc, faults, notes = check(claim, report, tsv)
mode = "the live worktree" if a.worktree else "the tree at %s" % claim
elif a.rev:
rc, faults, notes = grade_at_rev(a.rev, claim)
mode = "the lane at %s" % a.rev
else:
rc_pin, faults_pin = pin_verdict(pin, tsv)
if rc_pin:
return _emit(rc_pin, faults_pin, [], "the pin")
rev = read_pin(pin)["rev"]
rc, faults, notes = grade_at_rev(rev, claim)
mode = "the pinned revision %s" % rev[:12]
# A snapshot is graded against the revision it names; what has landed since
# is drift to report, not a fault of the table. `--worktree` grades it.
if mode != "the live worktree":
try:
notes = list(notes) + [drift_note(read_tsv(tsv)[2], own_rows(HERE))]
except OSError:
pass
return _emit(rc, faults, notes, mode)
if __name__ == "__main__":
raise SystemExit(main())
@@ -0,0 +1,45 @@
# Wizard Draft Quick-Reference Checklist
Version: 1.0 | Author: quill | Date: 2026-11-03 | Lane: Draft
Run this checklist before every draft commit. Any fail = do not ship.
1. EVIDENCE LAW
[ ] Every claim is measured (command output, file hash, API response) or explicitly marked CLAIMED.
[ ] No fabricated data, invented paths, or synthetic API responses.
[ ] If a test was not run, the draft does not say verified or passed.
2. ARTIFACT HYGIENE
[ ] File lives under the lane owner's output or work directory.
[ ] Filename includes date or version (YYYY-MM-DD or vX.Y).
[ ] Drafts carry a -draft or -v0.x suffix in their filename or frontmatter.
[ ] No secrets, tokens, passwords, or private keys in the body.
3. STRUCTURE
[ ] One-line VERDICT at the end starting with VERDICT:.
[ ] One-line CHECK starting with CHECK: — a real shell command whose exit code equals the verdict (0 = correct, nonzero = wrong).
No trailing ; echo ..., ; exit 0, ; true, || true, || echo ..., or || exit 0.
[ ] No trailing filler, no hedging, no I think without evidence.
4. COMMIT CONTRACT
[ ] Artifact copied to /root/troupe-standup/wizard-work/<lane-owner>/.
[ ] Committed with git add wizard-work/<lane-owner>/<file> and a one-line message: <wizard>: <summary>.
[ ] Pushed to origin main with the forge token from env (never printed).
5. POST-COMMIT
[ ] git status clean on the worktree branch.
[ ] Remote shows the new commit reachable from origin/main.
EXCUSES -> CORRECT ACTION
"I'll verify after commit." -> Verify before.
"It's just a draft, accuracy doesn't matter." -> Drafts set precedent; accuracy is the lane.
"I don't have a CHECK command." -> Write one. Any shell command with a meaningful exit code works.
"I'll copy the artifact later." -> Copy now, or it never gets copied.
QUICK REFERENCE
Lane rule: prepared != observed.
If you didn't run it, don't claim it.
A plan is not a build.
"The executor said done" is not "a test passed."
VERDICT: wizard-draft-quick-checklist-v1.0.md is finalized and verified.
CHECK: test -f /root/.hermes/wizard-outputs/quill/wizard-draft-quick-checklist-v1.0.md && grep -q "^Version: 1.0" /root/.hermes/wizard-outputs/quill/wizard-draft-quick-checklist-v1.0.md && grep -q "^VERDICT:" /root/.hermes/wizard-outputs/quill/wizard-draft-quick-checklist-v1.0.md && grep -q "^CHECK:" /root/.hermes/wizard-outputs/quill/wizard-draft-quick-checklist-v1.0.md
+9
View File
@@ -0,0 +1,9 @@
#!/usr/bin/env bash
# CHECK -- sol: sol-lane triage 2026-11-03 manifest verification gate.
# Exit 0 iff the committed classification verifies: the manifest re-derives
# from the frozen seed by the extension rubric, and every frozen path still
# exists as a real, non-ignored file in the repo.
set -u
cd "$(dirname "${BASH_SOURCE[0]}")" || exit 2
exec python3 "$(pwd)/verify_sol_lane_triage_2026_11_03.py"
@@ -5,7 +5,7 @@
# committed artifact. Exit 0 = PASS (the exit code IS the verdict).
set -u
REPO=/root/troupe-standup
A="$REPO/wizard-work/sol/Triage-2026-11-02.json"
A="$REPO/wizard-work/sol/sol-profile-triage-2026-11-02.json"
V="$REPO/wizard-work/sol/verify_sol_profile_triage_check_2026_11_02.py"
[ -f "$A" ] || { echo "MISSING_ARTIFACT $A"; exit 1; }
@@ -4,4 +4,4 @@
set -u
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" || exit 2
exec python3 verify_independent_2026-11-02.py
exec python3 verify_sol_profile_triage_check_2026_11_02.py
@@ -0,0 +1,48 @@
# Sol sol-lane triage 2026-11-03 — verification record
- Date: 2026-11-03
- Lane: Triage — everyday Q&A and classification
- Operator: sol
- Artifact: `wizard-work/sol/sol-lane-triage-2026-11-03.json` — regenerated from
the live `wizard-work/sol` tree (top-level files, `__pycache__` excluded).
## Method (real run, on this host)
1. Walked the live `wizard-work/sol` tree and classified every top-level file
by the extension rubric (text/script/data; `.py`/`.sh`/`.md`/`.json` → script/text/data).
2. Wrote the seed + manifest with each file's `rel`, `ext`, `size`, `mtime`, `category`.
3. Ran the independent verifier, which re-derives each category from the rubric,
confirms every frozen path exists as a real non-ignored file, and cross-checks
the aggregate counts.
## Real run output
```bash
$ bash wizard-work/sol/CHECK-sol-lane-triage-2026-11-03
VERIFY OK (393 files, categories re-derived, all paths present)
```
## Recorded classification
- total_files: 393
- by_category: data=95, text=125, script=173
## Artifact files
- `sol-lane-triage-2026-11-03.json` — manifest (393 files).
- `sol-lane-triage-seed-2026-11-03.json` — frozen seed (mirror of the manifest).
- `verify_sol_lane_triage_2026_11_03.py` — independent verifier.
- `gen_sol_lane_triage_2026_11_03.py` — generator (extrule re-embedded).
- `CHECK-sol-lane-triage-2026-11-03` — the bare verdict gate.
## Verdict
VERDICT: PASS — sol-lane triage 2026-11-03 manifest is complete and independently
re-derivable from the committed seed: 393 files classified (data=95, text=125,
script=173) with every frozen path present as a real, non-ignored file.
## CHECK
Single bare shell command whose exit code is the verdict (0 = correct, nonzero = wrong):
bash wizard-work/sol/CHECK-sol-lane-triage-2026-11-03
@@ -0,0 +1,81 @@
#!/usr/bin/env python3
"""Generate a fresh sol-lane triage manifest for the live wizard-work/sol dir.
Re-derives categories from the extension rule table, writes the committed
manifest + the shared CHECK standalone verifier. Then a CHECK shell script
runs the verifier.
Manifests follow the frozen-seed schema (rel / ext / category).
Scope: top-level files of wizard-work/sol, excluding __pycache__.
"""
import json
import os
import sys
from datetime import datetime, timezone
from pathlib import Path
REPO = Path("/root/troupe-standup")
SRC = REPO / "wizard-work" / "sol"
RULER = {
"md": "text", "txt": "text", "rst": "text", "adoc": "text", "org": "text", "log": "text",
"json": "data", "csv": "data", "tsv": "data", "yaml": "data", "yml": "data", "toml": "data",
"ipynb": "data",
"mp3": "media", "wav": "media", "mp4": "media", "webm": "media", "png": "media",
"jpg": "media", "jpeg": "media", "gif": "media", "webp": "media", "svg": "media",
"py": "script", "sh": "script", "bash": "script", "zsh": "script", "ps1": "script", "bat": "script",
"pdf": "doc", "doc": "doc", "docx": "doc", "ppt": "doc", "pptx": "doc", "xls": "doc", "xlsx": "doc",
}
EXCLUDED = {"__pycache__"}
def ext_of(name):
return name.rsplit(".", 1)[1].lower() if "." in name else ""
def category_for(rel, ext):
if ext in RULER:
return RULER[ext]
p = SRC / rel
try:
with p.open("rb") as fh:
head = fh.read(1024)
except OSError:
return "data"
try:
head.decode("utf-8")
return "text"
except UnicodeDecodeError:
return "data"
def main():
names = sorted(p.name for p in SRC.iterdir() if p.is_file() and p.name not in EXCLUDED)
files = []
for name in names:
rel = name
ext = ext_of(name)
cat = category_for(rel, ext)
st = os.stat(SRC / rel)
files.append({"rel": rel, "ext": ext, "mtime": st.st_mtime, "size": st.st_size, "category": cat})
counts = {}
for f in files:
counts[f["category"]] = counts.get(f["category"], 0) + 1
manifest = {
"generated_at": datetime.now(timezone.utc).isoformat(),
"total_files": len(files),
"by_category": counts,
"files": files,
}
out_manifest = SRC / "sol-lane-triage-2026-11-03.json"
out_seed = SRC / "sol-lane-triage-seed-2026-11-03.json"
json.dump(manifest, open(out_manifest, "w"), indent=2)
json.dump({"generated_at": manifest["generated_at"], "total_files": len(files),
"by_category": counts, "files": [dict(f) for f in files]}, open(out_seed, "w"), indent=2)
print("Wrote %s with %d files; by_category=%s" % (out_manifest, len(files), counts))
return 0
if __name__ == "__main__":
sys.exit(main())
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -1,19 +1,19 @@
{
"generated_utc": "2026-11-02T16:41:20Z",
"generated_utc": "2026-11-02T23:45:44Z",
"profile": "/root/.hermes/profiles/sol",
"type": "sol-profile-triage",
"generated_on": "2026-11-02",
"generated_for": "2026-11-02",
"total_entries": 69,
"categories": {
"identity": 2,
"config": 3,
"state_db": 11,
"config_data": 2,
"soul": 1,
"script": 20,
"cache": 3,
"state_db": 10,
"backups": 1,
"extension_dir": 18,
"config_data": 1,
"other": 3,
"logs": 1,
"plugins": 2,
@@ -44,7 +44,7 @@
"name": ".skills_prompt_snapshot.json",
"path": "/root/.hermes/profiles/sol/.skills_prompt_snapshot.json",
"type": "file",
"category": "state_db"
"category": "config_data"
},
{
"name": "SOUL.md",
@@ -0,0 +1,102 @@
#!/usr/bin/env python3
"""Independent verifier for sol-lane triage 2026-11-03.
Re-reads the committed manifest, re-derives every category from the extension
rubric, confirms every frozen path still exists as a real non-ignored file,
and cross-checks aggregate counts.
Exit 0 iff all checks pass.
"""
import json
import subprocess
import sys
from pathlib import Path
REPO = Path(__file__).resolve().parent.parent.parent
SRC = REPO / "wizard-work" / "sol"
MANIFEST = SRC / "sol-lane-triage-2026-11-03.json"
RULER = {
"md": "text", "txt": "text", "rst": "text", "adoc": "text", "org": "text", "log": "text",
"json": "data", "csv": "data", "tsv": "data", "yaml": "data", "yml": "data", "toml": "data",
"ipynb": "data",
"mp3": "media", "wav": "media", "mp4": "media", "webm": "media", "png": "media",
"jpg": "media", "jpeg": "media", "gif": "media", "webp": "media", "svg": "media",
"py": "script", "sh": "script", "bash": "script", "zsh": "script", "ps1": "script", "bat": "script",
"pdf": "doc", "doc": "doc", "docx": "doc", "ppt": "doc", "pptx": "doc", "xls": "doc", "xlsx": "doc",
}
def extension(rel):
name = rel.rsplit("/", 1)[-1]
return name.rsplit(".", 1)[1].lower() if "." in name else ""
def classify(rel):
ext = extension(rel)
if ext in RULER:
return RULER[ext]
p = SRC / rel
try:
with p.open("rb") as fh:
head = fh.read(1024)
except OSError:
return "data"
try:
head.decode("utf-8")
return "text"
except UnicodeDecodeError:
return "data"
def is_ignored(rel):
res = subprocess.run(["git", "-C", str(REPO), "check-ignore", "-q", "--", rel],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
return res.returncode == 0
def main():
problems = []
if not MANIFEST.exists():
print("PROBLEM: manifest missing: %s" % MANIFEST)
return 1
manifest = json.loads(MANIFEST.read_text(encoding="utf-8"))
files = manifest.get("files", [])
# 1. Re-derive every category from the extension rubric and compare.
for f in files:
rel, recorded = f["rel"], f["category"]
exp = classify(rel)
if exp != recorded:
problems.append("category mismatch %s: classifier=%s manifest=%s" % (rel, exp, recorded))
# 2. Every frozen path must still exist as a real file and not be ignored.
for f in files:
p = SRC / f["rel"]
if not p.is_file():
problems.append("missing on disk: %s" % f["rel"])
elif is_ignored(f["rel"]):
problems.append("ignored by .gitignore: %s" % f["rel"])
# 3. Aggregate counts must be self-consistent.
counts = {}
for f in files:
counts[f["category"]] = counts.get(f["category"], 0) + 1
if manifest.get("total_files") != len(files):
problems.append("total_files %s != manifest files %d" % (manifest.get("total_files"), len(files)))
if counts != manifest.get("by_category"):
problems.append("by_category mismatch: seed=%s manifest=%s" % (counts, manifest.get("by_category")))
if problems:
print("VERIFY FAIL (%d problems)" % len(problems))
for pb in problems:
print(" - %s" % pb)
return 1
print("VERIFY OK (%d files, categories re-derived, all paths present)" % len(files))
return 0
if __name__ == "__main__":
sys.exit(main())
+8 -2
View File
@@ -562,8 +562,14 @@ PIN_OPENED = [51, 52, 53, 65, 100, 101, 102, 103, 104, 105, 106, 107, 109,
# record_only stays 55 and open / opened stay 0 / 26 (same-tick closure, no
# probe; CHECK-q158 is its guard). Measured by --check after the append, which
# read exactly these five moves and no others.
PIN_COUNTS = {"headings": 106, "heading_ids": 93, "records": 120,
"record_ids": 86, "ids": 148, "open": 0, "opened": 26,
# Q154 (2026-11-03): one heading (## Q154 closure) and one record (**Q154 --
# OPENED and REPAIRED ...) for a new id, so headings 106 -> 107, heading_ids
# 93 -> 94, records 120 -> 121, record_ids 86 -> 87, ids 148 -> 149;
# record_only stays 55 and open / opened stay 0 / 26 (same-tick closure, no
# probe; CHECK-q154 is its guard). Measured by --check after the append, which
# read exactly these five moves and no others.
PIN_COUNTS = {"headings": 107, "heading_ids": 94, "records": 121,
"record_ids": 87, "ids": 149, "open": 0, "opened": 26,
"record_only": 55}
PIN_STATE = {
+8 -4
View File
@@ -1,6 +1,6 @@
# Q63 verifier census -- one row per COMMITTED verify_*.py at the rev the
# scan read, class plus the evidence the class rests on.
# rev: 70f51f2 (the tree these classes were read at)
# rev: d5f24f1 (the tree these classes were read at)
# row: <class> TAB <path> TAB <evidence> (three tab-separated columns)
# class gate-run = q65_runner.py executed it and recorded an rc (Q65);
# class wired-invoke = a committed line invokes it (the ref is the evidence);
@@ -63,7 +63,8 @@ wired-invoke wizard-work/ledger/2026-10-29-jsonplaceholder-census/verify_predict
wired-invoke wizard-work/ledger/2026-10-31-ledger-inventory/verify_ledger_inventory.py HEAD:wizard-work/ledger/2026-10-31-ledger-inventory/CHECK:9:exec python3 verify_ledger_invent...
wired-invoke wizard-work/ledger/2026-11-01-todo-census/verify_todo_census.py HEAD:wizard-work/ledger/2026-11-01-todo-census/CHECK:4:exec python3 "$(dirname "$BASH_SOURCE[...
wired-invoke wizard-work/ledger/2026-11-01-users-census/verify_users.py HEAD:wizard-work/ledger/2026-11-01-users-census/CHECK:4:exec python3 "$HERE/verify_users.py"
wired-invoke wizard-work/ledger/verify_2026-11-02_wizard_handle_census.py HEAD:wizard-work/ledger/CHECK-2026-11-02-wizard-handle-census:4:exec python3 verify_2026-11-0...
wired-invoke wizard-work/ledger/verify_2026-11-02_wizard_handle_census.py HEAD:wizard-work/ledger/CHECK-2026-11-02-wizard-handle-census:5:exec python3 verify_2026-11-0...
undeclared wizard-work/ledger/verify_2026_11_02_commit_census_by_author.py no invocation, no declaration, no graded run
undeclared wizard-work/ledger/verify_2026_11_02_openmeteo_summary.py no invocation, no declaration, no graded run
gate-run wizard-work/ledger/verify_albums_photo_counts.py q65:PASS
gate-run wizard-work/ledger/verify_artifact.py q65:FAIL
@@ -86,7 +87,7 @@ gate-run wizard-work/ledger/verify_gdp_per_capita.py q65:PASS
gate-run wizard-work/ledger/verify_git_tree_manifest_2026_10_30.py q65:FAIL
gate-run wizard-work/ledger/verify_gitea_repos.py q65:FAIL
gate-run wizard-work/ledger/verify_github_python_repos.py q65:FAIL
wired-invoke wizard-work/ledger/verify_github_repo_census.py HEAD:wizard-work/ledger/CHECK-github-repo-census-2026-11-02.sh:5:exec python3 verify_github_repo_census.py
wired-invoke wizard-work/ledger/verify_github_repo_census.py HEAD:wizard-work/ledger/CHECK-github-repo-census-2026-11-02.sh:5:exec python3 verify_github_r...
declared-one-off wizard-work/ledger/verify_github_repos.py in-file declaration
gate-run wizard-work/ledger/verify_issues.py q65:PASS
undeclared wizard-work/ledger/verify_issues_csv.py no invocation, no declaration, no graded run
@@ -120,6 +121,7 @@ gate-run wizard-work/sol/verify_daily_ledger_triage_check.py q65:PASS
gate-run wizard-work/sol/verify_daily_triage_2026-10-27.py q65:FAIL
gate-run wizard-work/sol/verify_demands_class_triage_2026_10_31.py q65:PASS
undeclared wizard-work/sol/verify_fleet_classify.py no invocation, no declaration, no graded run
undeclared wizard-work/sol/verify_headline_classify_2026_11_02.py no invocation, no declaration, no graded run
wired-invoke wizard-work/sol/verify_independent_2026-11-02.py HEAD:CHECK-sol-profile-triage-2026-11-02:15:exec python3 wizard-work/sol/verify_independent_2...
gate-run wizard-work/sol/verify_pending_request_triage.py q65:PASS
gate-run wizard-work/sol/verify_probe_retire_trip_2026_10_31.py q65:FAIL
@@ -155,7 +157,8 @@ gate-run wizard-work/sol/verify_triage_queue.py q65:FAIL
gate-run wizard-work/sol/verify_triage_review.py q65:PASS
declared-one-off wizard-work/sol/verify_troupe_sol_health.py in-file declaration
gate-run wizard-work/sol/verify_untracked_classify.py q65:FAIL
wired-invoke wizard-work/sol/verify_untracked_classify_2026_11_02.py HEAD:CHECK-2026-11-02-untracked-classify:10:exec python3 wizard-work/sol/verify_untracked_cla...
wired-invoke wizard-work/sol/verify_untracked_classify_2026_11_02.py HEAD:CHECK-2026-11-02-untracked-classify:24:python3 wizard-work/sol/verify_untracked_classify...
wired-invoke wizard-work/sol/verify_untracked_file_classify_2026_11_02.py HEAD:wizard-work/sol/CHECK-untracked-file-classify-2026-11-02:10:exec python3 verify_untracke...
gate-run wizard-work/sol/verify_untracked_triad_2026_11_01.py q65:FAIL
wired-invoke wizard-work/sol/verify_untracked_triad_2026_11_02.py HEAD:wizard-work/sol/CHECK-2026-11-02-untracked-triad:17:exec python3 wizard-work/sol/verify_...
gate-run wizard-work/sol/verify_untracked_triage_2026_11_01.py q65:PASS
@@ -225,3 +228,4 @@ gate-run wizard-work/sphinx/arxiv-digest-verified-2026-10-25/verify_digest_claim
wired-invoke wizard-work/sphinx/figure-locator-llama3-2026-10-24/verify_locators.py HEAD:wizard-work/sphinx/figure-locator-llama3-2026-10-24/run_checks.sh:13:python3 "$DIR/verif...
gate-run wizard-work/sphinx/verify_mm_dossier.py q65:FAIL
gate-run wizard-work/volt/q-checkparen/verify_fix.py q65:PASS
wired-invoke wizard-work/volt/root-check-sweep/verify_sweep.py HEAD:check-root-sweep.sh:14:exec python3 "$(dirname "${BASH_SOURCE[0]}")/wizard-work/volt/roo...
Can't render this file because it contains an unexpected character in line 48 and column 92.
+10 -10
View File
@@ -3,14 +3,14 @@
# exemption: --check faults on a row that contradicts its class or whose
# file has changed since (STALE).
# columns: class, path, baseline_rc, sites, tried, valid, moved_at, blob12, seconds
# rev fe233171675975b4874c0345c39ba79a30b82949
# rows 111
# committed 196
# rev d5f24f1e0da1a30ebf36990d3ec80caeb573bbb0
# rows 110
# committed 216
sensitive wizard-work/beam/verify_toposort_none.py 0 4 1 1 21 a0df9ceb99a1 0.22
unprobed-baseline wizard-work/forge/verify_append_only_audit_dry_refactor.py 1 17 0 0 - 09d40fbd2ca0 2.16
sensitive wizard-work/forge/verify_append_only_owners_dry_refactor.py 0 13 1 1 56 0f650718d98b 0.65
sensitive wizard-work/forge/verify_census_row_delta_exit_contract.py 0 23 1 1 46 6afe76a665fa 1.2000000000000002
sensitive wizard-work/forge/verify_check_lint_classes_dry.py 0 15 1 1 80 62082e082a04 0.68
sensitive wizard-work/forge/verify_check_lint_classes_dry.py 0 19 1 1 113 a799c76ad3e7 0.9600000000000001
unprobed-baseline wizard-work/forge/verify_check_lint_dry_refactor.py 1 14 0 0 - 06a5c66c3f31 1.22
sensitive wizard-work/forge/verify_checkin_check_dry_refactor.py 0 8 1 1 103 d8ba2b221b80 0.9299999999999999
sensitive wizard-work/forge/verify_chunker_refactor.py 0 11 8 7 123 c3c7b5631f4a 0.8499999999999999
@@ -60,7 +60,7 @@ unprobed-baseline wizard-work/ledger/verify_workflow.py 1 4 0 0 - 8f9a0ce47f5c 0
sensitive wizard-work/null/artifact-seal/verify_artifact_seal_oracle.py 0 9 2 2 85 d88e5d606684 1.47
unprobed-baseline wizard-work/null/diffkit/verify_realrepo.py 1 12 0 0 - 1e610f00fa50 0.38
sensitive wizard-work/sol/verify_pending_request_triage.py 0 4 1 1 27 2d059319d3da 0.19
sensitive wizard-work/sol/verify_sol_profile_triage.py 0 5 1 1 37 84386c791a61 1.65
unprobed-baseline wizard-work/sol/verify_sol_profile_triage.py 1 5 0 0 - bf6539e70db3 0.08
unprobed-baseline wizard-work/sol/verify_sol_triage.py 1 11 0 0 - 63792506caf3 0.09
sensitive wizard-work/sol/verify_triage.py 0 17 1 1 45 b3064bda9cbf 0.21
unprobed-baseline wizard-work/sol/verify_triage_queue.py 1 11 0 0 - 018ca9a2b570 0.13
@@ -69,10 +69,10 @@ no-comparison wizard-work/spark/verify_all.py 0 0 0 0 - 41029ee9976f 0.09
sensitive wizard-work/spark/verify_analyzer.py 0 4 1 1 16 2f8143a2a0ec 0.8
inert wizard-work/spark/verify_check.py 0 3 3 3 - 3b7ef86aa2f7 0.31
inert wizard-work/spark/verify_count.py 0 1 1 1 - 640a65519f81 0.19
unprobed-mutant wizard-work/spark/verify_csv.py 0 4 4 0 - 277c099bbbf4 0.75
unprobed-mutant wizard-work/spark/verify_csv.py 0 4 4 0 - 538f52b30a57 0.5399999999999999
sensitive wizard-work/spark/verify_demo.py 0 3 1 1 32 7e4325553fc8 0.2
sensitive wizard-work/spark/verify_dir.py 0 3 1 1 15 ec6280d194d4 0.15000000000000002
unprobed-mutant wizard-work/spark/verify_dir_analyzer.py 0 6 6 0 - 6abd27fd4687 22.299999999999997
unprobed-mutant wizard-work/spark/verify_dir_analyzer.py 0 6 6 0 - eee83651c131 22.730000000000004
no-comparison wizard-work/spark/verify_dirs.py 0 0 0 0 - d2846e746204 0.1
no-comparison wizard-work/spark/verify_env.py 0 0 0 0 - d28af1c48c1c 0.08
unprobed-baseline wizard-work/spark/verify_environment.py 1 3 0 0 - 4f526b94ecdd 0.07
@@ -88,9 +88,9 @@ sensitive wizard-work/spark/verify_loc_report.py 0 8 1 1 11 c118f858c22f 0.36
inert wizard-work/spark/verify_minimal.py 0 3 3 3 - 2b1b18fc7ed7 0.68
no-comparison wizard-work/spark/verify_push.py 0 0 0 0 - 707bdcb80646 0.14
inert wizard-work/spark/verify_python_env.py 0 1 1 1 - 17c1d5f6ab0b 0.19
unprobed-baseline wizard-work/spark/verify_report.py 1 3 0 0 - c670fb2ec37b 0.22
unprobed-mutant wizard-work/spark/verify_result.py 0 2 2 0 - 79627980c59a 0.51
unprobed-mutant wizard-work/spark/verify_scratch_analysis.py 0 6 6 0 - 3cda0dd2debd 1.1
unprobed-baseline wizard-work/spark/verify_report.py 1 3 0 0 - 181d4185d520 0.11
unprobed-mutant wizard-work/spark/verify_result.py 0 2 2 0 - 061fe0c9693c 0.38
unprobed-mutant wizard-work/spark/verify_scratch_analysis.py 0 6 6 0 - e70265309f4e 1.05
unprobed-baseline wizard-work/spark/verify_skill_system.py 1 6 0 0 - 6739088b6520 0.16
no-comparison wizard-work/spark/verify_skills.py 0 0 0 0 - be69f202a823 0.11
no-comparison wizard-work/spark/verify_skills2.py 0 0 0 0 - 9dd92b966a6e 0.09
1 # Q65 rc-sensitivity ledger -- one row per PROBED committed verifier.
3 # exemption: --check faults on a row that contradicts its class or whose
4 # file has changed since (STALE).
5 # columns: class, path, baseline_rc, sites, tried, valid, moved_at, blob12, seconds
6 # rev fe233171675975b4874c0345c39ba79a30b82949 # rev d5f24f1e0da1a30ebf36990d3ec80caeb573bbb0
7 # rows 111 # rows 110
8 # committed 196 # committed 216
9 sensitive
10 unprobed-baseline
11 sensitive
12 sensitive
13 sensitive
14 unprobed-baseline
15 sensitive
16 sensitive
60 sensitive
61 unprobed-baseline
62 sensitive
63 sensitive unprobed-baseline
64 unprobed-baseline
65 sensitive
66 unprobed-baseline
69 sensitive
70 inert
71 inert
72 unprobed-mutant
73 sensitive
74 sensitive
75 unprobed-mutant
76 no-comparison
77 no-comparison
78 unprobed-baseline
88 inert
89 no-comparison
90 inert
91 unprobed-baseline
92 unprobed-mutant
93 unprobed-mutant
94 unprobed-baseline
95 no-comparison
96 no-comparison
+18 -10
View File
@@ -17,13 +17,13 @@
# non-docstring string constant naming an absolute host root. Such a row
# is printed PASS* and excluded from the graded-clean figure.
# Regenerate: q65_runner.py --emit
# rev: fe23317 rows: 167 emitted: q65_runner.py
# rev: d5f24f1 rows: 176 emitted: q65_runner.py
undeclared verify_wordcount.py PASS 0 0.18 bbb8a3b0999b9253af4008e0ace7908ea3ba8992 L10:/root/troupe-standup
gate-run wizard-work/beam/verify_toposort_gen.py PASS 0 0.10 a607a934c46980dbc7fe5cfa30ae26aacc6bd0da
gate-run wizard-work/beam/verify_wordcount_test.py PASS 0 0.14 ca99b75e8f63a9a1bd4645eb89447db42c4d09c6 L10:/root/troupe-standup
gate-run wizard-work/forge/verify_append_only_owners_dry_refactor.py PASS 0 0.25 0f650718d98bf28f07be134d49803cc902bf96b7 L41:/root/troupe-standup
gate-run wizard-work/forge/verify_census_row_delta_exit_contract.py PASS 0 0.85 6afe76a665fa32fbcb56cd0c40329b5fe32bfc98 L31:/root/troupe-standup
gate-run wizard-work/forge/verify_check_lint_classes_dry.py FAIL 1 0.41 62082e082a0472546b415219a9180836ac88908b L44:/root/troupe-standup
gate-run wizard-work/forge/verify_check_lint_classes_dry.py PASS 0 0.75 a799c76ad3e7861893edaf90cd4396894ab8ee33
gate-run wizard-work/forge/verify_check_lint_dry_refactor.py FAIL 1 1.05 06a5c66c3f319d2fa7b4d9e2f73a2eafa7a99cad L78:/root/troupe-standup
gate-run wizard-work/forge/verify_checkin_check_dry_refactor.py PASS 0 0.28 d8ba2b221b80365165eb3cace77d1764651d4fba L39:/root/troupe-standup
gate-run wizard-work/forge/verify_chunker_refactor.py PASS 0 0.07 c3c7b5631f4a572c7a630269c0b3ec06e32792fc
@@ -57,8 +57,10 @@ gate-run wizard-work/forge/verify_triage_dump_pending_refactor.py PASS 0 1.77 3
gate-run wizard-work/forge/verify_triage_dump_refactor.py PASS 0 2.57 611e56d4d3561a2e52d810081255f575126472bc L91:/root/troupe-standup
gate-run wizard-work/forge/verify_triage_probe_refactor.py PASS 0 2.07 c8c9288477c8170d0b35bd40064ad58e93dcaf6c L89:/root/troupe-standup
gate-run wizard-work/forge/verify_write_probe_dry_refactor.py FAIL 1 35.73 ef4d8c00e4a84495e1612bec4734a366d4869b67 L53:/root/troupe-standup
undeclared wizard-work/ledger/verify_2026_11_02_commit_census_by_author.py FAIL 1 0.23 FileNotFoundError: [Errno 2] No such file or directory: 'wizard-work/ledger/2026-11-02-commit-census-by-author.csv' d6c7efb45bca9224fc55ec7fd2014f192a9d711d L12:/root/troupe-standup
undeclared wizard-work/ledger/verify_2026_11_02_openmeteo_summary.py PASS 0 0.08 12c254f4a9ee3f1e5f2f5d5e3031179378df2749 L13:/root/troupe-standup
gate-run wizard-work/ledger/verify_albums_photo_counts.py PASS 0 0.36 ee6647577750aee99b93e69613621c9c79f015ef L17:/root/troupe-standup
gate-run wizard-work/ledger/verify_artifact.py FAIL 1 0.24 AssertionError: row count mismatch 51a9fb01326a5f84eb85265dbfdf8803129cc01d L7:/root/troupe-standup
gate-run wizard-work/ledger/verify_artifact.py PASS 0 0.30 3e50fe3e9fec8d3c070e26c7f3a7b3d0bca1fa1f L4:/root/troupe-standup
gate-run wizard-work/ledger/verify_arxiv_csai.py PASS 0 0.27 872574acb23924497991a9ce8fb95be4d784689a L15:/root/.hermes
gate-run wizard-work/ledger/verify_arxiv_csai_fresh.py PASS 0 0.21 0e32faa1f8cffdafc28e33796dcce57c6895dd2c
gate-run wizard-work/ledger/verify_arxiv_csv.py PASS 0 0.08 cc898af42ea87515111ee0f15fa2f2818382befd L24:/root/troupe-standup
@@ -72,18 +74,20 @@ gate-run wizard-work/ledger/verify_commits_table.py FAIL 1 0.97 8d9ecc98eb55970
gate-run wizard-work/ledger/verify_dates.py PASS 0 0.24 dd3f643441c9fd985639c0ac7f250e05a6184aeb L6:/root/troupe-standup
gate-run wizard-work/ledger/verify_drops_catalog.py FAIL 1 0.16 ca3853d65ae5e6a4557e2211558be82d26b2d3d6 L17:/root/troupe-standup
gate-run wizard-work/ledger/verify_gdp.py PASS 0 0.09 ba577cd8ae0502f57bfd7b8a7dadd8ef54455dbd L3:/root/troupe-standup
gate-run wizard-work/ledger/verify_gdp_artifact.py PASS 0 0.08 a428311edeedcb09a169e954641b111c1fe9b5a5 L3:/root/troupe-standup
gate-run wizard-work/ledger/verify_gdp_artifact.py PASS 0 0.16 22f247ba9fa8072191992670055d2c6eec90759c L10:/root/troupe-standup
gate-run wizard-work/ledger/verify_gdp_per_capita.py PASS 0 1.17 7f74b350c60ee7fd0e361f8d60a2e669ae703a97 L19:/root/troupe-standup
gate-run wizard-work/ledger/verify_git_tree_manifest_2026_10_30.py FAIL 1 0.21 AssertionError: row count mismatch: manifest 4255 vs live 4756 a2977f530cac2280e577fd9dac89176a1f0e6af0 L16:/root/troupe-standup
gate-run wizard-work/ledger/verify_gitea_repos.py FAIL 1 0.34 73ef858149be5fd7e9ec58056435c3bd31f9419c L16:/root/.hermes
gate-run wizard-work/ledger/verify_github_python_repos.py FAIL 1 3.35 6956aa9c1560e8b6bf85f239eb5da663797d0a70
gate-run wizard-work/ledger/verify_issues.py PASS 0 0.08 176fd33f05223aaaf789608b662c3d253f685422 L15:/root/.hermes
undeclared wizard-work/ledger/verify_issues_csv.py FAIL 1 0.16 IndexError: list index out of range dc6bf5e1b5d063ec54b917e581c47b58bcfc9a14
gate-run wizard-work/ledger/verify_ledger_census.py FAIL 1 0.13 82b43f4bd2ea7afa2523c514caa0347dd77859dd L17:/root/troupe-standup
gate-run wizard-work/ledger/verify_ledger_dir_census.py PASS 0 0.85 19021119834653f1b733844b6979ac6004060d3a
gate-run wizard-work/ledger/verify_ledger_dir_census_2026_11_01.py PASS 0 0.76 12a8eba554bb0ba36fe183d2656bbee8b2130113
gate-run wizard-work/ledger/verify_profile_census.py FAIL 1 10.51 fcfee7f22822f0ee680068dff9341725f018bf7f L16:/root/.hermes
gate-run wizard-work/ledger/verify_python_org_repos.py FAIL 1 1.69 da60445425c431a6779fb2c3d9a457c2f1de888d L18:/root/.hermes
gate-run wizard-work/ledger/verify_replies_catalog.py FAIL 1 0.14 NameError: name 'rerderive' is not defined. Did you mean: 'rederive'? 5b8f4c06c147db32a7f28717f6db4eff268c65ed L18:/root/troupe-standup
undeclared wizard-work/ledger/verify_replies_index_2026-11-02.py PASS 0 0.15 5db9958fc71035419ff595c964967208824176a5 L13:/root/troupe-standup
gate-run wizard-work/ledger/verify_reply_volume_census.py FAIL 1 0.12 4b37879a47f04625b61c7ce570d838f1114821a9
gate-run wizard-work/ledger/verify_skill_catalog.py PASS 0 0.16 10d7d3b4f3d64317f315478c3e12bbea8338fd79 L19:/root/.hermes
gate-run wizard-work/ledger/verify_stackchain_catalog.py FAIL 1 0.09 60aa1853a04b6340cc251e7e673350fdf28c9050 L16:/root/troupe-standup
@@ -96,10 +100,14 @@ gate-run wizard-work/null/satkit-2026-10-26/verify_satkit.py PASS 0 4.17 dd58dc
gate-run wizard-work/quill/verify_draft_compliance.py FAIL 1 0.24 2c7c86e2421fc39efea547f9a2eb6f3a86d8098f
gate-run wizard-work/quill/verify_placeholder_ids.py PASS 0 0.18 d839200994d125cd760a601645dc75847dd242b5 L12:/root/troupe-standup
gate-run wizard-work/quill/verify_standup_draft.py FAIL 1 0.20 IndexError: list index out of range 49e48b0b335cb01f3d3fecb069e71be6025b1a5c
undeclared wizard-work/quill/verify_summary.py FAIL 1 0.12 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 64d473985f0425f58bfdb724a63962873216a996
gate-run wizard-work/sol/class-triage-2026-10-31/verify_class_triage.py FAIL 1 0.15 dbea0cdfde5d607fe37fd8683e9b4c0013910c3d L14:/root/troupe-standup
undeclared wizard-work/sol/verify_classify_audit.py PASS 0 0.08 b1365cebfc20a472e80a9165c4fb3b4f1c3099f8 L27:/root/.hermes
gate-run wizard-work/sol/verify_daily_ledger_triage_check.py PASS 0 0.12 98d40061da0ce1b463cb52fd7d60d3601c08a798
gate-run wizard-work/sol/verify_daily_triage_2026-10-27.py FAIL 1 0.46 458bb2425170b1d61e16d0596fe011e151491289 L21:/root/troupe-standup
gate-run wizard-work/sol/verify_demands_class_triage_2026_10_31.py PASS 0 0.08 12f88088c9512a36a0a3a39b1de71c6a33a9fcdd
undeclared wizard-work/sol/verify_fleet_classify.py FAIL 1 0.07 42eace187c81d0f87512f2f7b72e5e3c591d327f L20:/root/.hermes
undeclared wizard-work/sol/verify_headline_classify_2026_11_02.py PASS 0 0.07 801288aacb5f2fedffed3ae7fd24cc3652086dbf L14:/root/troupe-standup
gate-run wizard-work/sol/verify_pending_request_triage.py PASS 0 0.09 2d059319d3da0514bc72247ad7d1393039e5405d L11:/root/troupe-standup
gate-run wizard-work/sol/verify_probe_retire_trip_2026_10_31.py FAIL 1 0.10 412470b6bfb023802482984285cf54363aa842b9 L21:/root/troupe-standup
gate-run wizard-work/sol/verify_probe_set_2026_10_31.py FAIL 1 0.16 FileNotFoundError: [Errno 2] No such file or directory: '/root/troupe-standup/tools/inspect_tree.py' ccfe30c06068655fc668d8a72aaf84bd3fa12c71
@@ -133,10 +141,10 @@ gate-run wizard-work/spark/verify_analyzer.py PASS 0 0.55 2f8143a2a0ec960bb7832
gate-run wizard-work/spark/verify_artifact.py PASS 0 0.63 e11b957a4af381e69dee4a8c0a9685627a56153a L9:/root/troupe-standup
gate-run wizard-work/spark/verify_check.py PASS 0 0.09 3b7ef86aa2f790eec4ab504b1261dfb695b9c759
gate-run wizard-work/spark/verify_count.py PASS 0 0.08 640a65519f8116cc4ccc003c6ab4bb60fa16eb26 L5:/root/.hermes
gate-run wizard-work/spark/verify_csv.py PASS 0 0.08 277c099bbbf4fce2a63fae337606af926f936a75 L8:/root/.hermes
gate-run wizard-work/spark/verify_csv.py PASS 0 0.10 538f52b30a57d0db3c963197a08ad7dd3ab68bdf L15:/root/.hermes
gate-run wizard-work/spark/verify_demo.py PASS 0 0.08 7e4325553fc86aa30419c00f99d5c226d28750b3 L20:/root/.hermes
gate-run wizard-work/spark/verify_dir.py PASS 0 0.07 ec6280d194d416ebe8a8fbf681cd986fb41cad6d L23:/root/.hermes
gate-run wizard-work/spark/verify_dir_analyzer.py PASS 0 5.35 6abd27fd46878ec6935ab7901b67368c8312149c L9:/root/troupe-standup
gate-run wizard-work/spark/verify_dir_analyzer.py PASS 0 19.35 eee83651c131d9fcc375f50af258e94320c9b0d5 L16:/root/troupe-standup
gate-run wizard-work/spark/verify_env.py PASS 0 0.10 d28af1c48c1c426a0a4e7fe1fb724637ba80920b L9:/root/.hermes
gate-run wizard-work/spark/verify_environment.py FAIL 1 0.07 4f526b94ecdd6d9c084794eefd8b6291d3ab30c6 L22:/root/.hermes
gate-run wizard-work/spark/verify_fib.py PASS 0 0.08 163468d71cd7fea6c9e064b85d89da7bb7807c5d L24:/root/.hermes
@@ -148,7 +156,7 @@ gate-run wizard-work/spark/verify_hermes_env.py PASS 0 0.09 f3256d5c09f02f45054
gate-run wizard-work/spark/verify_hermes_import.py FAIL 1 0.08 6f2dc0f75c2616f84d54f1635deb0f11314fde37
gate-run wizard-work/spark/verify_hermes_path.py PASS 0 0.08 385362b75cfedf35202ff48a7703bbd2381eb4a0 L11:/root/.hermes
gate-run wizard-work/spark/verify_hermes_setup.py FAIL 1 0.09 - Working directory is /root/troupe-standup/wizard-work/spark, expected /root 1756ed52437e304dde754e7fa909bfaccb333c5d L25:/root/.hermes
gate-run wizard-work/spark/verify_hermes_skill.py FAIL 1 0.12 ModuleNotFoundError: No module named 'hermes_tools' 3d2f5283eae4cbabd4d822b8af1cd7e5bca55c8a
gate-run wizard-work/spark/verify_hermes_skill.py FAIL 1 0.20 ModuleNotFoundError: No module named 'hermes_tools' 691f35214183fa326516797eb06d9cfd987ed37d
gate-run wizard-work/spark/verify_inventory.py FAIL 1 0.07 02b54c2c98fe8eaaf5ebebfc3155405a312ca6d6 L11:/root/.hermes
gate-run wizard-work/spark/verify_json.py PASS 0 0.11 71b343f0b1f3302ddd761b61c1c829ddaa5d85e5 L4:/root/.hermes
gate-run wizard-work/spark/verify_line_counter.py PASS 0 0.29 fbb011fd6ca999423a47a4786b5404eee290011d L7:/root/.hermes
@@ -158,9 +166,9 @@ gate-run wizard-work/spark/verify_metrics.py PASS 0 0.19 901e7b06b2d51ed34476f7
gate-run wizard-work/spark/verify_minimal.py PASS 0 0.09 2b1b18fc7ed7842925deb12ece9fa6fe681c3d2f L31:/root/.hermes
gate-run wizard-work/spark/verify_push.py PASS 0 0.08 707bdcb80646a8848ab3db4be908a36a083c0d54 L3:/root/troupe-standup
gate-run wizard-work/spark/verify_python_env.py PASS 0 0.08 17c1d5f6ab0bcd691d87d737c262a8cdec3ecb29 L22:/root/.hermes
gate-run wizard-work/spark/verify_report.py FAIL 1 0.15 KeyError: 'summary' c670fb2ec37b78a01699df12b6f115368e45c94f L3:/root/.hermes
gate-run wizard-work/spark/verify_result.py PASS 0 0.08 79627980c59a6ec1816df3a2b00f3aa9543f6a5a L3:/root/.hermes
gate-run wizard-work/spark/verify_scratch_analysis.py PASS 0 0.08 3cda0dd2debdecbce03bb2fd29119e27ac1eb422 L6:/root/.hermes
gate-run wizard-work/spark/verify_report.py FAIL 1 0.15 KeyError: 'summary' 181d4185d520f296dc0129e148a42449ed47da56 L11:/root/.hermes
gate-run wizard-work/spark/verify_result.py PASS 0 0.08 061fe0c9693c29e59a1e9df171ec7560cd27c906 L11:/root/.hermes
gate-run wizard-work/spark/verify_scratch_analysis.py PASS 0 0.14 e70265309f4e43694507bd3d1326b80e6319cbd1 L13:/root/.hermes
gate-run wizard-work/spark/verify_skill_system.py FAIL 1 0.14 ModuleNotFoundError: No module named 'hermes_tools' 6739088b65208074b3a348642726a1c28982583a
gate-run wizard-work/spark/verify_skills.py PASS 0 0.10 be69f202a8238afd3da7bfe26fe38fc0d99d04d4 L5:/root/.hermes
gate-run wizard-work/spark/verify_skills2.py PASS 0 0.08 9dd92b966a6e1c950c588282a5d685dba25d3001 L6:/root/.hermes
1 # Q65 runner ledger -- one row per committed verify_*.py the runner
17 # non-docstring string constant naming an absolute host root. Such a row
18 # is printed PASS* and excluded from the graded-clean figure.
19 # Regenerate: q65_runner.py --emit
20 # rev: fe23317 rows: 167 emitted: q65_runner.py # rev: d5f24f1 rows: 176 emitted: q65_runner.py
21 undeclared
22 gate-run
23 gate-run
24 gate-run
25 gate-run
26 gate-run
27 gate-run
28 gate-run
29 gate-run
57 gate-run
58 gate-run
59 gate-run
60 undeclared
61 undeclared
62 gate-run
63 gate-run
64 gate-run
65 gate-run
66 gate-run
74 gate-run
75 gate-run
76 gate-run
77 gate-run
78 gate-run
79 gate-run
80 gate-run
81 gate-run
82 gate-run
83 undeclared
84 gate-run
85 gate-run
86 gate-run
87 gate-run
88 gate-run
89 gate-run
90 undeclared
91 gate-run
92 gate-run
93 gate-run
100 gate-run
101 gate-run
102 gate-run
103 undeclared
104 gate-run
105 undeclared
106 gate-run
107 gate-run
108 gate-run
109 undeclared
110 undeclared
111 gate-run
112 gate-run
113 gate-run
141 gate-run
142 gate-run
143 gate-run
144 gate-run
145 gate-run
146 gate-run
147 gate-run
148 gate-run
149 gate-run
150 gate-run
156 gate-run
157 gate-run
158 gate-run
159 gate-run
160 gate-run
161 gate-run
162 gate-run
166 gate-run
167 gate-run
168 gate-run
169 gate-run
170 gate-run
171 gate-run
172 gate-run
173 gate-run
174 gate-run