Skip to content

feat(factory): enforce local contribution hooks - #205

Merged
yshyn-iohk merged 1 commit into
integrationfrom
feat/issue-200
Aug 30, 2026
Merged

yshyn-iohk merged 1 commit into
integrationfrom
feat/issue-200

Conversation

@yshyn-iohk

@yshyn-iohk yshyn-iohk commented Aug 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Add repository-scoped local Git hooks that reject invalid contribution evidence before publication. Normal commits require OpenPGP signing configuration, commit messages must satisfy the Conventional Commit and exact DCO contract, and outgoing issue-branch ranges are cryptographically verified before Git transfers objects.

Scope and context

This issue-backed contribution-hooks PR is rebuilt as one signed commit on the current integration branch after its dependency PRs merged. The exact current head is 13909ea39b623b0f2bc08c3d63cc03949fdcc3ef. The hooks are installed as a complete version-checked bundle in Git-common private state; all linked worktrees share the stable bundle without loading scripts from another active worktree.

Acceptance criteria

  • AC-1: Provide tracked dependency-light pre-commit, commit-msg, and pre-push dispatchers.
  • AC-2: Add one explicit bootstrap command for Git-common installation and repository-local signing defaults.
  • AC-3: Fail pre-commit when signing is disabled, the format is not OpenPGP, or identity/key selection is absent.
  • AC-4: Reject invalid Conventional Commit subjects and missing/mismatched exact DCO trailers before commit creation.
  • AC-5: Validate the complete outgoing issue-branch range and run local OpenPGP cryptographic verification before transfer.
  • AC-6: Bound push parsing, support new/updated branches and HEAD, ignore deletions, and fail closed without an integration base.
  • AC-7: Work from primary and linked worktrees without depending on a disposable worktree path.
  • AC-8: Never edit global Git configuration, identity, keys, credentials, or GitHub state.
  • AC-9: Test accepted/rejected messages, signing policy, installation, stable bundles, range planning, and unsigned commits.
  • AC-10: Document setup, legal sign-off intent, bypass limitations, and continuing hosted authority.

Definition of done

  • DoD-1: ./bootstrap.sh --configure-git installs a private stable bundle and refuses another hook manager.
  • DoD-2: git commit -s is signed by the repository-local default and fails on invalid message/DCO evidence.
  • DoD-3: A simulated pre-push of the exact final stack passes local cryptographic verification without contacting origin.
  • DoD-4: An unsigned fixture and malformed message are rejected in repository tests.
  • DoD-5: ./bootstrap.sh --check validates both Pi and local hooks.
  • DoD-6: Hosted checks pass on this exact PR head.

Non-goals

  • NG-1: Treat hooks as a security boundary or remove trusted GitHub checks.
  • NG-2: Add the legal DCO attestation automatically.
  • NG-3: Import, generate, or distribute OpenPGP keys.
  • NG-4: Modify global Git configuration.
  • NG-5: Validate GitHub PR metadata or account/key association locally.
  • NG-6: Push tags, protected branches, or cross-named refs through the development hook path.

AC/DoD/non-goals matrix

Acceptance criterion Definition of done Explicit non-goal
AC-1 DoD-1 NG-1
AC-2 DoD-1, DoD-5 NG-3, NG-4
AC-3 DoD-2, DoD-4 NG-3
AC-4 DoD-2, DoD-4 NG-2
AC-5 DoD-3, DoD-4 NG-1, NG-5
AC-6 DoD-3, DoD-4 NG-6
AC-7 DoD-1, DoD-5 NG-4
AC-8 DoD-1 NG-3, NG-4
AC-9 DoD-4, DoD-5 NG-1
AC-10 DoD-5 NG-1, NG-2

Validation commands

  • node --test tests/repository/local-git-hooks-contract.test.mjs — passed.
  • node --test tests/repository/contribution-policy-contract.test.mjs — passed.
  • ./run.sh repository --strict — passed.
  • ./bootstrap.sh --check — Pi and hook installation passed.
  • node scripts/dev-loops.mjs gates — passed.
  • Local pre-push validation against origin/integration..HEAD — passed for the one signed commit during publication.
  • ./scripts/check-dco.sh origin/integration HEAD — passed for the one-commit exact range.

Security and privacy

The installer writes only repository-local Git config and private Git-common hook state. It refuses a foreign core.hooksPath; it never reads or generates signing keys. The installed policy bundle is content-checked to avoid cross-worktree drift. Hooks remain bypassable local feedback, while GitHub's trusted exact-head OpenPGP gate remains authoritative.

Submission checklist

  • The change is one bounded factory slice.
  • Tests cover behavior and boundary failures.
  • The strict repository contract passed.
  • Contributor and factory documentation is updated.
  • No secrets, private identifiers, local paths, key material, or generated state are committed.
  • Branch, PR title, and commit follow the contribution policy.
  • The commit is OpenPGP signed and has the exact DCO trailer.
  • The diff was self-reviewed; a bounded Claude CLI attempt timed out without output, and hosted gates pass on the exact head.
  • The final-head private metrics record and bounded closeout comment are complete.

Closes #200

@yshyn-iohk
yshyn-iohk changed the base branch from fix/issue-194 to integration August 29, 2026 12:59
@yshyn-iohk yshyn-iohk changed the title feat(factory): enforce local contribution hooks feat(harness): enforce local contribution hooks Aug 29, 2026
Comment thread scripts/ci/contribution-policy.mjs Dismissed
Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
@github-actions github-actions Bot added type:feat Conventional Commit type: feat scope:harness Primary contribution scope: harness labels Aug 30, 2026
@yshyn-iohk yshyn-iohk changed the title feat(harness): enforce local contribution hooks feat(factory): enforce local contribution hooks Aug 30, 2026
@github-actions github-actions Bot added scope:factory Primary contribution scope: factory and removed scope:harness Primary contribution scope: harness labels Aug 30, 2026
@yshyn-iohk

Copy link
Copy Markdown
Contributor Author

Factory closeout for exact head 13909ea

  • Backing issue: feat(factory): enforce contribution policy with local Git hooks #200.
  • Review: self-review found no merge-blocking correctness, security, credential, command-injection, or data-loss defect. A bounded Claude CLI review attempt produced no output within five minutes and was canceled; it is recorded as unavailable evidence, not a clean verdict.
  • Local evidence: focused hook/policy tests passed 21/21; strict repository contract, Pi/bootstrap/package smoke, dev-loop policy, exact-range DCO/OpenPGP, and the actual pre-push hook all passed.
  • Hosted evidence: every selected exact-head lane passed. Basic 101s; unit 412s; headless 309s; quality 389s; coverage 462s; Compact 201s; locked Nix 770s; optimized UI 743s; UI profiles 1078s. Exact-head CI wall time was 1090s.
  • Metrics: the closed private v1 record was written and audited successfully. Peak worktree usage was 1,030,451,200 bytes. Exact non-overlapping token counters were unavailable and remain null, never zero.
  • Follow-up: concurrent multi-session hook-bundle installation hardening is tracked separately in fix(factory): make hook bundle installation transactional #218; the obsolete integration merge-gate contradiction is tracked in fix(harness): align integration merge audit with delivery policy #217. Neither expands this PR.

Ready for review and exact-head integration delivery.

@yshyn-iohk
yshyn-iohk marked this pull request as ready for review August 30, 2026 06:50
@yshyn-iohk
yshyn-iohk requested a review from patextreme as a code owner August 30, 2026 06:50
@yshyn-iohk
yshyn-iohk merged commit ccaca4e into integration Aug 30, 2026
31 checks passed
@yshyn-iohk
yshyn-iohk deleted the feat/issue-200 branch August 30, 2026 06:51
yshyn-iohk added a commit that referenced this pull request Sep 3, 2026
…ortal

* test(openid4vci): gate LaceID Portal contracts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(openid4vci): record LaceID Portal interop gate

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(openid4vci): pin fixture source paths

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(openid4vci): add strict Portal adapter

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(openid4vci): split Portal internal tests

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(openid4vci): compose Portal headless issuance

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(test): bind Portal evidence to Oxid head

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(openid4vci): zeroize streamed Portal responses

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(openid4vci): wipe partial Portal responses

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): keep integration ADR links resolvable

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci: enforce integration delivery authority (#152)

* ci: enforce integration delivery authority

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): harden integration base enforcement

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): close review contract gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): make required contexts fail closed

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): document cross-base enforcement boundary

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): close delivery review gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): harden delivery follow-up policy

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): close current-head delivery findings

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): preserve delivery security controls

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(ci): align delivery contract wording

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): stabilize repository dev loop (#153)

* fix(harness): stabilize repository dev loop

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): harden review preflight

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): bind review and closing facts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): isolate untrusted review input

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): validate effective runtime contracts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): close current-head stability findings

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): harden stability review contracts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix: close dev-loop review contract gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix: harden dev-loop preflight contracts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(dev-loop): harden review and REST contracts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(deps): Bump github/codeql-action/upload-sarif from 4.37.6 to 4.37.7 in the github-actions group across 1 directory (#138)

ci(deps): Bump github/codeql-action/upload-sarif

Bumps the github-actions group with 1 update in the / directory: [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `github/codeql-action/upload-sarif` from 4.37.6 to 4.37.7
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@5595cca...ff2f1c6)

---
updated-dependencies:
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.37.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs: establish the Rust monorepo quality constitution (#159)

* docs: establish quality constitution

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs: correct quality evidence claims

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(architecture): govern capability façade decomposition (#160)

* docs(adr): govern capability facade decomposition

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(adr): close facade policy review gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(site): regenerate ADR catalog

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): keep ADR-0104 catalog link resolvable

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): pin catalog link to published head

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(adr): close exact-head review findings

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(adr): clarify ratchet and catalog lifecycle

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): validate candidate integration links locally

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): harden candidate link validation

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(ci): document candidate link substitution

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): anchor candidate URL remapping

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(docs): prove exact remap scope

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): run wrappers through resolved paths

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): align candidate parsing with Lychee

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): scope local remapping to pull requests

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(docs): bind candidate and integration modes

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(docs): preserve Lychee defaults

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(harness): stage impact-aware assurance gates (#165)

* fix(harness): close dev-loop stability regressions

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): enforce truthful dev-loop preflight

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): normalize handoff envelope cwd

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): reject malformed handoff topology

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): resolve nested pinned core

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(harness): make envelope fixtures hermetic

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(harness): right-size development gates

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(harness): stage change-aware assurance gates

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(harness): enforce fast hosted shell budgets

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(harness): declare minimal shell search dependency

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(rust): make workspace compilation cacheable

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(cache): eliminate hosted write storms

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(cache): seed only from trusted integration

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(ui): budget the cold cache fallback

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(adapter): complete Portal Android issuance (#154)

* feat(identity): complete Portal Android issuance

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(mobile): stage Portal capability privately

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(mobile): report sanitized Portal failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(mobile): diagnose Portal handoff state

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(mobile): accept stripped Portal offer route

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): address hosted validation failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): use compatible Opengrep annotations

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): configure private WebSocket transport

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): close physical review gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): fail loudly on Android build errors

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): sanitize Android build diagnostics

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): redact failed build tail

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(app): coerce typed startup failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): model transport unavailability exactly

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): assert closed unavailable UI state

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): prove payload-free terminal failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): observe scrubbed terminal failure

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): pin observed unavailable attempts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): synchronize injected transport faults

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): assert locked issue-error state safely

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): pin issue-error request count

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): observe explicit review escape

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): resolve exact-head review findings

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): close follow-up review gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): bind simulator and provenance claims

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): make mobile acceptance reproducible

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): attest physical handoff cleanup

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): prove trigger reservation reuse

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(android): add owned exact-sequence AVD harness

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(android): gate AVD cleanup on ownership

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(android): harden exact-sequence supervision

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(android): preserve exact-sequence ownership proofs

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(android): make AVD ownership proof portable

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* chore(harness): guard integration auto-merge (#169)

chore(factory): guard integration auto-merge

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): reuse common Pi packages in smoke (#172)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): require registered Pi worktree topology (#174)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(deps): update chacha20 to 0.10.2 (#178)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): share Pi package store (#179)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(harness): add supervisor metrics audit (#180)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): disable consumer worktree provisioning (#182)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): close preflight environment boundary (#184)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): bind main envelopes to targets (#186)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): allow unavailable review telemetry (#188)

fix(factory): allow unavailable review telemetry

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): recognize squash-merged worktrees (#190)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(composition): prove Lace Portal issuance with local sync (#201)

* feat(headless): prove local issuance and indexer sync

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(headless): exercise Lace portal integration

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(headless): keep portal evidence runnable after merge

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(headless): preserve indexed sync height provenance

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(headless): validate renamed portal evidence field

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(headless): keep tip observation fail soft

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(headless): prove websocket sync behind compile gate

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(headless): prove portal store path wiring

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(ci): enforce contribution provenance (#203)

feat(factory): enforce contribution provenance

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): grant classifier pull-request permission (#212)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(factory): keep contribution feedback non-blocking (#216)

* ci(factory): keep contribution feedback non-blocking

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): honor the CI-free draft gate

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(harness): document draft gate precedence

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): align Pi runtime policy (#204)

* fix(harness): align Pi runtime policy

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): unblock factory startup

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): resolve review findings

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): harden recovery contracts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): simplify admission recovery

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(harness): allow absent CI package store

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(factory): enforce local contribution hooks (#205)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(portal): add desktop-first macOS issuance lane (#211)

* feat(ui): add ARM64 Darwin desktop Portal test

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ui): harden desktop Portal harness cleanup

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ui): retain desktop test driver task

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): initialize desktop wait deadline safely

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ui): start rendered desktop driver after mount

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): classify desktop driver startup failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(composition): admit exact desktop Portal bundle

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ui): await rendered desktop driver stages

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ui): retain desktop driver across profile routes

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): capture desktop without accessibility

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): select the native Xcode SDK

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(test): complete desktop Portal evidence

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): add canonical macOS laptop lane

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): fail closed on ownership query

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): invalidate stale ownership state

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): keep cleanup authority process-local

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): prove native screenshot redaction

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(portal): prove Android and iOS simulator issuance (#220)

* test(portal): add virtual mobile simulator lane

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): preserve failed mobile diagnostics

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): detach archived mobile builds

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): create the iOS test project directory

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): handle iOS custom-scheme confirmation

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): use stable iOS custody selector

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): pass iOS issue failure phase

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): bind counters to platform transport

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): stabilize simulator process ownership

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(harness): add bounded delivery profiles (#229)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): bound Claude review effort (#233)

* fix(harness): bound Claude review effort

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): bind review effort evidence

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): prevent effort evidence downgrade

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): harden bounded review evidence

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): close review capability gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): attest explicit effort capabilities

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): tolerate installed effort subsets

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): require unambiguous effort capability

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): enforce review effort SLA

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): harden effort capability evidence

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): stabilize effort help parsing

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): finalize bounded review contract

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): consolidate review resource policy

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): close review parser edge cases

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): align help capability probes

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): bind high-risk review floor

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): expose attestation effort policy

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): harden attestation entry binding

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): close review capability gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): bind review resource migrations

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): stabilize review migration contract

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): bind minimum review budget

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): close attestation symmetry gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): bind attestation floors exactly

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): reject coerced review budgets

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): preserve sub-dollar review canaries

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): admit bounded sub-dollar budgets

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): align integration review gates

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(headless): extract capability handlers (#231)

* test(headless): characterize public protocol contract

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
(cherry picked from commit 4a3fe312a6ad2ba3d5f2e2e07be099076538a7e1)

* refactor(headless): extract wallet profile capability

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
(cherry picked from commit cf5b7b6029c6755607599b267d2de8bbac0256b0)

* fix(architecture): measure façade ratchets from index blobs

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
(cherry picked from commit d0718d24511a2e13ddf2c5cc2ef50e3072ae8b05)

* test(headless): characterize response flushing

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
(cherry picked from commit 924b002e24b491cbf387c44652a6f99a814a01d3)

* fix(architecture): ignore Git replacement objects

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
(cherry picked from commit 7d700ee06f28c890a8cba94e390f6313c4213a2e)

* fix(architecture): align façade ratchets with integration

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(headless): extract capability handlers

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): own headless protocol contract target

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(headless): bound protocol facade

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(headless): separate wire and test responsibilities

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(headless): keep routing fail closed

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(headless): harden refactor evidence

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(ui): extract diagnostics and passport vault capabilities (#236)

* test(ui): characterize public facade paths

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
(cherry picked from commit b05834e6af8d5859805190a48a84b6446e872d37)
Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(ui): extract diagnostics capability

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
(cherry picked from commit b16eb514185cfa370fcb1e399694438b172c1aa5)
Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(ui): cover diagnostics behavior

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
(cherry picked from commit 53a6fb1f8ac777a85acf858ca49b08cc31233cf5)
Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(ui): cover diagnostics bridge failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
(cherry picked from commit 94b4bf4f48008d100580f3e9de74b69d4b4cc5a9)
Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ui): scan extracted modules

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(ui): extract passport vault capability

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(architecture): ratchet UI facade ownership

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(architecture): generate opaque identifier wrappers (#237)

* feat(architecture): add opaque identifier macro

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(architecture): generate opaque identifier wrappers

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(composition): decompose capability facade (#239)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat: prove issuance on mobile simulators (#238)

* feat(harness): add bounded delivery profiles

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): add virtual mobile simulator lane

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): preserve failed mobile diagnostics

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): detach archived mobile builds

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): create the iOS test project directory

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): handle iOS custom-scheme confirmation

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): use stable iOS custody selector

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): pass iOS issue failure phase

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): bind counters to platform transport

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): retain Android QEMU ownership

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): bind Android counters to replay-free transport

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): budget Android APK installation

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): deliver warm Android offers single-top

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): admit redacted restart screenshots

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): retain restart driver stage

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): redact restart credential facts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* style(ui): format restart driver contract

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): target warm Android ingress

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): use pinned consumer image tags

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): await Android failed issuance cleanup

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): report Android harness aborts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): accept Android issued-record completion

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): report bounded Android issue state

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(portal): classify Android issue failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): await Android issued inventory

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): label unreported Android aborts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): classify Android issuance diagnostics

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): reject Android clock drift

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): label Android journey deadline phases

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): report Android supervisor failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): receipt Android reverse mappings

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): accept CRLF Android reverse receipts

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): stabilize unavailable Android protocol failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(portal): add Portal E2E Pi skill

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(portal): add Tailnet manual demo lifecycle

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): keep browser issuance on one Tailnet origin

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ui): clarify identity and credential actions

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): preserve Tailnet mock request path

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): record pending browser navigation

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): render terminal protocol errors

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): accept scoped Android reverse listings

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(factory): define AI resource hygiene policy

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(protocol): allow failed offer discard

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(portal): add explicit holder bootstrap

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(ui): extract DID capability page

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(headless): map DID publication failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): make mobile issuance visibly terminal (#242)

* fix(portal): pin redeemed offer lifecycle

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(factory): validate holder bootstrap receipt

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(portal): honor Android issuance consent touch

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(credential): close issuance review after acceptance

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(wallet): show public standalone balances (#246)

* feat(wallet): show public standalone balances

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(composition): keep standalone ownership bounded

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(harness): avoid false positive in release scan

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(wallet): address current-head review findings

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(wallet): use typed standalone fixture custody

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(wallet): expose public fixture authority

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(wallet): bind public fixture to named profile

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(wallet): scope fixture ambiguity

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(wallet): harden fixture composition

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(wallet): require explicit fixture opt-in

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(wallet): close fixture review gaps

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(wallet): clarify fixture authority boundary

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): model release feature edges exactly

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): normalize release feature evidence

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(wallet): exercise fixture features in CI

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(ci): reserve setup and cleanup time for unit jobs (#250)

* ci(ci): reserve time for job cleanup

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(factory): distinguish unit job reserve

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(wallet): recover owner PreProd wallet root (#248)

* feat(wallet): recover owner PreProd wallet root

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* refactor(ui): extract wallet recovery surfaces

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(wallet): preserve installed root recovery state

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* feat(platform): expose standalone deployment readiness (#252)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(test): enforce critical coverage evidence (#247)

* test(identity): cover DID lifecycle failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(identity): tighten lifecycle forwarding coverage

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(credential): cover fail-closed persistence paths

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(protocol): cover terminal issuance failures

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(test): add source-bound serial coverage harness

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* ci(test): evaluate critical coverage scopes

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(test): omit dependency sources from coverage evidence

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(test): parse zero-context coverage diffs

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): bind coverage to pull request base

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(platform): initialize Android TLS before issuance (#254)

* fix(platform): initialize TLS before credential issuance

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(test): support macOS Bash in Portal stack

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): honor plain-test coverage exclusions

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(test): remove timeout marker race

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* test(ui): cover Android startup transitions

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(factory): add a Tailnet identity and Midnight demo kit (#256)

* docs(portal): add Tailnet mobile demo kit

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(factory): generalize Tailnet identity kit

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* build(platform): split app build and deploy commands (#257)

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): make promotion evidence accurate (#260)

* fix(ci): make promotion evidence accurate

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* docs(ci): document feature-gated coverage closure

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): close promotion coverage mappings (#263)

* fix(ci): cover development wallet fixture

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): classify Rust test modules

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): classify non-executable coverage facade

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

* fix(ci): instrument promotion-only features

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>

---------

Signed-off-by: Yurii Shynbuiev <yurii.shynbuiev@iohk.io>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope:factory Primary contribution scope: factory type:feat Conventional Commit type: feat

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(factory): enforce contribution policy with local Git hooks

2 participants