{
    "object_kind": "push",
    "event_name": "push",
    "before": "7d9a3fa81dd61e4237e563b5af13edffa1456b57",
    "after": "3de5f322f7a453418f4cbdaa18d0d77ed0726d2f",
    "ref": "refs\/heads\/main",
    "ref_protected": true,
    "checkout_sha": "3de5f322f7a453418f4cbdaa18d0d77ed0726d2f",
    "message": null,
    "user_id": 19,
    "user_name": "Bohunka Zsolt",
    "user_username": "bohunkazsolt",
    "user_email": "[REDACTED]",
    "user_avatar": "https:\/\/www.gravatar.com\/avatar\/495e14a024c9ddd64b339a3ee5bcce2be2e8468e23180b4ee001574938728865?s=80&d=identicon",
    "project_id": 206,
    "project": {
        "id": 206,
        "name": "leadmachine",
        "description": null,
        "web_url": "http:\/\/git.dunahousedev.hu\/leadmachine\/leadmachine",
        "avatar_url": null,
        "git_ssh_url": "git@git.dunahousedev.hu:leadmachine\/leadmachine.git",
        "git_http_url": "http:\/\/git.dunahousedev.hu\/leadmachine\/leadmachine.git",
        "namespace": "LeadMachine",
        "visibility_level": 0,
        "path_with_namespace": "leadmachine\/leadmachine",
        "default_branch": "main",
        "ci_config_path": "",
        "homepage": "http:\/\/git.dunahousedev.hu\/leadmachine\/leadmachine",
        "url": "git@git.dunahousedev.hu:leadmachine\/leadmachine.git",
        "ssh_url": "git@git.dunahousedev.hu:leadmachine\/leadmachine.git",
        "http_url": "http:\/\/git.dunahousedev.hu\/leadmachine\/leadmachine.git"
    },
    "commits": [
        {
            "id": "3de5f322f7a453418f4cbdaa18d0d77ed0726d2f",
            "message": "Add biometric login (D-081) with Passkey\/WebAuthn implementation\n\n- Frontend: Introduced `LmAppMark` and `SignInFrame` for login branding and animations, with accessibility and responsive behavior.\n- Backend: Added passkey-based login flow; includes challenge issuance, verification, and detailed error handling.\n- Web: Added WebAuthn integration via `lm_passkey.js` for secure biometric authentication.\n- Tests: Comprehensive feature tests for login flow, including reduced motion handling, challenge expiration, and error scenarios.\n- Configuration: Added `passkeys.php` for frontend-related WebAuthn settings.\n",
            "title": "Add biometric login (D-081) with Passkey\/WebAuthn implementation",
            "timestamp": "2026-10-07T11:31:24+02:00",
            "url": "http:\/\/git.dunahousedev.hu\/leadmachine\/leadmachine\/-\/commit\/3de5f322f7a453418f4cbdaa18d0d77ed0726d2f",
            "author": {
                "name": "Bohunka Zsolt",
                "email": "bohunka.zsolt@dh.hu"
            },
            "added": [
                "backend\/app\/Domain\/Analysis\/LiveCallAnalyzer.php",
                "backend\/app\/Domain\/Analysis\/QuestionBank.php",
                "backend\/app\/Domain\/Analysis\/QuestionBankItem.php",
                "backend\/app\/Domain\/Anonymization\/KnownPii.php",
                "backend\/app\/Domain\/Auth\/FakePasskeyVerifier.php",
                "backend\/app\/Domain\/Auth\/LbuchsPasskeyVerifier.php",
                "backend\/app\/Domain\/Auth\/PasskeyRejected.php",
                "backend\/app\/Domain\/Auth\/PasskeyVerifier.php",
                "backend\/app\/Domain\/Llm\/LlmDisclosure.php",
                "backend\/app\/Domain\/Llm\/OpenAiCompatibleLlmProvider.php",
                "backend\/app\/Http\/Controllers\/App\/PasskeyController.php",
                "backend\/app\/Http\/Controllers\/App\/RecordingController.php",
                "backend\/app\/Jobs\/AnalyzeLiveCall.php",
                "backend\/app\/Jobs\/CollectCallRecording.php",
                "backend\/app\/Models\/AgentPasskey.php",
                "backend\/app\/Services\/Auth\/DeviceTokenIssuer.php",
                "backend\/app\/Services\/Call\/CallRecordingCollector.php",
                "backend\/app\/Services\/Call\/LiveAnalysisService.php",
                "backend\/app\/Services\/Call\/LiveTranscript.php",
                "backend\/config\/media.php",
                "backend\/config\/passkeys.php",
                "backend\/database\/migrations\/2026_10_07_000100_create_agent_passkeys_table.php",
                "backend\/tests\/Feature\/LiveAnalysisFlowTest.php",
                "backend\/tests\/Feature\/LiveCallAnalyzerTest.php",
                "backend\/tests\/Feature\/OpenAiCompatibleLlmProviderTest.php",
                "backend\/tests\/Feature\/PasskeyTest.php",
                "backend\/tests\/Feature\/RecordingPlaybackTest.php",
                "frontend\/lib\/core\/auth\/passkey_controller.dart",
                "frontend\/lib\/core\/auth\/passkeys.dart",
                "frontend\/lib\/core\/auth\/passkeys_stub.dart",
                "frontend\/lib\/core\/auth\/passkeys_web.dart",
                "frontend\/lib\/core\/design\/lm_app_mark.dart",
                "frontend\/lib\/core\/design\/lm_audio_player.dart",
                "frontend\/lib\/core\/design\/lm_or_divider.dart",
                "frontend\/lib\/core\/media\/recording_player.dart",
                "frontend\/lib\/core\/media\/recording_player_stub.dart",
                "frontend\/lib\/core\/media\/recording_player_web.dart",
                "frontend\/lib\/features\/login\/sign_in_frame.dart",
                "frontend\/test\/call_detail_test.dart",
                "frontend\/test\/live_assist_test.dart",
                "frontend\/test\/passkey_login_test.dart",
                "frontend\/test\/sign_in_layout_test.dart",
                "frontend\/test\/support\/fake_passkeys.dart",
                "frontend\/test\/support\/fake_recording_player.dart",
                "frontend\/web\/favicon.svg",
                "frontend\/web\/lm_passkey.js",
                "prompts\/common\/live.md"
            ],
            "modified": [
                "backend\/app\/Http\/Controllers\/App\/AuthController.php",
                "backend\/app\/Providers\/AppServiceProvider.php",
                "backend\/composer.json",
                "backend\/composer.lock",
                "backend\/routes\/app.php",
                "docs\/API.md",
                "docs\/DATA_MODEL.md",
                "docs\/DECISIONS.md",
                "docs\/MILESTONES.md",
                "docs\/SPEC.md",
                "frontend\/README.md",
                "frontend\/lib\/core\/api\/api_client.dart",
                "frontend\/lib\/core\/api\/api_providers.dart",
                "frontend\/lib\/core\/api\/lead_machine_api.dart",
                "frontend\/lib\/core\/api\/models\/auth_models.dart",
                "frontend\/lib\/core\/auth\/local_store_web.dart",
                "frontend\/lib\/core\/auth\/session.dart",
                "frontend\/lib\/core\/design\/design.dart",
                "frontend\/lib\/core\/l10n\/labels.dart",
                "frontend\/lib\/core\/l10n\/locale_controller.dart",
                "frontend\/lib\/core\/router\/app_router.dart",
                "frontend\/lib\/features\/login\/login_screen.dart",
                "frontend\/lib\/features\/login\/splash_screen.dart",
                "frontend\/lib\/features\/settings\/settings_screen.dart",
                "frontend\/lib\/l10n\/app_en.arb",
                "frontend\/lib\/l10n\/app_hu.arb",
                "frontend\/lib\/l10n\/app_it.arb",
                "frontend\/test\/support\/fake_api.dart",
                "frontend\/test\/support\/test_app.dart",
                "frontend\/web\/favicon.png",
                "frontend\/web\/icons\/Icon-192.png",
                "frontend\/web\/icons\/Icon-512.png",
                "frontend\/web\/icons\/Icon-maskable-192.png",
                "frontend\/web\/icons\/Icon-maskable-512.png",
                "frontend\/web\/index.html",
                "frontend\/web\/manifest.json",
                "infra\/env.template",
                "openapi\/app-api.yaml"
            ],
            "removed": []
        }
    ],
    "total_commits_count": 1,
    "push_options": [],
    "repository": {
        "name": "leadmachine",
        "url": "git@git.dunahousedev.hu:leadmachine\/leadmachine.git",
        "description": null,
        "homepage": "http:\/\/git.dunahousedev.hu\/leadmachine\/leadmachine",
        "git_http_url": "http:\/\/git.dunahousedev.hu\/leadmachine\/leadmachine.git",
        "git_ssh_url": "git@git.dunahousedev.hu:leadmachine\/leadmachine.git",
        "visibility_level": 0
    },
    "output": [
        "\/etc\/apache2\/sites-available\/bohunkazsolt.leadmachine.dunahousedev.hu.conf exists.",
        "\/etc\/apache2\/sites-available\/leadmachine.dunahousedev.hu.conf exists.",
        "Saving debug log to \/var\/log\/letsencrypt\/letsencrypt.log",
        "An unexpected error occurred:",
        "BrokenPipeError: [Errno 32] Broken pipe",
        "Ask for help or search for solutions at https:\/\/community.letsencrypt.org. See the logfile \/var\/log\/letsencrypt\/letsencrypt.log or re-run Certbot with -v for more details.",
        "Saving debug log to \/var\/log\/letsencrypt\/letsencrypt.log",
        "An unexpected error occurred:",
        "BrokenPipeError: [Errno 32] Broken pipe",
        "Ask for help or search for solutions at https:\/\/community.letsencrypt.org. See the logfile \/var\/log\/letsencrypt\/letsencrypt.log or re-run Certbot with -v for more details.",
        "Fetching origin",
        "From git.dunahousedev.hu:leadmachine\/leadmachine",
        "   7d9a3fa..3de5f32  main       -> origin\/main",
        "HEAD is now at 3de5f32 Add biometric login (D-081) with Passkey\/WebAuthn implementation",
        "--OK--"
    ]
}