Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
226 commits
Select commit Hold shift + click to select a range
271cfc5
Add REQUIREMENTS.md for #73 SPM support
point-source Jun 16, 2026
86a5120
docs(spec): add SPM-native iOS ping spec sections for #73
point-source Jun 16, 2026
1950ddc
WS1: native Swift ICMP engine (SOCK_DGRAM, no entitlements)
point-source Jun 16, 2026
aad7fad
WS3: drive native engine over method/event channel; map results to Pi…
point-source Jun 16, 2026
1a0ffbc
WS2: federated SPM plugin packaging + native channel handler
point-source Jun 16, 2026
ab216c0
fix(spm): match Flutter 3.44 SPM plugin template (FlutterFramework de…
point-source Jun 16, 2026
7c493b3
WS4: regenerate example iOS runner for SPM (no Podfile/CocoaPods)
point-source Jun 16, 2026
94ce902
chore(example): clear analyzer lints; make smoke test match the app
point-source Jun 16, 2026
9d3707f
docs(spec): mark Batch 1 sections implemented; correct iOS baseline t…
point-source Jun 16, 2026
ec63e11
refactor: simplify event mapping after /simplify review
point-source Jun 16, 2026
4a0b271
feat(ios): set IP_TTL and detect ICMP Time Exceeded
point-source Jun 16, 2026
59100b0
feat(ios): full error set + summary.errors over the channel
point-source Jun 16, 2026
fd1e979
feat(ios): map full ErrorType set + combined response/error and summa…
point-source Jun 16, 2026
bafdc71
feat(example): expose ttl input and show full ping stream for parity …
point-source Jun 16, 2026
2838b03
docs(spec): mark Batch 2 (iOS TTL & error parity) implemented
point-source Jun 16, 2026
ed39ffe
refactor(example): cancel ping subscription on restart and dispose
point-source Jun 16, 2026
bca7fe0
Merge Batch 2: iOS TTL & error parity (§spec:ios-ttl, §spec:ios-error…
point-source Jun 16, 2026
194c34c
test(ios): round out Dart event-mapping coverage (§spec:ios-tests)
point-source Jun 16, 2026
e104f1d
test(ios): unit-test ICMP framing/parse logic; expose ICMPPacket (§sp…
point-source Jun 16, 2026
cab2152
docs(ios): document SPM-only 5.0.0 migration, CocoaPods continuity & …
point-source Jun 16, 2026
fbe2a44
docs(spec): mark Batch 3 implemented (§spec:ios-tests, §spec:cocoapod…
point-source Jun 16, 2026
a32c126
refactor(ios): /simplify pass — reuse makeTimeExceeded helper; keep p…
point-source Jun 16, 2026
f6f8210
fix(ios): address code-review findings (#73)
point-source Jun 16, 2026
ce53cc0
fix(ios): make the native Swift ICMP engine build and actually ping
point-source Jun 16, 2026
7fe9426
test(ios): cover Darwin IPv4-header stripping on the receive path (§s…
point-source Jun 16, 2026
9102312
build(ios): migrate example app to Flutter SPM scene-delegate template
point-source Jun 16, 2026
34f3494
fix(stop): close stream when process already exited
point-source Jun 16, 2026
810d204
fix(parser): report unreachable-network errors on linux and macos
point-source Jun 16, 2026
d77c70d
fix(windows): allow malformed bytes when decoding ping output
point-source Jun 16, 2026
0b50af2
docs(summary): clarify PingSummary.time wall-clock semantics
point-source Jun 16, 2026
ce9de32
Merge core fixes ported from main (#20, #30, #58, #66)
point-source Jun 16, 2026
309ab27
docs(spec): plan maintenance & modernization refresh
point-source Jun 16, 2026
b247151
docs(roadmap): decompose maintenance refresh into workstreams
point-source Jun 17, 2026
bb07403
build(deps): modernize toolchain to lints 6 and Dart 3.8
point-source Jun 17, 2026
5974f3a
fix(parser): guard seq group in the TTL-exceeded branch
point-source Jun 17, 2026
c92e8a6
test(parser): cover TTL-exceeded fields and parser edge cases
point-source Jun 17, 2026
e99d465
docs: correct stale iOS distribution claims and log refresh
point-source Jun 17, 2026
0f0c195
fix(parser): guard summary time group by name, not group count
point-source Jun 17, 2026
e75e323
docs(ios): remove stale flutter_icmp_ping attribution
point-source Jun 17, 2026
d101742
chore(release): cut dart_ping 9.1.0 and dart_ping_ios 5.1.0
point-source Jun 17, 2026
1697adb
Merge maintenance & modernization refresh
point-source Jun 17, 2026
8c8807f
Merge governance docs for maintenance refresh
point-source Jun 17, 2026
51083c7
docs(governance): close out refresh roadmap and spec status
point-source Jun 17, 2026
fa3de1f
ci+test: add cross-OS CI matrix and expand coverage (#74, #77)
point-source Jun 17, 2026
c6a0f69
ci: drop live-ping job; make coverage deterministic
point-source Jun 17, 2026
b0cb9fa
ci: drop coverage artifact upload (keep job-summary report)
point-source Jun 17, 2026
9d46712
Merge pull request #78 from point-source/feature/add-ci-improve-test-jqg
point-source Jun 17, 2026
4b7b3a2
docs(requirements): update requirements for issue #76
point-source Jun 17, 2026
c51a2eb
docs(spec): add stream lifecycle robustness section for #76
point-source Jun 17, 2026
d0c93ba
fix(base_ping): terminate stream on every path; harden line-splitting…
point-source Jun 17, 2026
4a5aa87
test(base_ping): cover stream termination on launch failure, unmapped…
point-source Jun 17, 2026
8112bc3
docs(spec): mark stream-lifecycle-robustness implemented; cut dart_pi…
point-source Jun 17, 2026
bff0efc
Merge batch #76: base_ping stream lifecycle robustness
point-source Jun 17, 2026
4534f65
fix(base_ping): address review findings — surface parser errors, robu…
point-source Jun 17, 2026
4a451f1
Merge pull request #79 from point-source/feature/base-ping-stream-can…
point-source Jun 17, 2026
3d414ad
Merge main into develop: recover CI matrix, cross-OS tests (#74,#77,#…
point-source Jun 17, 2026
3bae8e3
docs(requirements): capture interface selection requirements (#72)
point-source Jun 17, 2026
35764ea
docs(spec): plan interface selection sections (#72)
point-source Jun 17, 2026
25e9df7
feat(interface): add optional interface selection threaded to platfor…
point-source Jun 17, 2026
5977288
test(interface): assert per-platform interface flag mapping + backwar…
point-source Jun 17, 2026
4b07402
docs(spec): mark interface-selection implemented in dart_ping 9.2.0 (…
point-source Jun 17, 2026
8738ade
feat(interface): reject bare interface name on Windows with a catchab…
point-source Jun 18, 2026
7e317c3
feat(interface): reject interface selection on iOS at the factory bou…
point-source Jun 18, 2026
89cfcb4
test(interface): cover bad-interface error-then-close path (network-f…
point-source Jun 18, 2026
74c0b3f
docs(spec): mark interface-platform-rejection implemented in dart_pin…
point-source Jun 18, 2026
0459eae
test(interface): dedup rejection matchers in iOS and Windows tests (#72)
point-source Jun 18, 2026
9ae58cd
Merge batch: interface-platform-rejection (§spec:interface-platform-r…
point-source Jun 18, 2026
b62239f
feat(interface): add listNetworkInterfaces() host-interface helper (#72)
point-source Jun 18, 2026
bc6fec5
test(interface): cover listNetworkInterfaces shape and not-swallowed …
point-source Jun 18, 2026
8d440de
docs(interface): document listNetworkInterfaces() in README and CHANG…
point-source Jun 18, 2026
41c089e
docs(spec): mark interface-listing implemented in dart_ping 9.2.0 (#72)
point-source Jun 18, 2026
a0e15f5
Merge batch: interface-listing (§spec:interface-listing) into interfa…
point-source Jun 18, 2026
135dcb6
fix(interface): address code-review findings (#72)
point-source Jun 18, 2026
6a35fb7
Merge pull request #80 from point-source/feature/allow-specifying-a-n…
point-source Jun 18, 2026
8180d60
docs(req): add concurrent-ping isolation requirements (#70)
point-source Jun 18, 2026
65c1a69
test(concurrent): add offline isolation guard for concurrent pings (#70)
point-source Jun 18, 2026
bb56b14
docs(spec): add concurrent-ping isolation section (#70)
point-source Jun 18, 2026
d06175a
test(concurrent): add offline iOS bridge id-demux isolation guard (#70)
point-source Jun 18, 2026
cd61dfb
docs(concurrent): record confirmed isolation invariant; mark §spec:co…
point-source Jun 18, 2026
585471b
docs(concurrent): confirm iOS bridge id-demux invariant; mark §spec:c…
point-source Jun 18, 2026
f7e06f1
refactor(test): drop dead ip field and stderr config from isolation t…
point-source Jun 18, 2026
db9803b
refactor(test): extract responsesOf helper, drop stale group doc in i…
point-source Jun 18, 2026
5e6aa40
Merge batch feature/70-concurrent-isolat-8wo: concurrent-ping isolati…
point-source Jun 18, 2026
57ff865
Merge batch feature/70-concurrent-isolat-htd: iOS bridge concurrent-i…
point-source Jun 18, 2026
48c2026
test(concurrent): assert both-direction isolation in iOS drowned-run …
point-source Jun 18, 2026
463b8ed
Merge pull request #81 from point-source/feature/loop-for-checking-is…
point-source Jun 18, 2026
50cea2b
docs(requirements): add IPv6/address-family error clarity requirement…
point-source Jun 18, 2026
f808556
docs(spec): add IPv6/address-family error clarity sections (#69)
point-source Jun 18, 2026
e2979ea
docs(requirements): make address-family selector an explicit, breakin…
point-source Jun 18, 2026
bdcfb06
docs(spec): redesign address-family selector as IpVersion enum (#69)
point-source Jun 18, 2026
78a496b
feat(dart_ping): add IpVersion enum for explicit address-family selec…
point-source Jun 18, 2026
de12cdd
feat(dart_ping)!: replace bool ipv6 with IpVersion enum through the e…
point-source Jun 18, 2026
d6e4cb1
feat(dart_ping_ios)!: send selected IpVersion family over the channel…
point-source Jun 18, 2026
273accb
test(#69): assert IpVersion threading, family selection, and ipv4 def…
point-source Jun 18, 2026
07b37c1
docs(#69): major version bumps + IpVersion migration notes
point-source Jun 18, 2026
77a9a45
docs(spec): mark §spec:ipv6-address-family-selector implemented (#69-1)
point-source Jun 18, 2026
1fc3029
feat(dart_ping): add parse-only ipLiteralFamily helper (#69-2)
point-source Jun 18, 2026
06fa5f9
feat(dart_ping)!: reject address-family/literal mismatch in Ping fact…
point-source Jun 18, 2026
b765789
docs(spec): mark §spec:address-family-mismatch-validation implemented…
point-source Jun 18, 2026
89771d1
refactor(dart_ping): use ipVersion.toString() in mismatch message (#6…
point-source Jun 18, 2026
12d627b
merge(#69-2): address-family literal mismatch validation into plannin…
point-source Jun 18, 2026
828a5f9
feat(dart_ping): add additive ErrorType.noRoute typed error (#69-3)
point-source Jun 18, 2026
e6f0195
fix(dart_ping)!: reclassify routing/family failures as ErrorType.noRo…
point-source Jun 18, 2026
23d6e3b
feat(dart_ping_ios)!: native IPv6 send + honest address-family errors…
point-source Jun 18, 2026
07b6e7e
docs(spec): mark §spec:address-family-error-honesty implemented (#69-3)
point-source Jun 18, 2026
06bc221
refactor(dart_ping): collapse noRouteStrs/errorStrs scan into one loo…
point-source Jun 18, 2026
a440ac0
merge(#69-3): address-family error honesty into planning branch
point-source Jun 18, 2026
d199fd5
fix(#69): address code-review findings on the address-family work
point-source Jun 18, 2026
09e7984
fix(#69): narrow re-review regressions from the review-fix commit
point-source Jun 18, 2026
28825e1
test(#69): cover DartPingIOS direct-construction address-family guard
point-source Jun 18, 2026
e2e6d67
Merge remote-tracking branch 'origin/develop' into feature/issue-with…
point-source Jun 18, 2026
11102ce
Merge pull request #82 from point-source/feature/issue-with-mobile-da…
point-source Jun 19, 2026
dbb884e
docs(#63): capture summary-statistics requirements
point-source Jun 19, 2026
3426122
docs(#63): plan summary-statistics spec sections
point-source Jun 19, 2026
65321a1
feat(#63): add RoundTripStats value object + incremental accumulator …
point-source Jun 19, 2026
7c2ef13
feat(#63)!: sealed PingEvent union replaces nullable PingData (§spec:…
point-source Jun 19, 2026
300ecb3
feat(#63): compute round-trip stats from per-probe RTTs across subpro…
point-source Jun 19, 2026
9247c72
test(#63): migrate suite to sealed events; cover stats/loss/event con…
point-source Jun 19, 2026
8936c3e
refactor(#63): drop unreachable null-coalescing in PingSummary.toString
point-source Jun 19, 2026
40f80d7
Merge batch #63-1: sealed PingEvent union + RoundTripStats (§spec:sta…
point-source Jun 19, 2026
74b3979
feat(#63)!: encode round-trip Duration at microsecond resolution in s…
point-source Jun 19, 2026
1641be3
test(#63): assert sub-millisecond round-trip survives serialization (…
point-source Jun 19, 2026
9730f4b
docs(#63): mark stats-precision implemented; record precision round-t…
point-source Jun 19, 2026
2052421
feat(#63): carry running RoundTripStats snapshot on every probe event…
point-source Jun 19, 2026
45aabcd
refactor(#63): share microsecond Duration decode helper across event …
point-source Jun 19, 2026
3e1487b
test(#63): assert live running stats match the terminal summary (§spe…
point-source Jun 19, 2026
240ac0f
Merge batch #63-3: sub-millisecond precision preserved through models…
point-source Jun 19, 2026
a3ea2f1
refactor(#63): hoist stats getter onto sealed PingEvent; dedupe live-…
point-source Jun 19, 2026
a39e9e9
Merge batch #63-2: live running RoundTripStats snapshot on every prob…
point-source Jun 19, 2026
9585167
feat(#63): surface microsecond RTT over the iOS channel (§spec:stats-…
point-source Jun 19, 2026
aa22720
feat(#63): map iOS native results to sealed PingEvents and reuse core…
point-source Jun 19, 2026
5979ab3
test(#63): assert iOS stats parity with core over the native-result s…
point-source Jun 19, 2026
cb1d563
Merge batch #63-4: iOS statistics parity — shared-Dart RoundTripStats…
point-source Jun 19, 2026
4c58e2e
fix(#63): address code-review findings from the review gate
point-source Jun 19, 2026
d62bf03
Merge pull request #83 from point-source/feature/provide-more-statist…
point-source Jun 19, 2026
8588965
docs(#52): capture NAT64/IPv6-only IP-literal reachability requirements
point-source Jun 19, 2026
f3f49fd
docs(#52): spec NAT64/IPv6-only IP-literal reachability (§spec:nat64-…
point-source Jun 19, 2026
788bbae
feat(#52): add default-on nat64Synthesis option surface (§spec:nat64-…
point-source Jun 19, 2026
f289507
docs(#52): document default-on nat64Synthesis option (§spec:nat64-opt…
point-source Jun 19, 2026
50e0331
test(#52): cover nat64Synthesis presence/default/threading + subproce…
point-source Jun 19, 2026
aed3509
docs(#52): mark §spec:nat64-option implemented, §spec:nat64-tests par…
point-source Jun 19, 2026
510bc41
Merge batch #52-1: NAT64 default-on nat64Synthesis option (§spec:nat6…
point-source Jun 19, 2026
cfab848
feat(#52): iOS engine synthesizes NAT64 address for IPv4 literals on …
point-source Jun 19, 2026
257c56a
docs(#52): document NAT64 synthesis-failure honest-error seam on the …
point-source Jun 19, 2026
2da2416
test(#52): offline seams for NAT64 synthesis decision + honest-error …
point-source Jun 19, 2026
3b4f7db
refactor(#52): extract shared copyDestination helper from the two iOS…
point-source Jun 19, 2026
a213901
Merge batch #52-2: iOS NAT64 IPv4-literal reachability (§spec:nat64-l…
point-source Jun 19, 2026
ab5e3b2
fix(#52): address code-review findings from the review gate
point-source Jun 19, 2026
83b45b3
fix(#52): define RFC 3542 IPv6 hop-limit constants for the Swift impo…
point-source Jun 19, 2026
83bd14e
Merge pull request #84 from point-source/feature/https-github-com-poi…
point-source Jun 19, 2026
82726a6
docs: add CI-on-develop requirements (§req:ci-develop-*)
point-source Jun 19, 2026
662507d
docs(spec): add §spec:ci-develop — gate PRs to develop at parity with…
point-source Jun 19, 2026
60f3786
docs: drop list numbering from SPEC and REQUIREMENTS intros
point-source Jun 19, 2026
cd9ad6e
ci(#spec:ci-develop): gate PRs to develop at parity with main
point-source Jun 19, 2026
4f8734d
docs(#85): capture Windows interface-listing round-trip contract requ…
point-source Jun 19, 2026
fac2f92
docs(#85): spec the per-platform interface round-trip contract (§spec…
point-source Jun 19, 2026
73aea98
test(#85): branch interface round-trip expectation on platform bindin…
point-source Jun 19, 2026
68d4ee5
docs(#85): note Windows round-trips an interface by source address, n…
point-source Jun 19, 2026
1850d42
docs(#85): mark §spec:windows-roundtrip-contract implemented
point-source Jun 19, 2026
9f7c998
refactor(#85): collapse per-platform name round-trip to a single expe…
point-source Jun 19, 2026
237d682
Merge #85 windows-roundtrip-contract: per-platform interface round-tr…
point-source Jun 19, 2026
e544eda
Merge #86 (windows-roundtrip fix + governance) into ci-develop to bre…
point-source Jun 19, 2026
aed1af9
Merge pull request #85 from point-source/feature/run-ci-on-pr-to-deve…
point-source Jun 19, 2026
ec6fb74
docs(#28): add package consolidation requirements (FFI-backed iOS, si…
point-source Jun 19, 2026
5e5318d
docs(#28): spec package consolidation — single dart_ping with FFI-bac…
point-source Jun 19, 2026
86cf827
docs(#28): record swift2objc vs hand-rolled swiftc rationale in §spec…
point-source Jun 19, 2026
32a1fcb
docs: de-number intro lists and reconcile consolidation plan with dev…
point-source Jun 19, 2026
1035678
feat(#28): raise SDK floor to >=3.10 and add pure-Dart hooks/code_ass…
point-source Jun 19, 2026
04b3317
feat(#28): carry native iOS engine into dart_ping with @_cdecl flat-C…
point-source Jun 19, 2026
21deedd
feat(#28): target-gated build hook compiles iOS engine into one ffi c…
point-source Jun 19, 2026
cb9e925
docs(#28): mark §spec:ios-code-asset-build-hook and §spec:pure-dart-p…
point-source Jun 19, 2026
0129b13
refactor(#28): simplify build hook per /simplify pass
point-source Jun 19, 2026
2c6e889
harden(#28): non-trapping Int32 narrowing for summary counts (securit…
point-source Jun 19, 2026
de5f932
Merge batch #28-1: iOS code-asset build hook + pure-Dart gate
point-source Jun 19, 2026
965268f
feat(#28): dart:ffi bindings for the iOS code asset + heap-transfer e…
point-source Jun 19, 2026
63fa480
feat(#28): map native FFI events to sealed PingEvents via the core st…
point-source Jun 19, 2026
bed9176
feat(#28): per-instance FFI-backed iOS Ping (own handle + NativeCalla…
point-source Jun 19, 2026
79714e3
feat(#28): register FFI-backed iOS Ping + mark ios-ffi-binding/backgr…
point-source Jun 19, 2026
ac59670
refactor(#28): dedupe iOS Ping event-forward + native-stop (simplify …
point-source Jun 19, 2026
ec278d3
harden(#28): FFI memory-safety fixes (security review)
point-source Jun 19, 2026
b6d48c8
Merge batch #28-2: iOS over dart:ffi + background-isolate fix
point-source Jun 19, 2026
4ec43f9
docs(#28): mark dart_ping_ios discontinued; iOS consolidated into dar…
point-source Jun 20, 2026
6d7517e
docs(#28): single-package iOS guidance + dart_ping_ios migration notes
point-source Jun 20, 2026
91104f2
feat(#28): dispatch iOS internally; remove iosFactory/register() indi…
point-source Jun 20, 2026
1545ddb
fix(#28): keep retired dart_ping_ios compiling after iosFactory removal
point-source Jun 20, 2026
e7210a7
docs(#28): mark single-package-ios / ios-auto-wiring / dart-ping-ios-…
point-source Jun 20, 2026
b315f3d
Merge batch #28-3: single-package iOS — internal dispatch, dart_ping_…
point-source Jun 20, 2026
738cacb
harden(#28): teardown-safe iOS event handler, explicit iOS gate test,…
point-source Jun 20, 2026
7d02889
feat(#28): relocate Flutter/iOS example into dart_ping (single-package)
point-source Jun 20, 2026
e8312b8
feat(#28): retarget Swift RunnerTests onto dart_ping/native/ICMPPacke…
point-source Jun 20, 2026
00b9a9a
ci(#28): repoint iOS CI onto dart_ping; drop dart_ping_ios jobs
point-source Jun 20, 2026
5f2f14f
feat(#28): delete dart_ping_ios; reconcile docs to single-package iOS
point-source Jun 20, 2026
6e186be
ci(#28): skip Flutter example resolution in dart-only jobs
point-source Jun 20, 2026
4061dfa
docs(#28): reconcile SPEC §spec:ci / §spec:ios-tests to single-packag…
point-source Jun 20, 2026
e07e7da
fix(#28): add PingEngine.swift to RunnerTests target; drop dead test …
point-source Jun 20, 2026
59c2b21
Merge batch #28-4: physically retire dart_ping_ios; single-package iO…
point-source Jun 20, 2026
05f1d72
chore(governance): remove vestigial ROADMAP.md
point-source Jun 20, 2026
e4dbe03
Merge pull request #88 from point-source/feature/https-github-com-poi…
point-source Jun 20, 2026
fc88d7a
chore(repo): pull dart_ping source to repo root (single package)
point-source Jun 20, 2026
3798f95
docs(changelog): consolidate post-9.0.1 changes into a single 10.0.0
point-source Jun 20, 2026
5ac0c87
feat(#71): support IPv6 on Windows via -6
point-source Jun 20, 2026
dee75a8
docs(changelog): drop the 10.0.0 intro paragraph
point-source Jun 20, 2026
a9c0a39
Merge pull request #89 from point-source/feature/re-home-ios-swift-ic…
point-source Jun 20, 2026
d25c579
style: apply dart format (tall style) across lib/hook/test
point-source Jun 20, 2026
aadaa08
chore(release): pre-10.0.0 packaging & docs hygiene
point-source Jun 20, 2026
5fbd84e
Merge pull request #91 from point-source/feature/prepare-for-10-0-0-r…
point-source Jun 20, 2026
6dc616c
chore: enable DCM analysis and resolve all findings
point-source Jun 20, 2026
b1729c9
Merge pull request #93 from point-source/chore/dcm-analysis-cleanup
point-source Jun 20, 2026
301b2b7
docs(requirements): add macOS all-timeout summary (#92)
point-source Jun 20, 2026
552728d
docs(spec): add macOS all-timeout summary section (#92)
point-source Jun 20, 2026
702678a
fix(macos): map ping exit 2 to noReply so all-timeout runs yield a su…
point-source Jun 20, 2026
77aa5d4
docs(spec): mark §spec:mac-all-timeout-summary implemented (#92)
point-source Jun 20, 2026
c907277
refactor(macos): derive throwExit from interpretExitCode (single sour…
point-source Jun 20, 2026
ef43d42
Merge batch: §spec:mac-all-timeout-summary (#92)
point-source Jun 20, 2026
1dc085f
test(#92): pin transmitted/received in macOS exit-1 parity test
point-source Jun 20, 2026
c4f0699
Merge pull request #94 from point-source/feature/macos-all-timeout-ru…
point-source Jun 21, 2026
d2fc3ad
docs(requirements): add host injection safety (#90) sections
point-source Jun 21, 2026
0d44bf7
docs(spec): add host injection safety (#90) sections
point-source Jun 21, 2026
cb0dc7b
fix(security): treat host as data, never a command (#90)
point-source Jun 21, 2026
a62d8cd
refactor(security): simplify host guard per /simplify gate (#90)
point-source Jun 21, 2026
d6381e8
test(security): harden host-guard coverage per security gate (#90)
point-source Jun 21, 2026
022fdaf
fix(security): reject flag-shaped & bracketed hosts; harden host allo…
point-source Jun 21, 2026
77ae4b4
fix(security): validate zoned-IPv6 host strictly on all platforms (#90)
point-source Jun 21, 2026
63484c1
Merge pull request #95 from point-source/feature/security-command-inj…
point-source Jun 21, 2026
dbdbe62
chore(release): trim pub topics to ping/icmp/network
point-source Jun 22, 2026
18bb154
Merge pull request #96 from point-source/chore/trim-pub-topics
point-source Jun 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 119 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
name: CI

# Runs on pull requests targeting main and develop. Both branches are
# protected and cannot be pushed to directly, so every change lands through a
# PR that these checks gate. workflow_dispatch allows a manual run from the
# Actions tab.
on:
pull_request:
branches: [main, develop]
workflow_dispatch:

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
# ---- Required, deterministic gate -------------------------------------
# The core Dart suite on every host OS. Running the suite on Linux, Windows
# and macOS executes each platform class's OS-specific code natively (#77).
# Live-network tests are excluded (`-x live`) so the gate stays reproducible.
core:
name: core (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dart-lang/setup-dart@v1
# --no-example: this dart-only runner has no Flutter SDK, and the bundled
# example/ is a Flutter package. Skipping its resolution keeps the gate
# clean (the example is built by the macOS ios-swift job, not here).
- run: dart pub get --no-example
- run: dart analyze --fatal-infos
- run: dart test -x live

# The Swift ICMP framing/parse suite. Requires a macOS runner with Xcode and
# an iOS simulator (#74). Building the example first generates the Flutter
# artifacts the Runner target links against.
#
# The iOS Dart event-mapping + bindings suite is no longer a separate job: it
# now lives in test/ios_*.dart and runs under the `core` matrix via
# `dart test -x live` (consolidation #28 — single package).
ios-swift:
name: ios-swift (macos)
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
with:
channel: stable
- run: flutter --version
- name: flutter pub get (example)
working-directory: example
run: flutter pub get
- name: Build example for the simulator (generates Flutter artifacts)
working-directory: example
run: flutter build ios --simulator --no-codesign
- name: Run RunnerTests via xcodebuild
working-directory: example/ios
run: |
set -o pipefail
# Pick whatever iPhone simulator the runner image actually ships,
# rather than hard-coding a model that may not exist.
DEVICE=$(xcrun simctl list devices available \
| grep -oE 'iPhone [0-9]+( Pro( Max)?)?' | head -1)
DEVICE=${DEVICE:-iPhone 15}
echo "Using simulator: $DEVICE"
xcodebuild test \
-workspace Runner.xcworkspace \
-scheme Runner \
-destination "platform=iOS Simulator,name=$DEVICE" \
-only-testing:RunnerTests \
CODE_SIGNING_ALLOWED=NO

# ---- Informational, non-gating ----------------------------------------
# Coverage report for dart_ping, published as a build artifact and a job
# summary. There is no coverage-threshold gate (by decision); this surfaces
# the numbers without blocking merges. Live tests are excluded so the number
# is reproducible — note `base_ping`'s spawn/cleanup path is therefore not
# measured here (hosted Linux/Windows runners block ICMP anyway); it is
# exercised by the local/manual live suite.
coverage:
name: coverage (report only)
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
- uses: dart-lang/setup-dart@v1
- name: Core coverage
run: |
dart pub get --no-example
dart test -x live --coverage=coverage
dart run coverage:format_coverage \
--lcov --in=coverage --out=coverage/lcov.info --report-on=lib
- name: Summarize
run: |
summarize() {
awk '
/^LF:/ { sub("LF:",""); f += $0 }
/^LH:/ { sub("LH:",""); h += $0 }
END { if (f > 0) printf "%.1f%% (%d/%d lines)\n", 100*h/f, h, f }
' "$1"
}
{
echo "## Coverage"
echo ""
echo "- **dart_ping**: $(summarize coverage/lcov.info)"
} >> "$GITHUB_STEP_SUMMARY"

# NOTE: the live-network suite (`dart test -t live` — real `ping` to external
# hosts) is intentionally NOT run in CI. Hosted Linux/Windows runners block
# unprivileged ICMP, so those tests can never pass there, and live round
# trips are non-deterministic everywhere. They stay tagged `live`, run by
# default locally, and remain the manual acceptance path (§spec:ci).
20 changes: 18 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,20 @@
# Files and directories created by pub
.dart_tool/
.packages

dart_ping_ios/.flutter-plugins-dependencies
# Omit committing pubspec.lock for library packages:
# https://dart.dev/guides/libraries/private-files#pubspeclock
pubspec.lock

dart_ping_ios/.flutter-plugins
# Conventional directory for build outputs
build/

# Directory created by dartdoc
doc/api/

# Coverage output
coverage/

# Flutter example tooling artifacts
example/.flutter-plugins-dependencies
example/.flutter-plugins
5 changes: 5 additions & 0 deletions .pubignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Internal governance documents — kept in the repository for contributors but
# not shipped to pub.dev, where they would dominate the published archive and
# add no value for package consumers.
SPEC.md
REQUIREMENTS.md
6 changes: 3 additions & 3 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@
"configurations": [
{
"name": "dart_ping",
"cwd": "dart_ping",
"cwd": ".",
"request": "launch",
"type": "dart"
},
{
"name": "example",
"cwd": "dart_ping_ios/example",
"cwd": "example",
"request": "launch",
"type": "dart"
},
{
"name": "example (profile mode)",
"cwd": "dart_ping_ios/example",
"cwd": "example",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
Expand Down
Loading
Loading