linkedin-apply-assistant 0.1.3 → 0.1.4

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/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ This file follows the spirit of Keep a Changelog and uses semantic version label
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.1.4] - 2026-06-13
10
+
11
+ ### Fixed
12
+
13
+ - Made `linkedin-apply-assistant --verbose` print root help and a first-run hint
14
+ instead of failing with a missing `command` parser error.
15
+ - Made `linkedin-apply-assistant config` default to the read-only
16
+ `config check` diagnostics command instead of failing with a missing
17
+ `config_command` parser error.
18
+
9
19
  ## [0.1.3] - 2026-06-13
10
20
 
11
21
  ### Changed
package/README.md CHANGED
@@ -7,7 +7,7 @@ LinkedIn-apply-assistant is an experimental local browser automation assistant f
7
7
 
8
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
9
 
10
- Current package metadata version: `0.1.3`.
10
+ Current package metadata version: `0.1.4`.
11
11
 
12
12
  ## Safety Boundary
13
13
 
@@ -443,6 +443,50 @@ Distribution safety boundary:
443
443
  download and run that public script
444
444
  - PyPI and TestPyPI uploads stay out of this release
445
445
 
446
+ ## v0.1.4 CLI Missing-Command UX Release
447
+
448
+ This patch fixes first-run command-line behavior so missing subcommands produce
449
+ actionable output instead of raw argparse parser errors.
450
+
451
+ Scope:
452
+
453
+ - Package version: `0.1.4`
454
+ - npm package: `linkedin-apply-assistant`
455
+ - npm dist-tag: `latest`
456
+ - GitHub Release: `v0.1.4`
457
+ - Repository: `MohammedGhazal09/linkedin-apply-assistant`
458
+ - Runtime behavior, browser safety posture, and public apply/search boundaries are unchanged.
459
+ - `linkedin-apply-assistant --verbose` prints root help and a first-run hint.
460
+ - `linkedin-apply-assistant config` runs the same read-only diagnostics as
461
+ `linkedin-apply-assistant config check`.
462
+ - PyPI and TestPyPI remain future channels.
463
+
464
+ Required local evidence before public sync:
465
+
466
+ ```powershell
467
+ python -m pytest tests\test_cli_help.py tests\test_config_diagnostics.py tests\test_distribution_metadata.py tests\test_docs_smoke.py tests\test_registry_publication_strategy.py tests\test_release_readiness.py tests\test_npm_launcher.py tests\test_distribution_smoke.py tests\test_release_manifest.py -q
468
+ python scripts\release.py clean
469
+ python scripts\release.py manifest --check
470
+ python scripts\release.py verify
471
+ npm pack --dry-run --json
472
+ ```
473
+
474
+ Post-publish verification:
475
+
476
+ ```powershell
477
+ npm view linkedin-apply-assistant version --json
478
+ npm view linkedin-apply-assistant dist-tags --json
479
+ linkedin-apply-assistant --verbose
480
+ linkedin-apply-assistant --verbose config
481
+ gh release view v0.1.4 --repo MohammedGhazal09/linkedin-apply-assistant --json tagName,name,url,isDraft,isPrerelease,targetCommitish
482
+ ```
483
+
484
+ Distribution safety boundary:
485
+
486
+ - no lifecycle install, publish, or token scripts are added to `package.json`
487
+ - `config` shorthand remains read-only and creates no files or directories
488
+ - PyPI and TestPyPI uploads stay out of this release
489
+
446
490
  ## Required Public Metadata
447
491
 
448
492
  `package.json` must include exactly these public project fields:
@@ -496,7 +540,7 @@ Do not publish while any hard blocker remains unresolved.
496
540
  - `LEGAL.md` and `SAFETY.md` remain linked from README.
497
541
  - `MIGRATION.md` explains extraction scope and excluded root surfaces.
498
542
  - `CONTRIBUTING.md` and `SECURITY.md` are standalone-scoped.
499
- - Changelog has `Unreleased`, `0.1.3`, `0.1.2`, `0.1.1`, and `0.1.0`.
543
+ - Changelog has `Unreleased`, `0.1.4`, `0.1.3`, `0.1.2`, `0.1.1`, and `0.1.0`.
500
544
  - Source, Python, npm launcher, and PowerShell installer docs are current and tested.
501
545
  - Phase 21 terminal UX docs and help stay current: `docs\commands.md`, `tests\test_cli_help.py`, and `tests\test_config_diagnostics.py`.
502
546
  - Public package metadata points to the canonical GitHub repository and issue tracker.
package/SECURITY.md CHANGED
@@ -34,4 +34,4 @@ Never attach browser profiles, cookies, credentials, screenshots, private docume
34
34
 
35
35
  ## Supported Versions
36
36
 
37
- The initial standalone GitHub source release is `0.1.0`. Current package metadata is `0.1.3`. Security guidance applies to the current unreleased, `0.1.3`, `0.1.2`, `0.1.1`, and `0.1.0` package-local surfaces.
37
+ The initial standalone GitHub source release is `0.1.0`. Current package metadata is `0.1.4`. Security guidance applies to the current unreleased, `0.1.4`, `0.1.3`, `0.1.2`, `0.1.1`, and `0.1.0` package-local surfaces.
package/docs/commands.md CHANGED
@@ -11,6 +11,9 @@ Use this page after installation to choose the right terminal command, inspect f
11
11
  linkedin-apply-assistant config check
12
12
  ```
13
13
 
14
+ `linkedin-apply-assistant config` is accepted as the same read-only
15
+ diagnostic shortcut.
16
+
14
17
  3. Copy example files into your own ignored workspace when you need them:
15
18
  - `configs/config.example.yml` for profile, documents, and path choices.
16
19
  - `configs/qa_bank.example.yml` for truthful reusable answers.
@@ -56,6 +59,12 @@ Run diagnostics before browser workflows or after changing path flags:
56
59
  linkedin-apply-assistant config check
57
60
  ```
58
61
 
62
+ Shortcut:
63
+
64
+ ```powershell
65
+ linkedin-apply-assistant config
66
+ ```
67
+
59
68
  Expected output:
60
69
 
61
70
  - `ok`, `missing`, or `warning` for each path category.
@@ -4,7 +4,7 @@ This package runs locally. You install the Python package, choose a local worksp
4
4
 
5
5
  This file is the canonical install matrix. The README keeps only a short quick start.
6
6
 
7
- Current package metadata version: `0.1.3`.
7
+ Current package metadata version: `0.1.4`.
8
8
 
9
9
  The npm launcher and PowerShell no-admin installer are the current quick-install paths.
10
10
  PyPI remains a future package channel. The package-channel decision, approval
@@ -7,17 +7,17 @@ asset, or grant publish-capable workflow permissions.
7
7
 
8
8
  The first GitHub source release, `v0.1.0`, remains source-only and is not a
9
9
  registry backfill candidate. The npm launcher release starts at `0.1.1`; the
10
- current PowerShell short-command npm package page refresh is `0.1.3`. PyPI and
10
+ current CLI no-command/config-shorthand fix is `0.1.4`. PyPI and
11
11
  TestPyPI remain future channels.
12
12
 
13
13
  ## Current Boundary
14
14
 
15
- - Current package metadata version: `0.1.3`.
15
+ - Current package metadata version: `0.1.4`.
16
16
  - Current install path: npm global launcher, PowerShell installer, source
17
17
  checkout, local Python install, local editable install, and local npm launcher
18
18
  dry-run validation.
19
19
  - Current public channel: GitHub repository source checkout and GitHub source
20
- release archives; npm launcher package for `0.1.3` after the approved npm
20
+ release archives; npm launcher package for `0.1.4` after the approved npm
21
21
  patch publish step verifies successfully.
22
22
  - Not current: PyPI package, TestPyPI package, GitHub Packages package, PyPI
23
23
  trusted-publisher setup, npm trusted-publisher setup, registry automation,
@@ -34,14 +34,14 @@ action, and exact mutation.
34
34
  | GitHub Releases | Current source-only channel for `v0.1.0`. No wheel, sdist, npm tarball, or other release asset is attached. | Keep as the source-of-truth release record. Future assets require explicit approval. | Users can inspect and install from source without introducing registry auth or package-name ownership. | Clean local verification, changelog, release checklist, source manifest, approved tag or release mutation. | Explicit GitHub Release approval naming repo, tag, target commit, release state, and assets, if any. | `gh release view`, `gh release list`, source archive inspection, release manifest verification. | Remove mistaken assets from the release, correct the release notes, or delete a draft. Source tags need separate explicit remediation because asset removal does not undo a tag. |
35
35
  | PyPI | Not published and not reserved. | Primary future Python registry for direct package publication. | The project is a Python CLI with Playwright-driven browser automation, so PyPI is the natural long-term install path. | Maintainer or maintainer-controlled organization ownership, account 2FA where supported, PyPI Trusted Publishing with GitHub Actions OIDC, protected `pypi` environment, clean build and metadata gates. | Explicit PyPI approval naming repository, version, PyPI project, workflow or manual action, and exact upload mutation. | Read-only JSON API check, `python -m build`, `twine check dist/*`, local wheel install smoke, release scan, manifest verification. | Prefer yanking a broken release where appropriate. Deletion is disruptive and permanent; never rely on deleting and reusing the same version. |
36
36
  | TestPyPI | Not published and not reserved. | Required preflight for the first registry release and for publish-workflow changes. Routine patch preflights can become optional only after a proven release cycle. | It exercises package metadata, artifacts, and installer behavior before the real PyPI release. | Same artifact gates as PyPI, protected `testpypi` environment, explicit preflight approval, no production token. | Explicit TestPyPI approval naming repository, version, TestPyPI project, workflow or manual action, and exact upload mutation. | TestPyPI JSON API check, metadata validation, test-index install smoke, package contents review. | Clean up mistaken TestPyPI releases where possible and move forward with a new version if needed. Do not treat TestPyPI cleanup as production rollback proof. |
37
- | npm | Public thin-launcher channel for `0.1.3`; `0.1.1` was the first npm and PowerShell distribution release. | Keep as the JavaScript ecosystem convenience launcher; use PyPI later for direct Python package installs. | npm provides a familiar global command on systems that already have Node.js, but the launcher delegates to the Python CLI and cannot install Python itself. | Maintainer or maintainer-controlled ownership, account 2FA where supported, first-publish token bootstrap if trusted publishing cannot create the package, exact package contents review. | Explicit npm approval naming repository, version, npm package, workflow or manual action, and exact registry mutation. | `npm pack --dry-run --json`, package contents inspection, no lifecycle install/publish scripts, npm read-only registry check after publication. | Prefer deprecation for bad packages when unpublish criteria are not met. A used npm `package@version` cannot be reused, even after unpublish. |
37
+ | npm | Public thin-launcher channel for `0.1.4`; `0.1.1` was the first npm and PowerShell distribution release. | Keep as the JavaScript ecosystem convenience launcher; use PyPI later for direct Python package installs. | npm provides a familiar global command on systems that already have Node.js, but the launcher delegates to the Python CLI and cannot install Python itself. | Maintainer or maintainer-controlled ownership, account 2FA where supported, first-publish token bootstrap if trusted publishing cannot create the package, exact package contents review. | Explicit npm approval naming repository, version, npm package, workflow or manual action, and exact registry mutation. | `npm pack --dry-run --json`, package contents inspection, no lifecycle install/publish scripts, npm read-only registry check after publication. | Prefer deprecation for bad packages when unpublish criteria are not met. A used npm `package@version` cannot be reused, even after unpublish. |
38
38
  | PowerShell installer | Current GitHub-hosted installer script at `install.ps1`; the README uses `irm ... \| iex` and the detailed install doc keeps a temp-file equivalent. | Keep as the no-admin Windows convenience path for users who prefer a single script. | It can create a local virtual environment, install dependencies from the public source archive, create command shims, and optionally install Chromium. | Public GitHub source archive availability, Python 3.11+, script syntax validation, and local install smoke. | Push the verified installer/docs to the public repository; no registry mutation is required for installer-only changes. | PowerShell parser check, temp-directory install smoke, command shim help smoke, and docs link checks. | Fix forward in `main`; users can reinstall from the corrected script or pin `-Ref` to a known tag. |
39
39
  | GitHub Packages | Not used. | Deferred. | It adds `packages: write` and authenticated consumption friction without improving the primary Python install path. | A future reason to publish a package to GitHub Packages, explicit package type, permission model, and install documentation. | Separate approval naming package type, repository, version, and exact mutation. | GitHub Packages read-only checks and package permission review. | Delete or deprecate only according to the package type's GitHub Packages support. This is not a substitute for PyPI/npm remediation. |
40
40
 
41
41
  ## Package Names
42
42
 
43
43
  The target package name for PyPI, TestPyPI, and npm publication is
44
- `linkedin-apply-assistant`. The current npm launcher version is `0.1.3`.
44
+ `linkedin-apply-assistant`. The current npm launcher version is `0.1.4`.
45
45
 
46
46
  If the unscoped npm name becomes unavailable or ownership changes later, the
47
47
  fallback is a future scoped npm package under a maintainer-controlled scope.
@@ -58,6 +58,8 @@ fallback is a future scoped npm package under a maintainer-controlled scope.
58
58
  README content is immutable for an existing package version.
59
59
  - The PowerShell short-command README refresh uses `0.1.3` because the npm
60
60
  package page must be republished to replace the prior command.
61
+ - The CLI no-command and `config` shorthand fix uses `0.1.4` because it changes
62
+ user-facing terminal behavior without changing browser workflow behavior.
61
63
  - If user-visible behavior changes before registry publication, the default
62
64
  future version example is `0.2.0`.
63
65
  - Future behavior changes remain SemVer decisions at the publish phase.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "linkedin-apply-assistant",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Thin npm launcher for the Python LinkedIn apply assistant package",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -18,7 +18,7 @@
18
18
  "files": [
19
19
  "bin/linkedin-apply-assistant.mjs",
20
20
  "pyproject.toml",
21
- "src/",
21
+ "src/linkedin_apply_assistant/*.py",
22
22
  "install.ps1",
23
23
  "README.md",
24
24
  "SAFETY.md",
package/pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "linkedin-apply-assistant"
7
- version = "0.1.3"
7
+ version = "0.1.4"
8
8
  description = "Local LinkedIn application assistant with user-visible browser workflows"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  """Package identity for the standalone LinkedIn application assistant."""
2
2
 
3
- __version__ = "0.1.3"
3
+ __version__ = "0.1.4"
4
4
 
5
5
  APP_DISPLAY_NAME = "LinkedIn-apply-assistant"
6
6
  APP_PACKAGE_NAME = "linkedin-apply-assistant"
@@ -108,7 +108,7 @@ Outputs use the resolved output directory and reports are written under its repo
108
108
  {NO_SUBMIT_HELP}
109
109
  """,
110
110
  )
111
- subparsers = parser.add_subparsers(dest="command", required=True)
111
+ subparsers = parser.add_subparsers(dest="command")
112
112
 
113
113
  config = subparsers.add_parser(
114
114
  "config",
@@ -124,7 +124,7 @@ The diagnostic resolves config, Q&A bank, browser profile, output, reports, data
124
124
  It creates no files and no directories.
125
125
  """,
126
126
  )
127
- config_subparsers = config.add_subparsers(dest="config_command", required=True)
127
+ config_subparsers = config.add_subparsers(dest="config_command")
128
128
  config_check = config_subparsers.add_parser(
129
129
  "check",
130
130
  parents=[subcommand_common],
@@ -558,6 +558,14 @@ def _handle_report(args: argparse.Namespace) -> int:
558
558
  def main(argv: list[str] | None = None) -> int:
559
559
  parser = build_parser()
560
560
  args = parser.parse_args(argv)
561
+ if args.command is None:
562
+ parser.print_help()
563
+ print()
564
+ print(f"Try: {CONFIG_CHECK_COMMAND}")
565
+ return 0
566
+ if args.command == "config" and args.config_command is None:
567
+ args.config_command = "check"
568
+ args.handler = _handle_config_check
561
569
  handler = getattr(args, "handler")
562
570
  try:
563
571
  return int(handler(args))