agentsclimarketplace

Kr naver blog publish

Skill ray5273/kr-research-kit/skills/kr-naver-blog-publish

Convert an `analysis-example/kr/{company}/memo.md` stock memo or a `kr-daily-market-news` daily market report manifest into a complete Naver Blog post, prepare it in SmartEditor with validation and preview screenshots, and publish only through the correct safety gate.From its SKILL.md

Install
npx -y skills add ray5273/kr-research-kit --skill kr-naver-blog-publish

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

8.4 KB, as published. Nobody here has run it

Korean Naver Blog Publish

Convert an existing Korean stock memo into a blog-ready artifact and drive Naver SmartEditor through a two-step safety gate. Never combine stock-memo preparation and public publishing into one unattended action.

Daily market-news reports generated by kr-daily-market-news may use the separate scheduled path only when the manifest explicitly sets contentType: "daily-market-news" and automation.scheduledPublishAllowed: true.

Workflow

  1. Locate the source memo at analysis-example/kr/<company>/memo.md. If it does not exist or is stale, run the Korean stock-analysis chain first and write or refresh the memo under that path.

  2. Read references/transformation-rules.md.

  3. Convert the memo:

    node skills/kr-naver-blog-publish/scripts/memo-to-post.js \
      --memo analysis-example/kr/<company>/memo.md
    

    This writes naver-post.md and naver-publish.json beside the memo. Review the generated post and manifest. Rerun conversion after editing the source memo.

  4. Read references/editor-contract.md, then prepare the draft:

    node skills/kr-naver-blog-publish/scripts/publisher.js prepare \
      --manifest analysis-example/kr/<company>/naver-publish.json
    
  5. If login, MFA, or CAPTCHA is required, stop. Ask the user to complete it in the visible dedicated browser profile, then rerun prepare. Do not accept credentials in chat or save them in the repository.

  6. Show the generated preview screenshot and summarize the title, tags, image count, and validation result. Ask for explicit approval to publish. Do not proceed in the same turn without that approval.

  7. After approval, use the latest unexpired token returned by prepare:

    node skills/kr-naver-blog-publish/scripts/publisher.js publish \
      --manifest analysis-example/kr/<company>/naver-publish.json \
      --token '<one-time-token>' \
      --confirm-public yes
    
  8. Report the public URL and publication timestamp. Open the published URL and recheck title, body, images, sources, and disclaimer when browser access is available.

Daily Market-News Scheduled Path

Use this only for manifests generated by kr-daily-market-news, usually under analysis-example/kr-market/naver-publish-YYYY-MM-DD.json.

node skills/kr-naver-blog-publish/scripts/publisher.js scheduled-publish \
  --manifest analysis-example/kr-market/naver-publish-YYYY-MM-DD.json \
  --scheduled yes

Scheduled mode still runs draft preparation, source-hash checks, body/source/disclaimer validation, thumbnail validation, login/CAPTCHA checks, and duplicate same-day publication protection. It configures Naver’s actual scheduled-publication controls, verifies the Korean date/time and public visibility, then clicks the reservation confirmation once; it never uses the immediate-publication path.

Scheduled mode is also blocked when the generator sets automation.scheduledPublishAllowed: false, including a failed daily-report quality gate.

If a one-shot public confirmation ends in publishing or publication-unverified, do not publish again. Reconcile it explicitly. When a public URL exists, the publisher opens the page and validates title, basis date, Sources, and disclaimer before recording published:

node skills/kr-naver-blog-publish/scripts/publisher.js reconcile \
  --manifest analysis-example/<market>/naver-publish-YYYY-MM-DD.json \
  --public-url 'https://blog.naver.com/<blog-id>/<log-no>'

When the public blog has been checked and no post exists, a human-confirmed reset is available:

node skills/kr-naver-blog-publish/scripts/publisher.js reconcile \
  --manifest analysis-example/<market>/naver-publish-YYYY-MM-DD.json \
  --not-published yes \
  --confirm-no-public-post yes

The reset returns the manifest to converted and clears preparation state; the next attempt must run every preparation check again.

Before starting a browser, the publisher rejects legacy gstack daemons that point the same Naver profile at repo-local state files. After confirming that no other Naver publishing task is active, remove only those parentless legacy daemons through the guarded cleanup action:

node skills/kr-naver-blog-publish/scripts/publisher.js cleanup-browser \
  --confirm-stale-profile yes

The cleanup refuses to stop a legacy process that still has a parent task.

If gstack cannot start the dedicated browser even after its normal retries, first confirm that no other Naver publishing task is active. Then force-close the stale session that uses the dedicated state file and retry the publisher action once:

node skills/kr-naver-blog-publish/scripts/publisher.js cleanup-browser \
  --confirm-stale-profile yes \
  --force-dedicated-session yes

--force-dedicated-session yes closes the dedicated Naver publishing browser, including its open draft tabs. Do not use it while another task is preparing, previewing, or publishing with that profile.

For daily market-news manifests only, post.linkCards contains the raw URLs rendered in the Naver 시장 주요 뉴스 section, in display order. During preparation the publisher inserts each URL at its raw URL line and presses Enter so SmartEditor can create a link preview card immediately after the numbered headline. Validation accepts either SmartEditor link-card/anchor URLs or plain URL links if Naver leaves them that way. Do not run this link-card insertion path for normal stock-memo manifests.

Daily market-news Naver Markdown should not contain watchlist/관심종목 sections, top metadata bullets, or Markdown bullet lines. Keep market-news URLs as numbered headline plus raw URL lines so link-card insertion remains deterministic.

Output Contract

  • Keep naver-post.md, naver-publish.json, and naver-preview.png under analysis-example/kr/<company>/.
  • Keep daily market-news blog artifacts under analysis-example/kr-market/ with the date in the file name.
  • Preserve core figures, reasoning, contrary views, valuation, catalysts, risks, source URLs, and chart order.
  • When the generated Markdown uses [red:], [blue:], or [brown:], the publisher conditionally inserts the matching red/blue/brown color legend once as the first body block after the title. It leaves marker-free posts unchanged and does not modify the generated Markdown file or its manifest hash.
  • Keep the current Naver category when the user did not specify one.
  • Treat the manifest as the authoritative state record: converted → prepared → publishing → published or scheduled. Daily scheduled posts default to the next Korean weekday at 08:00 KST unless the manifest supplies a valid automation.schedule.date. If the single confirmation click cannot be verified, record publication-unverified, clear the token, and never click again until the public blog is reconciled.
  • Never reuse a published manifest or a token from an older preparation.
  • Never publish after any hash, selector, image-count, title, body, source, disclaimer, login, CAPTCHA, or token check fails.
  • Never scheduled-publish if a same-day daily market-news manifest in the same output directory is already published.
  • Serialize publisher actions with the runtime lock under ~/.gstack/kr-naver-blog-publish/. The browser profile and gstack state file must use that same dedicated runtime so separate Codex tasks cannot start competing servers for one profile.
  • Fail before browser startup when another state file still controls the same profile; never silently start a competing browser server.
  • Keep a token-free audit trail at ~/.gstack/kr-naver-blog-publish/publisher-audit.jsonl for startup, validation, confirmation, verification, and failure events.

Validation

Run before considering changes complete:

node skills/kr-naver-blog-publish/scripts/test-memo-to-post.js
node skills/kr-naver-blog-publish/scripts/test-publisher.js
node --check skills/kr-naver-blog-publish/scripts/memo-to-post.js
node --check skills/kr-naver-blog-publish/scripts/publisher.js

Use --fixture <fixture.json> only for deterministic tests. Never use fixture mode for a real publication.

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.