linkedin-apply-assistant 0.1.1
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.
- package/.github/ISSUE_TEMPLATE/bug_report.yml +72 -0
- package/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/ISSUE_TEMPLATE/config_help.yml +49 -0
- package/.github/ISSUE_TEMPLATE/docs.yml +40 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +45 -0
- package/.github/ISSUE_TEMPLATE/safety_compliance.yml +48 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +43 -0
- package/CHANGELOG.md +47 -0
- package/CODE_OF_CONDUCT.md +47 -0
- package/CONTRIBUTING.md +64 -0
- package/GOVERNANCE.md +41 -0
- package/LEGAL.md +38 -0
- package/LICENSE +22 -0
- package/MIGRATION.md +50 -0
- package/README.md +167 -0
- package/RELEASE_CHECKLIST.md +454 -0
- package/SAFETY.md +33 -0
- package/SECURITY.md +37 -0
- package/SUPPORT.md +44 -0
- package/THIRD_PARTY_NOTICES.md +67 -0
- package/bin/linkedin-apply-assistant.mjs +95 -0
- package/configs/config.example.yml +24 -0
- package/configs/qa_bank.example.yml +35 -0
- package/docs/apply.md +40 -0
- package/docs/assist.md +35 -0
- package/docs/browser-session.md +45 -0
- package/docs/ci-and-release-policy.md +105 -0
- package/docs/commands.md +176 -0
- package/docs/install-and-configuration.md +265 -0
- package/docs/registry-publication-strategy.md +169 -0
- package/docs/reports.md +35 -0
- package/docs/search.md +39 -0
- package/docs/troubleshooting.md +57 -0
- package/examples/dry_run_input.example.json +25 -0
- package/examples/reports/apply-audit.example.json +31 -0
- package/examples/reports/search-report.example.json +40 -0
- package/install.ps1 +178 -0
- package/package.json +59 -0
- package/pyproject.toml +51 -0
- package/src/linkedin_apply_assistant/__init__.py +8 -0
- package/src/linkedin_apply_assistant/apply_reports.py +229 -0
- package/src/linkedin_apply_assistant/ats_handlers.py +217 -0
- package/src/linkedin_apply_assistant/browser_sessions.py +155 -0
- package/src/linkedin_apply_assistant/cli.py +570 -0
- package/src/linkedin_apply_assistant/config.py +109 -0
- package/src/linkedin_apply_assistant/contracts.py +255 -0
- package/src/linkedin_apply_assistant/form_engine.py +180 -0
- package/src/linkedin_apply_assistant/linkedin_layer.py +436 -0
- package/src/linkedin_apply_assistant/page_actions.py +110 -0
- package/src/linkedin_apply_assistant/page_selectors.py +88 -0
- package/src/linkedin_apply_assistant/paths.py +135 -0
- package/src/linkedin_apply_assistant/qa_bank.py +352 -0
- package/src/linkedin_apply_assistant/redaction.py +119 -0
- package/src/linkedin_apply_assistant/safety.py +230 -0
- package/src/linkedin_apply_assistant/workflows.py +435 -0
package/README.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# LinkedIn-apply-assistant
|
|
2
|
+
|
|
3
|
+
[](https://github.com/MohammedGhazal09/linkedin-apply-assistant/actions/workflows/quality.yml?query=branch%3Amain)
|
|
4
|
+
[](https://github.com/MohammedGhazal09/linkedin-apply-assistant/actions/workflows/security.yml?query=branch%3Amain)
|
|
5
|
+
|
|
6
|
+
LinkedIn-apply-assistant is an experimental local browser automation assistant for LinkedIn job workflows. It helps with search, visible-browser form filling, prepare-only apply audits, dry-run validation, and local report review while you stay in control of every browser session.
|
|
7
|
+
|
|
8
|
+
The package is local-first. It does not require credentials in config, copied browser profiles, private documents, or generated reports to import, inspect, or run its deterministic tests.
|
|
9
|
+
|
|
10
|
+
Current package metadata version: `0.1.1`.
|
|
11
|
+
|
|
12
|
+
## Safety Boundary
|
|
13
|
+
|
|
14
|
+
- Browser workflows are user-visible and user-controlled.
|
|
15
|
+
- Public workflows are no-submit by default.
|
|
16
|
+
- `apply` currently prepares local audit output and keeps browser submission disabled.
|
|
17
|
+
- `--confirm-submit` is a guarded future option; every submission would still require explicit per-submission confirmation and Phase 16 safety guardrails.
|
|
18
|
+
- Do not use the package for mass applications, unattended apply sessions, CAPTCHA or MFA bypass, fake answers, unrelated personal-data scraping, or continued automation after platform throttling.
|
|
19
|
+
|
|
20
|
+
Read [SAFETY.md](SAFETY.md) before using visible-browser workflows. Read [LEGAL.md](LEGAL.md) for platform responsibility, acceptable-use, and no-legal-advice / no-compliance-certification posture.
|
|
21
|
+
|
|
22
|
+
## Community and Support
|
|
23
|
+
|
|
24
|
+
- Support and setup routing: [SUPPORT.md](SUPPORT.md)
|
|
25
|
+
- Contributions: [CONTRIBUTING.md](CONTRIBUTING.md), [.github/ISSUE_TEMPLATE/](.github/ISSUE_TEMPLATE/), and [.github/PULL_REQUEST_TEMPLATE.md](.github/PULL_REQUEST_TEMPLATE.md)
|
|
26
|
+
- Conduct and governance: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) and [GOVERNANCE.md](GOVERNANCE.md)
|
|
27
|
+
- Vulnerability reporting: [SECURITY.md](SECURITY.md)
|
|
28
|
+
|
|
29
|
+
## Install
|
|
30
|
+
|
|
31
|
+
NPM global launcher:
|
|
32
|
+
|
|
33
|
+
```powershell
|
|
34
|
+
npm install -g linkedin-apply-assistant
|
|
35
|
+
linkedin-apply-assistant --help
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The npm package is a Node launcher plus bundled Python source. If the launcher
|
|
39
|
+
reports missing Python imports, install the bundled Python package from the
|
|
40
|
+
global npm package directory:
|
|
41
|
+
|
|
42
|
+
```powershell
|
|
43
|
+
$pkg = Join-Path (npm root -g) 'linkedin-apply-assistant'
|
|
44
|
+
py -3 -m pip install $pkg
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
PowerShell no-admin installer:
|
|
48
|
+
|
|
49
|
+
```powershell
|
|
50
|
+
$script = Join-Path $env:TEMP 'install-linkedin-apply-assistant.ps1'
|
|
51
|
+
Invoke-WebRequest -UseBasicParsing https://raw.githubusercontent.com/MohammedGhazal09/linkedin-apply-assistant/main/install.ps1 -OutFile $script
|
|
52
|
+
powershell -ExecutionPolicy Bypass -File $script
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
From the package directory:
|
|
56
|
+
|
|
57
|
+
```powershell
|
|
58
|
+
python -m pip install -e ".[dev]"
|
|
59
|
+
linkedin-apply-assistant --help
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
For Bash/macOS/Linux:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
python -m pip install -e ".[dev]"
|
|
66
|
+
linkedin-apply-assistant --help
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
For editable local development, this module fallback is available from the package root:
|
|
70
|
+
|
|
71
|
+
```powershell
|
|
72
|
+
$env:PYTHONPATH=(Resolve-Path 'src').Path
|
|
73
|
+
python -m linkedin_apply_assistant.cli --help
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Use Python 3.11 or newer. Install Playwright Chromium before visible-browser workflows such as `search`, `assist`, or browser-dependent `apply` preparation. Browser-free `dry-run` and `report` do not require Chromium.
|
|
77
|
+
|
|
78
|
+
The package also includes a local npm launcher shape for package dry-run validation. It delegates to the Python CLI and still requires Python 3.11+ and the package dependencies to be installed or importable.
|
|
79
|
+
|
|
80
|
+
Source checkout is available at <https://github.com/MohammedGhazal09/linkedin-apply-assistant>. See [docs/install-and-configuration.md](docs/install-and-configuration.md) for the full npm, PowerShell, source, Python, and Playwright install matrix. PyPI remains a future package channel; the package-channel decision is documented in the [registry publication strategy](docs/registry-publication-strategy.md).
|
|
81
|
+
|
|
82
|
+
## Quick Start
|
|
83
|
+
|
|
84
|
+
1. Copy the example files you need into your own local workspace, then keep the real files ignored by version control:
|
|
85
|
+
- [configs/config.example.yml](configs/config.example.yml)
|
|
86
|
+
- [configs/qa_bank.example.yml](configs/qa_bank.example.yml)
|
|
87
|
+
- [examples/dry_run_input.example.json](examples/dry_run_input.example.json)
|
|
88
|
+
2. Run a browser-free dry run:
|
|
89
|
+
|
|
90
|
+
```powershell
|
|
91
|
+
linkedin-apply-assistant dry-run --input examples\dry_run_input.example.json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
3. Review command help before running browser workflows:
|
|
95
|
+
|
|
96
|
+
```powershell
|
|
97
|
+
linkedin-apply-assistant config check
|
|
98
|
+
linkedin-apply-assistant search --help
|
|
99
|
+
linkedin-apply-assistant assist --help
|
|
100
|
+
linkedin-apply-assistant apply --help
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
4. Run the package quality gate before publishing or contributing:
|
|
104
|
+
|
|
105
|
+
```powershell
|
|
106
|
+
python scripts\quality.py
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
The current root smoke command remains:
|
|
110
|
+
|
|
111
|
+
```powershell
|
|
112
|
+
node test-all.mjs --quick
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Public Commands
|
|
116
|
+
|
|
117
|
+
All commands accept these shared flags where relevant: `--workspace`, `--config`, `--qa-bank`, `--browser-profile`, `--output-dir`, and `--verbose`.
|
|
118
|
+
|
|
119
|
+
| Command | Purpose | Key flags |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| `config check` | Inspect first-run paths and setup gaps without creating files. | `--workspace`, `--config`, `--qa-bank`, `--browser-profile`, `--output-dir` |
|
|
122
|
+
| `search` | Collect candidate job context and write local reports without submitting applications. | `--query`, `--location`, `--limit`, `--search-url` |
|
|
123
|
+
| `assist` | Open a visible-browser fill-only session where the user drives the workflow. | `--start-url`, `--mode`, `--max-cycles` |
|
|
124
|
+
| `apply` | Prepare approval-gated application audit output. Browser submission remains disabled today. | `--input`, `--limit`, `--confirm-submit` |
|
|
125
|
+
| `dry-run` | Validate local job input without browser or network submission. | `--input` |
|
|
126
|
+
| `report` | Read a local JSON report and print a concise summary. | `report_json` |
|
|
127
|
+
|
|
128
|
+
## Documentation Map
|
|
129
|
+
|
|
130
|
+
User workflow docs:
|
|
131
|
+
|
|
132
|
+
- [Install and configuration](docs/install-and-configuration.md)
|
|
133
|
+
- [Terminal command reference](docs/commands.md)
|
|
134
|
+
- [Visible browser session setup](docs/browser-session.md)
|
|
135
|
+
- [Search-only workflow](docs/search.md)
|
|
136
|
+
- [Assistive fill-only workflow](docs/assist.md)
|
|
137
|
+
- [Prepare-only apply workflow](docs/apply.md)
|
|
138
|
+
- [Report review](docs/reports.md)
|
|
139
|
+
- [Troubleshooting](docs/troubleshooting.md)
|
|
140
|
+
|
|
141
|
+
Release and maintainer docs:
|
|
142
|
+
|
|
143
|
+
- [SAFETY.md](SAFETY.md)
|
|
144
|
+
- [LEGAL.md](LEGAL.md)
|
|
145
|
+
- [LICENSE](LICENSE)
|
|
146
|
+
- [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)
|
|
147
|
+
- [MIGRATION.md](MIGRATION.md)
|
|
148
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
149
|
+
- [SECURITY.md](SECURITY.md)
|
|
150
|
+
- [SUPPORT.md](SUPPORT.md)
|
|
151
|
+
- [GOVERNANCE.md](GOVERNANCE.md)
|
|
152
|
+
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
|
|
153
|
+
- [.github/ISSUE_TEMPLATE/](.github/ISSUE_TEMPLATE/)
|
|
154
|
+
- [.github/PULL_REQUEST_TEMPLATE.md](.github/PULL_REQUEST_TEMPLATE.md)
|
|
155
|
+
- [CI and release policy](docs/ci-and-release-policy.md)
|
|
156
|
+
- [Registry publication strategy](docs/registry-publication-strategy.md)
|
|
157
|
+
- [CHANGELOG.md](CHANGELOG.md)
|
|
158
|
+
- [RELEASE_CHECKLIST.md](RELEASE_CHECKLIST.md)
|
|
159
|
+
|
|
160
|
+
## Examples
|
|
161
|
+
|
|
162
|
+
- Config: [configs/config.example.yml](configs/config.example.yml)
|
|
163
|
+
- Q&A bank: [configs/qa_bank.example.yml](configs/qa_bank.example.yml)
|
|
164
|
+
- Dry-run input: [examples/dry_run_input.example.json](examples/dry_run_input.example.json)
|
|
165
|
+
- Synthetic reports: [examples/reports/search-report.example.json](examples/reports/search-report.example.json), [examples/reports/apply-audit.example.json](examples/reports/apply-audit.example.json)
|
|
166
|
+
|
|
167
|
+
All public examples are synthetic. Do not publish credentials, cookies, browser state, screenshots, private documents, full private URLs, generated local reports, or live job history.
|
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
# Release Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist before publishing LinkedIn-apply-assistant.
|
|
4
|
+
|
|
5
|
+
## Phase 23 PUB-07 Public Metadata Readiness
|
|
6
|
+
|
|
7
|
+
PUB-07 confirms that package metadata, source-install docs, and release hygiene point to the canonical public repository:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
https://github.com/MohammedGhazal09/linkedin-apply-assistant
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This checklist is release readiness only. It does not create tags, create a GitHub Release, publish to npm, publish to PyPI, publish to TestPyPI, configure registry tokens, or run registry provenance automation.
|
|
14
|
+
|
|
15
|
+
The future first tag is `v0.1.0` only after Phase 24 and explicit release approval. Phase 22 created and verified the public repository. Phase 23 owns public metadata and release-tooling readiness. Phase 24 owns tag and GitHub Release creation.
|
|
16
|
+
|
|
17
|
+
Release notes come from package `CHANGELOG.md` plus Phase 23 evidence in `.planning/phases/23-finalize-public-metadata-and-release-tooling-pub-07/23-VERIFICATION.md`.
|
|
18
|
+
|
|
19
|
+
No-publish proof remains part of PUB-07 readiness: this phase verifies metadata,
|
|
20
|
+
docs, and release tooling only.
|
|
21
|
+
|
|
22
|
+
Manual approval point: stop before any `git push`, `git tag`, GitHub Release, npm publish, PyPI publish, TestPyPI publish, registry-token setup, public-visibility change, or other external action not explicitly authorized for the current phase. Approval must name the target repository or release channel.
|
|
23
|
+
|
|
24
|
+
Rollback path for failed readiness: delete the generated candidate or archive, do not reuse the failed candidate, rerun `python scripts\release.py clean`, then rerun `python scripts\release.py verify`.
|
|
25
|
+
|
|
26
|
+
Use specific-file staging only, for example:
|
|
27
|
+
|
|
28
|
+
```powershell
|
|
29
|
+
git add -- RELEASE_CHECKLIST.md CHANGELOG.md scripts\release.py release-manifest.json
|
|
30
|
+
git add -- docs\install-and-configuration.md docs\troubleshooting.md README.md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Do not add registry-publish automation in PUB-07.
|
|
34
|
+
|
|
35
|
+
## Phase 24 PUB-08 v0.1.0 GitHub Source Release
|
|
36
|
+
|
|
37
|
+
PUB-08 publishes the first GitHub source release only:
|
|
38
|
+
|
|
39
|
+
- Repository: `MohammedGhazal09/linkedin-apply-assistant`
|
|
40
|
+
- Tag: `v0.1.0`
|
|
41
|
+
- Release type: draft-first GitHub Release, then final/latest only after verification passes.
|
|
42
|
+
- Package scope: source checkout, generated GitHub source archives, and local build/pack smoke evidence.
|
|
43
|
+
- Safety boundary: browser workflows remain user-controlled and no-submit; the package prepares and assists, but does not click final application submission for the user.
|
|
44
|
+
|
|
45
|
+
Explicit ship approval is required before any of these actions:
|
|
46
|
+
|
|
47
|
+
- pushing the verified release-prep `main` commit to `origin/main`
|
|
48
|
+
- annotated tag creation for `v0.1.0`
|
|
49
|
+
- then pushing only `refs/tags/v0.1.0` for the tag step
|
|
50
|
+
- draft GitHub Release creation with `--verify-tag`
|
|
51
|
+
- final publication after draft/source verification
|
|
52
|
+
|
|
53
|
+
Required Phase 24 evidence:
|
|
54
|
+
|
|
55
|
+
- Release-prep main sync: `git -C W:\linkedin-apply-assistant-public status --short --branch`, `git -C W:\linkedin-apply-assistant-public rev-parse HEAD`, `git -C W:\linkedin-apply-assistant-public push origin main`, and `git -C W:\linkedin-apply-assistant-public ls-remote --heads origin main` confirm `origin/main` matches the verified release-prep commit before tag creation.
|
|
56
|
+
- Focused release/docs tests: `python -m pytest tests\test_distribution_metadata.py tests\test_release_readiness.py`
|
|
57
|
+
- Full package quality gate: `python scripts\quality.py`
|
|
58
|
+
- Clean release workspace: `python scripts\release.py clean`
|
|
59
|
+
- Manifest verification: `python scripts\release.py manifest --check`
|
|
60
|
+
- Release scan: `python scripts\release.py verify`
|
|
61
|
+
- Python build smoke outside the package root: `python -m build --outdir <temp>`
|
|
62
|
+
- npm launcher smoke without registry upload: `npm pack --dry-run --json`
|
|
63
|
+
- Real gitleaks evidence: `gitleaks version`, package directory scan, public checkout directory scan, and public checkout history scan all pass with `gitleaks: passed`
|
|
64
|
+
- Draft release check: `gh release view v0.1.0 --repo MohammedGhazal09/linkedin-apply-assistant --json tagName,name,url,isDraft,isPrerelease,targetCommitish,zipballUrl,tarballUrl,assets`
|
|
65
|
+
- Release list check: `gh release list --repo MohammedGhazal09/linkedin-apply-assistant --json tagName,name,isDraft,isLatest,isPrerelease,publishedAt --limit 20`
|
|
66
|
+
- No-registry proof: npm and PyPI read-only absence checks remain package-not-found or 404 before and after the GitHub source release.
|
|
67
|
+
|
|
68
|
+
No-registry and no-asset boundary:
|
|
69
|
+
|
|
70
|
+
- no npm publish
|
|
71
|
+
- no PyPI publish
|
|
72
|
+
- no TestPyPI publish
|
|
73
|
+
- no registry token setup
|
|
74
|
+
- empty release assets on GitHub; do not attach wheel, sdist, or npm tarball artifacts
|
|
75
|
+
- no provenance, attestations, branch protection, topics, Release Please, or repository-hardening work in this phase
|
|
76
|
+
- no broad branch, mirror, or all-tags push; the only branch update in PUB-08 is the explicitly approved release-prep `main` push before tag creation
|
|
77
|
+
|
|
78
|
+
Rollback commands for failed draft/tag work:
|
|
79
|
+
|
|
80
|
+
```powershell
|
|
81
|
+
gh release delete v0.1.0 --repo MohammedGhazal09/linkedin-apply-assistant --yes --cleanup-tag
|
|
82
|
+
git -C W:\linkedin-apply-assistant-public push origin :refs/tags/v0.1.0
|
|
83
|
+
git -C W:\linkedin-apply-assistant-public tag -d v0.1.0
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Phase 26 Community Health Files and Contribution Templates
|
|
87
|
+
|
|
88
|
+
Phase 26 prepares community-health files and contribution templates for local
|
|
89
|
+
review only. It does not push, tag, create a release, publish to a registry,
|
|
90
|
+
change repository settings, enable Discussions, edit labels, change branch
|
|
91
|
+
protection, or apply a system update.
|
|
92
|
+
|
|
93
|
+
No push, tag, release, registry, settings, Discussions, labels, branch protection, or system update is allowed in Phase 26.
|
|
94
|
+
|
|
95
|
+
Required files/templates:
|
|
96
|
+
|
|
97
|
+
- `SUPPORT.md`
|
|
98
|
+
- `GOVERNANCE.md`
|
|
99
|
+
- `CODE_OF_CONDUCT.md`
|
|
100
|
+
- `.github/ISSUE_TEMPLATE/bug_report.yml`
|
|
101
|
+
- `.github/ISSUE_TEMPLATE/feature_request.yml`
|
|
102
|
+
- `.github/ISSUE_TEMPLATE/docs.yml`
|
|
103
|
+
- `.github/ISSUE_TEMPLATE/safety_compliance.yml`
|
|
104
|
+
- `.github/ISSUE_TEMPLATE/config_help.yml`
|
|
105
|
+
- `.github/ISSUE_TEMPLATE/config.yml`
|
|
106
|
+
- `.github/PULL_REQUEST_TEMPLATE.md`
|
|
107
|
+
|
|
108
|
+
Required Phase 26 evidence:
|
|
109
|
+
|
|
110
|
+
```powershell
|
|
111
|
+
python -m pytest tests\test_community_health.py tests\test_docs_smoke.py tests\test_privacy_scans.py tests\test_npm_launcher.py tests\test_distribution_smoke.py tests\test_release_manifest.py tests\test_release_readiness.py -q
|
|
112
|
+
python scripts\release.py manifest --check
|
|
113
|
+
python scripts\release.py verify
|
|
114
|
+
npm pack --dry-run --json
|
|
115
|
+
gh api repos/MohammedGhazal09/linkedin-apply-assistant/community/profile --jq '.health_percentage'
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Community-health release gate:
|
|
119
|
+
|
|
120
|
+
- focused community-health tests pass
|
|
121
|
+
- docs smoke checks cover support, governance, conduct, issue template, and PR
|
|
122
|
+
template links
|
|
123
|
+
- privacy scan coverage includes root community docs and `.github` templates
|
|
124
|
+
- `release-manifest.json` includes root community docs, issue forms, PR
|
|
125
|
+
template, and `tests/test_community_health.py`
|
|
126
|
+
- npm dry-run includes the same community docs/templates expected from
|
|
127
|
+
`package.json` files
|
|
128
|
+
- read-only GitHub community profile baseline is recorded before any push
|
|
129
|
+
- local public-checkout sync only; no live community-profile improvement is
|
|
130
|
+
claimed until a later approved push publishes the files
|
|
131
|
+
|
|
132
|
+
## Phase 28 Release Automation, Provenance, and CI Visibility
|
|
133
|
+
|
|
134
|
+
Phase 28 adds CI visibility and release-policy documentation. It does not
|
|
135
|
+
publish packages, create or mutate tags, create or mutate GitHub Releases,
|
|
136
|
+
reserve package names, configure trusted publishers, enable artifact
|
|
137
|
+
attestations, create SBOM artifacts, add signing keys, or mutate branch rulesets,
|
|
138
|
+
tag rulesets, required checks, labels, assignees, or repository settings.
|
|
139
|
+
|
|
140
|
+
Required files:
|
|
141
|
+
|
|
142
|
+
- `.github/workflows/quality.yml`
|
|
143
|
+
- `.github/workflows/security.yml`
|
|
144
|
+
- `.github/dependabot.yml`
|
|
145
|
+
- `docs/ci-and-release-policy.md`
|
|
146
|
+
- `tests/test_workflow_safety.py`
|
|
147
|
+
|
|
148
|
+
Required Phase 28 local evidence:
|
|
149
|
+
|
|
150
|
+
```powershell
|
|
151
|
+
python -m pytest tests\test_workflow_safety.py tests\test_docs_smoke.py tests\test_distribution_metadata.py tests\test_release_manifest.py tests\test_release_readiness.py tests\test_quality_gate.py -q
|
|
152
|
+
python scripts\quality.py
|
|
153
|
+
python scripts\release.py clean
|
|
154
|
+
python scripts\release.py manifest --check
|
|
155
|
+
python scripts\release.py verify
|
|
156
|
+
npm pack --dry-run --json
|
|
157
|
+
gitleaks version
|
|
158
|
+
gitleaks dir . --no-banner --redact
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Required Phase 28 public verification after explicit sync approval:
|
|
162
|
+
|
|
163
|
+
```powershell
|
|
164
|
+
gh api repos/MohammedGhazal09/linkedin-apply-assistant/actions/workflows --jq ".workflows[] | {name,path,state,id}"
|
|
165
|
+
gh workflow list --repo MohammedGhazal09/linkedin-apply-assistant
|
|
166
|
+
gh run list --repo MohammedGhazal09/linkedin-apply-assistant --limit 10
|
|
167
|
+
gh api repos/MohammedGhazal09/linkedin-apply-assistant/dependabot/alerts --paginate --jq "length"
|
|
168
|
+
gh release list --repo MohammedGhazal09/linkedin-apply-assistant --limit 10
|
|
169
|
+
git ls-remote --tags origin
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
CI and release-policy gate:
|
|
173
|
+
|
|
174
|
+
- only two user-authored workflow badges are added: `Quality` and `Security`
|
|
175
|
+
- badge URLs point at the `main` branch and the user-authored workflow files
|
|
176
|
+
- `Quality` runs Python `3.11` and `3.12` on Ubuntu and a single Node.js `24`
|
|
177
|
+
release-smoke lane
|
|
178
|
+
- `Security` runs committed CodeQL advanced setup for Python and JavaScript,
|
|
179
|
+
Dependency Review with `fail-on-severity: high`, and Gitleaks secret scanning
|
|
180
|
+
- Dependabot covers GitHub Actions, npm, and pip at `/` with weekly grouped
|
|
181
|
+
updates, open PR limit 5, no auto-merge, and no labels or assignees
|
|
182
|
+
- workflow permissions default to `contents: read`
|
|
183
|
+
- `security-events: write` is allowed only for the CodeQL job
|
|
184
|
+
- no `packages: write`, `id-token: write`, or `attestations: write`
|
|
185
|
+
- no Release Please, semantic-release, or equivalent tag/release automation
|
|
186
|
+
- Conventional Commits are advisory documentation only and are not enforced in CI
|
|
187
|
+
- workflows and Dependabot config are source-release manifest metadata, but are
|
|
188
|
+
excluded from npm package contents unless a future phase intentionally changes
|
|
189
|
+
that policy
|
|
190
|
+
|
|
191
|
+
## Phase 29 Registry Publication Strategy
|
|
192
|
+
|
|
193
|
+
Phase 29 documents the package-channel decision and static registry policy. It
|
|
194
|
+
does not publish packages, reserve package names, create registry projects,
|
|
195
|
+
configure trusted publishers, create registry tokens, log in to registries,
|
|
196
|
+
create or mutate tags, create or mutate GitHub Releases, upload release assets,
|
|
197
|
+
grant publish-capable workflow permissions, or apply a career-ops system update.
|
|
198
|
+
|
|
199
|
+
Canonical strategy doc:
|
|
200
|
+
|
|
201
|
+
- `docs/registry-publication-strategy.md`
|
|
202
|
+
|
|
203
|
+
Channel decision:
|
|
204
|
+
|
|
205
|
+
- GitHub Releases are the current source-only public channel.
|
|
206
|
+
- `v0.1.0` remains GitHub-source-only and is not a registry backfill candidate.
|
|
207
|
+
- PyPI is the primary future Python registry.
|
|
208
|
+
- TestPyPI is required for the first registry release and publish-workflow
|
|
209
|
+
changes.
|
|
210
|
+
- npm is a public thin-launcher channel that delegates to the Python
|
|
211
|
+
CLI.
|
|
212
|
+
- GitHub Packages remains deferred.
|
|
213
|
+
|
|
214
|
+
Required Phase 29 local evidence:
|
|
215
|
+
|
|
216
|
+
```powershell
|
|
217
|
+
python -m pytest tests\test_registry_publication_strategy.py tests\test_docs_smoke.py tests\test_distribution_metadata.py tests\test_release_readiness.py tests\test_release_manifest.py tests\test_npm_launcher.py tests\test_distribution_smoke.py tests\test_workflow_safety.py -q
|
|
218
|
+
python scripts\quality.py
|
|
219
|
+
python scripts\release.py clean
|
|
220
|
+
python scripts\release.py manifest --check
|
|
221
|
+
python scripts\release.py verify
|
|
222
|
+
npm pack --dry-run --json
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Required Phase 29 read-only absence checks:
|
|
226
|
+
|
|
227
|
+
```powershell
|
|
228
|
+
npm view linkedin-apply-assistant version --json
|
|
229
|
+
try { (Invoke-WebRequest -UseBasicParsing https://pypi.org/pypi/linkedin-apply-assistant/json -TimeoutSec 20).StatusCode } catch { $_.Exception.Response.StatusCode.value__ }
|
|
230
|
+
try { (Invoke-WebRequest -UseBasicParsing https://test.pypi.org/pypi/linkedin-apply-assistant/json -TimeoutSec 20).StatusCode } catch { $_.Exception.Response.StatusCode.value__ }
|
|
231
|
+
gh release list --repo MohammedGhazal09/linkedin-apply-assistant --limit 5
|
|
232
|
+
gh workflow list --repo MohammedGhazal09/linkedin-apply-assistant
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Future registry approval must name:
|
|
236
|
+
|
|
237
|
+
- repository
|
|
238
|
+
- version
|
|
239
|
+
- channel
|
|
240
|
+
- workflow or manual action owner
|
|
241
|
+
- exact mutation
|
|
242
|
+
|
|
243
|
+
Future gate categories:
|
|
244
|
+
|
|
245
|
+
- Python build with `python -m build`
|
|
246
|
+
- Python metadata validation with `twine check dist/*`
|
|
247
|
+
- local wheel install smoke
|
|
248
|
+
- npm dry-run with `npm pack --dry-run --json`
|
|
249
|
+
- package contents inspection
|
|
250
|
+
- manifest verification with `python scripts\release.py manifest --check`
|
|
251
|
+
- release verification with `python scripts\release.py verify`
|
|
252
|
+
- gitleaks or release scan
|
|
253
|
+
- read-only npm, PyPI, and TestPyPI registry checks
|
|
254
|
+
|
|
255
|
+
Future registry security boundary:
|
|
256
|
+
|
|
257
|
+
- maintainer or maintainer-controlled organization ownership
|
|
258
|
+
- account 2FA where supported
|
|
259
|
+
- PyPI Trusted Publishing with GitHub Actions OIDC
|
|
260
|
+
- npm trusted publishing or OIDC where supported
|
|
261
|
+
- protected environments such as `testpypi`, `pypi`, and `npm`
|
|
262
|
+
- no shared long-lived registry tokens
|
|
263
|
+
- future `release.yml` identity only after explicit approval
|
|
264
|
+
- no `packages: write`, `id-token: write`, or `attestations: write` in Phase 29
|
|
265
|
+
|
|
266
|
+
Future approval templates are in `docs/registry-publication-strategy.md` for:
|
|
267
|
+
|
|
268
|
+
- TestPyPI preflight
|
|
269
|
+
- PyPI release
|
|
270
|
+
- npm launcher release
|
|
271
|
+
- GitHub Release asset work
|
|
272
|
+
|
|
273
|
+
Rollback and remediation policy:
|
|
274
|
+
|
|
275
|
+
- PyPI: prefer yanking where appropriate; deletion is disruptive.
|
|
276
|
+
- TestPyPI: cleanup is preflight-only and not production rollback proof.
|
|
277
|
+
- npm: deprecation is often safer than unpublish, and used package versions
|
|
278
|
+
cannot be reused.
|
|
279
|
+
- GitHub Releases: asset removal does not undo source archives or tags.
|
|
280
|
+
- no executable registry rollback script is part of Phase 29.
|
|
281
|
+
|
|
282
|
+
## v0.1.1 NPM and PowerShell Distribution Release
|
|
283
|
+
|
|
284
|
+
This release makes the package downloadable through npm and a no-admin PowerShell installer while keeping `v0.1.0` GitHub-source-only.
|
|
285
|
+
|
|
286
|
+
Scope:
|
|
287
|
+
|
|
288
|
+
- Package version: `0.1.1`
|
|
289
|
+
- npm package: `linkedin-apply-assistant`
|
|
290
|
+
- npm dist-tag: `latest`
|
|
291
|
+
- PowerShell installer: `install.ps1`
|
|
292
|
+
- Repository: `MohammedGhazal09/linkedin-apply-assistant`
|
|
293
|
+
- PyPI and TestPyPI remain future channels.
|
|
294
|
+
|
|
295
|
+
Required files:
|
|
296
|
+
|
|
297
|
+
- `package.json`
|
|
298
|
+
- `pyproject.toml`
|
|
299
|
+
- `src/linkedin_apply_assistant/__init__.py`
|
|
300
|
+
- `bin/linkedin-apply-assistant.mjs`
|
|
301
|
+
- `install.ps1`
|
|
302
|
+
- `README.md`
|
|
303
|
+
- `docs/install-and-configuration.md`
|
|
304
|
+
- `docs/registry-publication-strategy.md`
|
|
305
|
+
- `CHANGELOG.md`
|
|
306
|
+
- `SECURITY.md`
|
|
307
|
+
- `release-manifest.json`
|
|
308
|
+
|
|
309
|
+
Required local evidence before public sync:
|
|
310
|
+
|
|
311
|
+
```powershell
|
|
312
|
+
python -m pytest tests\test_distribution_metadata.py tests\test_docs_smoke.py tests\test_npm_launcher.py tests\test_distribution_smoke.py tests\test_release_manifest.py tests\test_registry_publication_strategy.py tests\test_release_readiness.py -q
|
|
313
|
+
python scripts\quality.py
|
|
314
|
+
python scripts\release.py clean
|
|
315
|
+
python scripts\release.py manifest --check
|
|
316
|
+
python scripts\release.py verify
|
|
317
|
+
npm pack --dry-run --json
|
|
318
|
+
powershell -NoProfile -Command "$errors=$null; [System.Management.Automation.PSParser]::Tokenize((Get-Content -Raw .\install.ps1), [ref]$errors) | Out-Null; if($errors){$errors; exit 1}"
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Required public verification after sync and before registry mutation:
|
|
322
|
+
|
|
323
|
+
```powershell
|
|
324
|
+
git -C W:\linkedin-apply-assistant-public status --short --branch
|
|
325
|
+
git -C W:\linkedin-apply-assistant-public rev-parse HEAD
|
|
326
|
+
npm view linkedin-apply-assistant version --json
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
The npm registry mutation is the verified manual publish of
|
|
330
|
+
`linkedin-apply-assistant@0.1.1` to the npm public registry with the `latest`
|
|
331
|
+
dist-tag. Use the already verified tarball contents; do not add lifecycle
|
|
332
|
+
install, publish, or token scripts to `package.json`.
|
|
333
|
+
|
|
334
|
+
Post-publish verification:
|
|
335
|
+
|
|
336
|
+
```powershell
|
|
337
|
+
npm view linkedin-apply-assistant version --json
|
|
338
|
+
npm view linkedin-apply-assistant dist-tags --json
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
PowerShell installer verification after public sync:
|
|
342
|
+
|
|
343
|
+
```powershell
|
|
344
|
+
$target = Join-Path $env:TEMP 'linkedin-apply-assistant-install-smoke'
|
|
345
|
+
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1 -InstallDir $target -NoPath
|
|
346
|
+
& (Join-Path $target 'bin\linkedin-apply-assistant.cmd') --help
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
Distribution safety boundary:
|
|
350
|
+
|
|
351
|
+
- npm is a thin launcher and cannot install Python itself.
|
|
352
|
+
- the launcher has no hidden install or registry publish code.
|
|
353
|
+
- `install.ps1` downloads from the public GitHub source archive and does not use `Invoke-Expression` pipe-install behavior.
|
|
354
|
+
- PyPI and TestPyPI uploads stay out of this release.
|
|
355
|
+
- `v0.1.0` remains source-only and is not backfilled to any registry.
|
|
356
|
+
|
|
357
|
+
## Required Public Metadata
|
|
358
|
+
|
|
359
|
+
`package.json` must include exactly these public project fields:
|
|
360
|
+
|
|
361
|
+
- `repository.type`: `git`
|
|
362
|
+
- `repository.url`: `git+https://github.com/MohammedGhazal09/linkedin-apply-assistant.git`
|
|
363
|
+
- `homepage`: `https://github.com/MohammedGhazal09/linkedin-apply-assistant#readme`
|
|
364
|
+
- `bugs.url`: `https://github.com/MohammedGhazal09/linkedin-apply-assistant/issues`
|
|
365
|
+
|
|
366
|
+
`pyproject.toml` must include exactly these project URLs:
|
|
367
|
+
|
|
368
|
+
- `Homepage`: `https://github.com/MohammedGhazal09/linkedin-apply-assistant#readme`
|
|
369
|
+
- `Repository`: `https://github.com/MohammedGhazal09/linkedin-apply-assistant`
|
|
370
|
+
- `Issues`: `https://github.com/MohammedGhazal09/linkedin-apply-assistant/issues`
|
|
371
|
+
|
|
372
|
+
## Hard Publish Blockers
|
|
373
|
+
|
|
374
|
+
| Blocker | Required evidence | Status |
|
|
375
|
+
|---|---|---|
|
|
376
|
+
| Missing license | `LICENSE` exists in package root. | Pending release review |
|
|
377
|
+
| Missing notices | `THIRD_PARTY_NOTICES.md` includes Career-Ops attribution where required and Scrapling BSD 3-Clause notice. | Pending release review |
|
|
378
|
+
| Private-data leaks | Privacy/static scans pass and examples remain synthetic. | Pending release review |
|
|
379
|
+
| Stale commands | Docs smoke checks cover `search`, `assist`, `apply`, `dry-run`, `report`, and shared flags. | Pending release review |
|
|
380
|
+
| Unsafe submit wording | Docs preserve no-submit and prepare-only apply language. | Pending release review |
|
|
381
|
+
| Failing package quality/docs/privacy scans | `python scripts\quality.py` passes from package root. | Pending release review |
|
|
382
|
+
| Missing Phase 17 verification evidence | `.planning/phases/17-build-reproducible-test-harness-ci-and-quality-gates/17-VERIFICATION.md` exists and records passing package quality, package pytest, root smoke, docs smoke, privacy scans, Ruff, dependency audit, and live-test exclusion. | Verified locally before Phase 18 |
|
|
383
|
+
| Top-level generated artifacts after verification | Package root has no top-level `.pytest_cache`, `.ruff_cache`, `build/`, or `dist/` after quality/docs/privacy checks. This is the automated post-quality artifact gate. | Pending release review |
|
|
384
|
+
| Final packaging cleanup | Before creating a distribution archive, recursive final-clean inspection finds no `.pytest_cache`, `.ruff_cache`, `__pycache__`, `*.egg-info`, `build/`, or `dist/` publish blockers. `__pycache__` and editable-install metadata can appear during normal verification, so this is a final publish gate. | Pending release review |
|
|
385
|
+
| Distribution metadata drift | `python -m pytest tests\test_distribution_metadata.py -q` confirms Python, npm, docs, changelog, and release checklist names/versions stay synchronized. | Pending release review |
|
|
386
|
+
| Python build smoke | `python -m build --outdir <temp>` creates local sdist and wheel artifacts outside the package root. | Pending release review |
|
|
387
|
+
| npm pack smoke | `npm pack --dry-run --json` reports the package-local npm launcher shape without sending anything to a registry. | Pending release review |
|
|
388
|
+
| npm launcher guardrails | `python -m pytest tests\test_npm_launcher.py tests\test_distribution_smoke.py -q` confirms the launcher delegates to Python and has no hidden install or registry action. | Pending release review |
|
|
389
|
+
| Public metadata drift | `python -m pytest tests\test_distribution_metadata.py tests\test_npm_launcher.py -q` confirms npm and Python metadata point to the canonical GitHub repository. | Pending release review |
|
|
390
|
+
| Public source docs drift | `python -m pytest tests\test_docs_smoke.py tests\test_release_readiness.py -q` confirms source checkout docs use the canonical GitHub repository and npm, PowerShell, registry, tag, and release wording stays current. | Pending release review |
|
|
391
|
+
| Missing community health files | `python -m pytest tests\test_community_health.py tests\test_docs_smoke.py tests\test_privacy_scans.py -q`, `python scripts\release.py manifest --check`, and `npm pack --dry-run --json` confirm support, governance, conduct, issue forms, PR template, privacy warnings, release manifest, and npm package inclusion. | Pending release review |
|
|
392
|
+
| Real gitleaks evidence | `gitleaks version`, `python scripts\release.py verify`, and `python scripts\release.py scan <candidate-or-checkout>` record real gitleaks scans with `gitleaks: passed`. | Pending release review |
|
|
393
|
+
| Terminal help drift | `python -m pytest tests\test_cli_help.py tests\test_config_diagnostics.py -q` confirms root help, subcommand help, and `linkedin-apply-assistant config check` stay actionable. | Pending release review |
|
|
394
|
+
| Config diagnostics drift | `tests\test_config_diagnostics.py` confirms `config check` reports runtime paths without creating workspace files or directories. | Pending release review |
|
|
395
|
+
| Command reference drift | `docs\commands.md` remains linked from README and install docs, and docs smoke checks keep command coverage current. | Pending release review |
|
|
396
|
+
| Browser setup guidance drift | Help and docs keep `python -m playwright install chromium`, browser profile guidance, no-submit language, and browser submission remains disabled. | Pending release review |
|
|
397
|
+
| Explicit external-action approval | Stop before any remote, tag, GitHub Release, registry token setup, npm registry action, PyPI registry action, or TestPyPI registry action until explicit ship approval names the target channel. | Pending release review |
|
|
398
|
+
| Registry state proof | Confirm npm, PyPI, TestPyPI, GitHub tag, and GitHub Release state match the current approved release channel before and after any external mutation. | Pending release review |
|
|
399
|
+
|
|
400
|
+
Do not publish while any hard blocker remains unresolved.
|
|
401
|
+
|
|
402
|
+
## Advisory Checklist
|
|
403
|
+
|
|
404
|
+
- README explains purpose, install, commands, safety boundary, and docs map.
|
|
405
|
+
- `docs/` covers install/configuration, visible-browser session setup, search-only, assistive fill-only, prepare-only apply, report review, and troubleshooting.
|
|
406
|
+
- Examples cover config, Q&A bank, dry-run input, and synthetic report shape.
|
|
407
|
+
- `LEGAL.md` and `SAFETY.md` remain linked from README.
|
|
408
|
+
- `MIGRATION.md` explains extraction scope and excluded root surfaces.
|
|
409
|
+
- `CONTRIBUTING.md` and `SECURITY.md` are standalone-scoped.
|
|
410
|
+
- Changelog has `Unreleased`, `0.1.1`, and `0.1.0`.
|
|
411
|
+
- Source, Python, npm launcher, and PowerShell installer docs are current and tested.
|
|
412
|
+
- Phase 21 terminal UX docs and help stay current: `docs\commands.md`, `tests\test_cli_help.py`, and `tests\test_config_diagnostics.py`.
|
|
413
|
+
- Public package metadata points to the canonical GitHub repository and issue tracker.
|
|
414
|
+
- Community health files and contribution templates are included in package and release checks.
|
|
415
|
+
|
|
416
|
+
## Verification Commands
|
|
417
|
+
|
|
418
|
+
From the package root:
|
|
419
|
+
|
|
420
|
+
```powershell
|
|
421
|
+
python -m pytest tests\test_cli_help.py tests\test_config_diagnostics.py -q
|
|
422
|
+
python -m pytest tests\test_docs_smoke.py tests\test_npm_launcher.py tests\test_distribution_metadata.py tests\test_distribution_smoke.py tests\test_release_manifest.py tests\test_release_readiness.py -q
|
|
423
|
+
python -m pytest tests\test_community_health.py tests\test_docs_smoke.py tests\test_privacy_scans.py tests\test_npm_launcher.py tests\test_distribution_metadata.py tests\test_distribution_smoke.py tests\test_release_manifest.py tests\test_release_readiness.py -q
|
|
424
|
+
python -m build --outdir $env:TEMP\linkedin-apply-assistant-dist
|
|
425
|
+
npm pack --dry-run --json
|
|
426
|
+
gitleaks version
|
|
427
|
+
python scripts\release.py clean
|
|
428
|
+
python scripts\release.py manifest --check
|
|
429
|
+
python scripts\release.py verify
|
|
430
|
+
python scripts\release.py scan .
|
|
431
|
+
python scripts\quality.py
|
|
432
|
+
python -m pytest tests -q
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
From the repository root:
|
|
436
|
+
|
|
437
|
+
```powershell
|
|
438
|
+
node test-all.mjs --quick
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
Automated post-quality artifact scan:
|
|
442
|
+
|
|
443
|
+
```powershell
|
|
444
|
+
Get-ChildItem standalone\linkedin-apply-assistant -Force | Where-Object { $_.Name -in '.pytest_cache','.ruff_cache','build','dist' -or $_.Name -like '*.egg-info' }
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Final packaging cleanup inspection:
|
|
448
|
+
|
|
449
|
+
```powershell
|
|
450
|
+
Get-ChildItem standalone\linkedin-apply-assistant -Force -Recurse | Where-Object {
|
|
451
|
+
$_.Name -in '.pytest_cache','.ruff_cache','build','dist','__pycache__' -or
|
|
452
|
+
$_.Name -like '*.egg-info'
|
|
453
|
+
}
|
|
454
|
+
```
|
package/SAFETY.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Safety and Acceptable Use
|
|
2
|
+
|
|
3
|
+
LinkedIn-apply-assistant is a local, user-controlled package. It is designed for search, review, and assistive form filling while the user drives a visible browser session.
|
|
4
|
+
|
|
5
|
+
## Operating Boundary
|
|
6
|
+
|
|
7
|
+
- Public workflows are no-submit by default.
|
|
8
|
+
- Apply preparation can produce an audit report, but browser submission remains disabled.
|
|
9
|
+
- Any future submit-capable release must require per-application interactive confirmation immediately before a specific application is sent.
|
|
10
|
+
- Broad approvals, background sending, and unattended modes are outside the package boundary.
|
|
11
|
+
|
|
12
|
+
## Forbidden Uses
|
|
13
|
+
|
|
14
|
+
Do not use this package for:
|
|
15
|
+
|
|
16
|
+
- mass applications or spam-like recruiting workflows
|
|
17
|
+
- unattended apply sessions
|
|
18
|
+
- CAPTCHA or MFA bypass
|
|
19
|
+
- fake answers or guessed application responses
|
|
20
|
+
- unrelated personal-data scraping
|
|
21
|
+
- continuing automation after platform throttling, rate limits, checkpoints, or similar risk signals
|
|
22
|
+
|
|
23
|
+
Unknown required questions must stop completion until the user supplies a truthful answer.
|
|
24
|
+
|
|
25
|
+
## Local Privacy Boundary
|
|
26
|
+
|
|
27
|
+
Visible browser profiles can contain cookies, sessions, and local form data. Keep the browser profile directory local, ignored by version control, and under your control.
|
|
28
|
+
|
|
29
|
+
Reports and pending-question logs are intended for local audit and follow-up. They should keep useful metadata such as company, role, ATS, domain, status, counts, blockers, and policy decisions while excluding credentials, cookies, tokens, raw browser state, screenshots, full documents, private profile dumps, and full application URLs by default.
|
|
30
|
+
|
|
31
|
+
## Platform and Legal Responsibility
|
|
32
|
+
|
|
33
|
+
You are responsible for following platform terms, employer application rules, and local law. This document is not legal advice and is not a compliance certification for GDPR, CCPA, LinkedIn terms, SOC 2, or any other legal, platform, or audit framework.
|