skcomms 0.2.6__tar.gz → 0.2.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {skcomms-0.2.6 → skcomms-0.2.8}/.github/workflows/publish.yml +9 -0
- skcomms-0.2.8/.github/workflows/secret-scan.yml +61 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/.gitleaks.toml +12 -0
- {skcomms-0.2.6/src/skcomms.egg-info → skcomms-0.2.8}/PKG-INFO +1 -1
- {skcomms-0.2.6 → skcomms-0.2.8/src/skcomms.egg-info}/PKG-INFO +1 -1
- skcomms-0.2.6/.github/workflows/secret-scan.yml +0 -48
- {skcomms-0.2.6 → skcomms-0.2.8}/.github/workflows/ci.yml +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/.github/workflows/pytest.yml +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/.github/workflows/qa.yml +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/.gitignore +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/CHANGELOG.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/CODE_OF_CONDUCT.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/CONTRIBUTING.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/DEPLOY-NOTES.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/Dockerfile +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/LICENSE +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/MISSION.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/README.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/SECURITY.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/SOP.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/constraints.txt +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/contrib/systemd/skcomms-api.service +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/contrib/systemd/skcomms-housekeep.service +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/contrib/systemd/skcomms-housekeep.timer +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/ARCHITECTURE.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/DISCORD_SETUP.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/HANDOFF-skfed-s2s-opus-delivery.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/PAIRING.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/REVOCATION_LATENCY.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/SYNCTHING_TOPOLOGY.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/access-plane-p7.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/access-plane-p8.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/cot-bridge.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/crypto-architecture.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/deploy-plan/skcomms-bulletproof-deploy.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/federation-data-comms-architecture.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/funnel-privacy.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/mode-b-tailnet-deploy.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/node_registry.example.yml +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/rfcs/RFC-0001-pq-ratchet-metadata-dual-identity.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/skfed-consent-design.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/skfed-federation-guide.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/state-sync-rearch-plan.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/plans/2026-06-10-qr-pairing.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/plans/2026-06-13-ble-mesh-p1-core.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/plans/2026-06-13-lora-l1-core.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/plans/2026-06-13-skglossa-g1-core.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/plans/2026-06-13-skglossa-g2-macro-lexicon.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/plans/2026-06-13-skglossa-g4-emergent.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/plans/2026-06-13-tier3-adapter-runtime.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/specs/2026-06-13-ble-mesh-proximity-transport-design.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/specs/2026-06-13-lora-meshtastic-transport-design.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/specs/2026-06-13-skglossa-design.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/docs/tak-vs-skfed-analysis.md +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/pyproject.toml +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/backfill_file_locations.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/bootstrap.sh +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/discord_smoke.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/drain_orphan_outbox.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/mode-b-setup.sh +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/refresh-constraints.sh +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/skfed-dns.sh +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/skfed-neutral-addresses.sh +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/skfed-sync-rearch.sh +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/telegram_smoke.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/templates/consent-mode.conf.tmpl +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/templates/realms.yml.tmpl +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/templates/tailscale-serve.sh.tmpl +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/scripts/test_skfed_sync_rearch.sh +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/setup.cfg +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/__init__.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/__init__.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/audit.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/config.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/exec.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/files.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/grants.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/knowledge.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/registry.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/routing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/server.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/access/wiring.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/ack.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/__init__.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/base.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/discord.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/factory.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/fake.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/matrix.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/models.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/registry.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/slack.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/adapters/telegram.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/anon_queue.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/anon_transport.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/api.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/capabilities.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/capauth_validator.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/cli.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/cluster.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/compression.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/config.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_banfeeds.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_captcha.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_greylist.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_group_gate.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_groups.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_moderation.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_pipeline.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_policy.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_requests.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_runtime.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_tiering.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/consent_tokens.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/core.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/crypto.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/crypto_suites.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/did_router.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/discovery.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/envelope.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/federation.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/geo_seed.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/geo_store.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/glossa/__init__.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/glossa/codebook.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/glossa/codec.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/glossa/emergent.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/glossa/gloss.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/glossa/handshake.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/glossa/macros.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/glossa/message.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/glossa/session.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/grants.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/heartbeat.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/home.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/household_router.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/housekeeping.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/identity.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/integration.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/key_exchange.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/mailbox.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/marketplace.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/mcp_server.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/metrics.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/models.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/node_registry.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/nostr_discovery.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/observability.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/operator_probe.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/outbox.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/outbox_migrate.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/padding.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pairing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pairing_mirror.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/paths.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/peers.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pq_provider.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pqdm.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pqkem.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pqkem_backend.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pqroute.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pqroute_transport.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pqsig.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/profile_router.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/public_pairing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pubsub.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/pubsub_transport.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/queue.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/ratelimit.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/realm.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/registry.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/router.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/signaling.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/signing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/skfed_announce.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/skfed_directory.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/skfed_readdr.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/skfed_resolve.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/skworld_manifest.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/souls_router.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/ssrf.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/store_forward.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/syncthing_rail.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/tofu.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transport.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/__init__.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/audio_track.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/ble/__init__.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/ble/gatt.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/ble/identity.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/ble/node.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/ble/noise.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/ble/protocol.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/ble/radio.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/ble/relay.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/broker_server.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/file.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/http_s2s.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/lora/__init__.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/lora/addressing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/lora/framing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/lora/interface.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/lora/meshtastic_iface.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/lora/store.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/lora/transport.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/nostr.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/p2p_connector.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/p2p_manager.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/p2p_session.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/signaling_base.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/signaling_broker.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/signaling_mailbox.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/syncthing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/tailscale.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/video_track.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/webrtc.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/webrtc_media.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/transports/websocket.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms/trustbackup.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms.egg-info/SOURCES.txt +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms.egg-info/dependency_links.txt +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms.egg-info/entry_points.txt +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms.egg-info/requires.txt +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/src/skcomms.egg-info/top_level.txt +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/__init__.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/conftest.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/fixtures/pqdm2_from_dart.json +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/gen_pqdm2_fixture.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_access_exec.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_access_files.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_access_nonce_durable.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_access_rbac.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_access_routing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_access_server.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_access_wiring.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ack_bind.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_adapter_factory.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_adapter_fake.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_anon_queue.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_anon_transport.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_access_token.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_consent.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_consent_token_gate.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_cors.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_federation_inbox.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_geo_seed.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_geo_skcot_bridge.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_geo_units.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_health.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_send_signed_wire.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_api_skfed_directory.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_backfill_file_locations.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ble_fragment.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ble_gatt.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ble_identity.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ble_mesh.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ble_noise.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ble_pairing_bundle.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ble_protocol.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ble_radio.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ble_relay.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_broker_server.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_capabilities.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_capauth_failclosed.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_capauth_key_reconcile.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_capauth_resolution.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_capauth_revoked_expired.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_channel_adapter.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_cluster_schema.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_config.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_ban_gate_fail_closed.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_banfeeds.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_captcha.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_cli.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_cli_mgmt.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_greylist.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_group_gate.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_groups.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_moderation.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_pipeline.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_policy.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_requests.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_runtime.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_tiering.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_consent_tokens.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_core_inbound_beacon_skip.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_core_send_federated.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_core_send_signed.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_core_stop.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_crypto_failclosed.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_crypto_suites_q0.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_daemon_adapter_lifecycle.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_deadletter_ops.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_delivery_semantics.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_discord_adapter.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_encrypt_fail_closed.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_envelope_consent_token.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_envelope_v1.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_federation.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_federation_integration.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_geo_roundtrip_skcot.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_codebook.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_codec_l0.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_codec_l1.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_codec_l2.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_emergent.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_emergent_negotiator.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_emergent_protocol.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_gloss.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_handshake.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_handshake_lexicon.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_macros.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_macros_render.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_message.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_session.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_session_macros.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_glossa_to_human.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_grants.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_home_scaffold.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_housekeeping.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_http_s2s_star_recipient.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_http_s2s_transport.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_hybrid_envelope_sig.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_identity_env_override.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_identity_key_binding.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_identity_realm.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_identity_trust_backup.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_integration.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_key_exchange_transport_scoping.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_knowledge.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_lora_addressing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_lora_framing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_lora_interface.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_lora_meshtastic_iface.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_lora_store.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_lora_transport.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_mailbox.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_mailbox_encrypt_at_rest.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_mailbox_recipient_key.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_matrix_adapter.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_mode_b_setup.sh +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_no_subapp_dependency.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_node_registry.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_nonce_durable.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_nostr_discovery.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_observability.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_operator_cli.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_outbox_home_alignment.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_outbox_migrate.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_p2p_connector.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_p2p_manager.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_p2p_media.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_p2p_session.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_padding.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pairing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pairing_cli.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pairing_mirror.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_paths_scoping.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_peer_inbox_traversal.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_peers.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqc_cutover.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqc_shim.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqdm.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqdm2.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqdm2_interop.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqkem.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqroute.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqroute_padding.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqroute_transport.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_pqsig.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_prune_inbox.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_public_pairing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_queue_bounds.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_receiver_wire_ttl_expiry.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_registry.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_registry_cli.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_router_failure_log_dedup.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_router_perm_backoff.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_router_perm_backoff_fixes.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_router_quarantine.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_router_rail_ordering.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_router_route_anon.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_router_route_signed.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_router_star_broadcast_routing.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_router_unsigned_excludes_https_s2s.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_sign_fail_closed.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_signaling_broker.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_signaling_mailbox.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_signaling_select.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_skfed_announce.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_skfed_cli.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_skfed_directory.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_skfed_dns.sh +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_skfed_operator_pin.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_skfed_readdr.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_skfed_resolve.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_skfed_ssrf.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_skworld_manifest.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_slack_adapter.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_smoke.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_ssrf_guard.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_store_forward.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_syncthing_rail.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_syncthing_recipient_guard.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_telegram_adapter.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_tofu.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_typed_message_content.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_webrtc_bridge_lifecycle.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_webrtc_ice_logging.py +0 -0
- {skcomms-0.2.6 → skcomms-0.2.8}/tests/test_webrtc_signaling_log_dedup.py +0 -0
|
@@ -150,6 +150,15 @@ jobs:
|
|
|
150
150
|
|
|
151
151
|
pypi-publish:
|
|
152
152
|
needs: build
|
|
153
|
+
# Same always() guard the build job needs, one level further down.
|
|
154
|
+
# GitHub propagates a skip THROUGH a job: `tag` is skipped on the tag-push
|
|
155
|
+
# path, `build` survives it with always(), but a bare `needs: build` here
|
|
156
|
+
# still evaluates to skipped, because an ANCESTOR was skipped. The publish
|
|
157
|
+
# step could then never run on a tag push: the build is green, the run
|
|
158
|
+
# reports success, and NOTHING is uploaded. skharness lost v0.3.13 to this
|
|
159
|
+
# exact bug. Ported from skcoord PR #6.
|
|
160
|
+
if: >-
|
|
161
|
+
always() && !cancelled() && needs.build.result == 'success'
|
|
153
162
|
runs-on: ubuntu-latest
|
|
154
163
|
environment: pypi
|
|
155
164
|
permissions:
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: secret-scan
|
|
2
|
+
|
|
3
|
+
# Secret-scan gate: keeps the repo's clean secrets hygiene true over time.
|
|
4
|
+
#
|
|
5
|
+
# Runs gitleaks (the fleet default, via its official GitHub Action) on every
|
|
6
|
+
# push and every pull request. The build FAILS if gitleaks finds anything not
|
|
7
|
+
# covered by the baseline allowlist in .gitleaks.toml at the repo root.
|
|
8
|
+
#
|
|
9
|
+
# The allowlist documents known non-secret placeholder tokens; see that file
|
|
10
|
+
# for how to add an entry when a real placeholder trips the scanner. If the
|
|
11
|
+
# scanner flags a REAL secret, rotate it and purge it from history, do NOT
|
|
12
|
+
# add it to the allowlist.
|
|
13
|
+
|
|
14
|
+
on:
|
|
15
|
+
push:
|
|
16
|
+
branches: ["main"]
|
|
17
|
+
pull_request:
|
|
18
|
+
branches: ["main"]
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
gitleaks:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
with:
|
|
29
|
+
# Full history so a push scans every new commit, not just the tip.
|
|
30
|
+
fetch-depth: 0
|
|
31
|
+
# Run the gitleaks BINARY, not gitleaks-action.
|
|
32
|
+
#
|
|
33
|
+
# The action requires a paid license for ORGANIZATION-owned repos, and
|
|
34
|
+
# this repo is owned by the smilinTux org, so every run died with
|
|
35
|
+
# "missing gitleaks license" BEFORE scanning anything. That is worse than
|
|
36
|
+
# having no gate: the check sat red on main for months, so it read as
|
|
37
|
+
# known-broken and got ignored, while the repo had no secret scanning at
|
|
38
|
+
# all. It also hid a real (benign) finding, see .gitleaks.toml.
|
|
39
|
+
#
|
|
40
|
+
# gitleaks itself is MIT-licensed and free. Only the ACTION wrapper is
|
|
41
|
+
# licensed, so invoking the binary directly restores real scanning at no
|
|
42
|
+
# cost and with no org secret to provision. Pinned to an exact version so
|
|
43
|
+
# a new upstream rule cannot turn CI red without a deliberate bump.
|
|
44
|
+
- name: Install gitleaks
|
|
45
|
+
env:
|
|
46
|
+
GITLEAKS_VERSION: 8.28.0
|
|
47
|
+
run: |
|
|
48
|
+
set -euo pipefail
|
|
49
|
+
curl -sSfL "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" \
|
|
50
|
+
| tar -xz -C /usr/local/bin gitleaks
|
|
51
|
+
gitleaks version
|
|
52
|
+
- name: Run gitleaks
|
|
53
|
+
# --redact so a genuine finding never echoes the secret into public CI
|
|
54
|
+
# logs. --exit-code 1 makes a finding fail the build.
|
|
55
|
+
run: |
|
|
56
|
+
gitleaks detect \
|
|
57
|
+
--source . \
|
|
58
|
+
--config .gitleaks.toml \
|
|
59
|
+
--redact \
|
|
60
|
+
--no-banner \
|
|
61
|
+
--exit-code 1
|
|
@@ -33,3 +33,15 @@ docs/superpowers/specs/2026-06-13-ble-mesh-proximity-transport-design.md:178.
|
|
|
33
33
|
"""
|
|
34
34
|
paths = ['''docs/superpowers/specs/2026-06-13-ble-mesh-proximity-transport-design\.md''']
|
|
35
35
|
regexes = ['''Ed25519-signed''']
|
|
36
|
+
|
|
37
|
+
# Fake PGP key blocks in the identity-trust backup test. The private-key rule
|
|
38
|
+
# matches the "-----BEGIN PGP PRIVATE KEY BLOCK-----" armor header, but the body
|
|
39
|
+
# is the literal string "fake-private" (and "fake-public"): a fixture that
|
|
40
|
+
# exercises the backup/restore path without any real key material. Confirmed
|
|
41
|
+
# non-secret on 2026-08-14 by reading tests/test_identity_trust_backup.py:42-43.
|
|
42
|
+
#
|
|
43
|
+
# This is the finding that had been sitting undetected: the CI gate has never
|
|
44
|
+
# actually scanned anything (see secret-scan.yml), so nothing ever reported it.
|
|
45
|
+
[[allowlists]]
|
|
46
|
+
description = "Fake PGP armor fixtures in tests/test_identity_trust_backup.py"
|
|
47
|
+
paths = ['''tests/test_identity_trust_backup\.py''']
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
name: secret-scan
|
|
2
|
-
|
|
3
|
-
# Secret-scan gate: keeps the repo's clean secrets hygiene true over time.
|
|
4
|
-
#
|
|
5
|
-
# Runs gitleaks (the fleet default, via its official GitHub Action) on every
|
|
6
|
-
# push and every pull request. The build FAILS if gitleaks finds anything not
|
|
7
|
-
# covered by the baseline allowlist in .gitleaks.toml at the repo root.
|
|
8
|
-
#
|
|
9
|
-
# The allowlist documents known non-secret placeholder tokens; see that file
|
|
10
|
-
# for how to add an entry when a real placeholder trips the scanner. If the
|
|
11
|
-
# scanner flags a REAL secret, rotate it and purge it from history, do NOT
|
|
12
|
-
# add it to the allowlist.
|
|
13
|
-
|
|
14
|
-
on:
|
|
15
|
-
push:
|
|
16
|
-
branches: ["main"]
|
|
17
|
-
pull_request:
|
|
18
|
-
branches: ["main"]
|
|
19
|
-
|
|
20
|
-
permissions:
|
|
21
|
-
contents: read
|
|
22
|
-
|
|
23
|
-
jobs:
|
|
24
|
-
gitleaks:
|
|
25
|
-
runs-on: ubuntu-latest
|
|
26
|
-
steps:
|
|
27
|
-
- uses: actions/checkout@v4
|
|
28
|
-
with:
|
|
29
|
-
# Full history so a push scans every new commit, not just the tip.
|
|
30
|
-
fetch-depth: 0
|
|
31
|
-
- name: Run gitleaks
|
|
32
|
-
uses: gitleaks/gitleaks-action@v2
|
|
33
|
-
env:
|
|
34
|
-
# Use the baseline/allowlist committed at the repo root.
|
|
35
|
-
GITLEAKS_CONFIG: ${{ github.workspace }}/.gitleaks.toml
|
|
36
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
37
|
-
# gitleaks-action requires a license for ORGANIZATION-owned repos.
|
|
38
|
-
# The note here used to say this repo ran on an individual account;
|
|
39
|
-
# it does not, it is owned by the smilinTux org, which is why every
|
|
40
|
-
# run fails with "missing gitleaks license" before scanning anything.
|
|
41
|
-
# Licensing keys on org-vs-personal, not public-vs-private, so being
|
|
42
|
-
# a public repo does not exempt it.
|
|
43
|
-
#
|
|
44
|
-
# Free key for open source at https://gitleaks.io; add it as an
|
|
45
|
-
# organization secret named GITLEAKS_LICENSE so every smilinTux repo
|
|
46
|
-
# can use the same one. Until it exists this reference is harmless:
|
|
47
|
-
# an unset secret expands to empty, exactly as today.
|
|
48
|
-
GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{skcomms-0.2.6 → skcomms-0.2.8}/docs/superpowers/plans/2026-06-13-skglossa-g2-macro-lexicon.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|