[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BYRWXMYWB6PD7E9PAD44M4":3,"skill-same:01M6BYRWXMYWB6PD7E9PAD44M4":123},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":6,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":42,"install":43,"resources":56},"01M6BYRWXMYWB6PD7E9PAD44M4","wait-what",null,"Stop. That last message did not land: re-pitch it.","Vortex375\u002Fseraph","Vortex375","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5016523?v=4","01M6BYMHA5FQE4EMD6BSZ13M46","Benjamin Schmitz","01M6BYMHEYGQ7DM3Q8A7KBNZ48",2,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwait-what\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28],"wait what","wait","land","stop","message","pitch","it","re","last","true","2026-11-10 10:12:30",false,"---\nname: reviewing-oracle-to-postgres-migration\ndescription: 'Identifies Oracle-to-PostgreSQL migration risks by cross-referencing code against known behavioral differences (empty strings, refcursors, type coercion, sorting\u002Fcollations, UNION ALL planner risks, materialized-view refresh requirements, timestamps, concurrent transactions, etc.). Use when planning a database migration, reviewing migration artifacts, or validating that integration tests cover Oracle\u002FPostgreSQL differences.'\n---\n\n# Oracle-to-PostgreSQL Database Migration\n\nSurfaces migration risks and validates migration work against known Oracle\u002FPostgreSQL behavioral differences documented in the `references\u002F` folder.\n\n## When to use\n\n1. **Planning** — Before starting migration work on a procedure, trigger, query, or refcursor client. Identify which reference insights apply so risks are addressed up front.\n2. **Validating** — After migration work is done, confirm every applicable insight was addressed and integration tests cover the new PostgreSQL semantics.\n\n## Workflow\n\nDetermine the task type:\n\n**Planning a migration?** Follow the risk assessment workflow.\n**Validating completed work?** Follow the validation workflow.\n\n### Risk assessment workflow (planning)\n\n```\nRisk Assessment:\n- [ ] Step 1: Identify the migration scope\n- [ ] Step 2: Screen each insight for applicability\n- [ ] Step 3: Document risks and recommended actions\n```\n\n**Step 1: Identify the migration scope**\n\nList the affected database objects (procedures, triggers, queries, views) and the application code that calls them.\n\n**Step 2: Screen each insight for applicability**\n\nReview the reference index in [references\u002FREFERENCE.md](references\u002FREFERENCE.md). For each entry, determine whether the migration scope contains patterns affected by that insight. Read the full reference file only when the insight is potentially relevant.\n\n**Step 3: Document risks and recommended actions**\n\nFor each applicable insight, note the specific risk and the recommended fix pattern from the reference file. Flag any insight that requires a design decision (e.g., whether to preserve Oracle empty-string-as-NULL semantics or adopt PostgreSQL behavior).\n\n### Validation workflow (post-migration)\n\n```\nValidation:\n- [ ] Step 1: Map the migration artifact\n- [ ] Step 2: Cross-check applicable insights\n- [ ] Step 3: Verify integration test coverage\n- [ ] Step 4: Gate the result\n```\n\n**Step 1: Map the migration artifact**\n\nIdentify the migrated object and summarize the change set.\n\n**Step 2: Cross-check applicable insights**\n\nFor each reference in [references\u002FREFERENCE.md](references\u002FREFERENCE.md), confirm the behavior or test requirement is acknowledged and addressed in the migration work.\n\n**Step 3: Verify integration test coverage**\n\nConfirm tests exercise both the happy path and the failure scenarios highlighted in applicable insights (exceptions, sorting, `UNION ALL` behavior\u002Fperformance risks, refcursor consumption, concurrent transactions, timestamps, materialized-view freshness, etc.).\n\n**Step 4: Gate the result**\n\nReturn a checklist asserting each applicable insight was addressed, migration scripts run, and integration tests pass.\n","# Oracle-to-PostgreSQL Database Migration\n\nSurfaces migration risks and validates migration work against known Oracle\u002FPostgreSQL behavioral differences documented in the `references\u002F` folder.\n\n## When to use\n\n1. **Planning** — Before starting migration work on a procedure, trigger, query, or refcursor client. Identify which reference insights apply so risks are addressed up front.\n2. **Validating** — After migration work is done, confirm every applicable insight was addressed and integration tests cover the new PostgreSQL semantics.\n\n## Workflow\n\nDetermine the task type:\n\n**Planning a migration?** Follow the risk assessment workflow.\n**Validating completed work?** Follow the validation workflow.\n\n### Risk assessment workflow (planning)\n\n```\nRisk Assessment:\n- [ ] Step 1: Identify the migration scope\n- [ ] Step 2: Screen each insight for applicability\n- [ ] Step 3: Document risks and recommended actions\n```\n\n**Step 1: Identify the migration scope**\n\nList the affected database objects (procedures, triggers, queries, views) and the application code that calls them.\n\n**Step 2: Screen each insight for applicability**\n\nReview the reference index in [references\u002FREFERENCE.md](references\u002FREFERENCE.md). For each entry, determine whether the migration scope contains patterns affected by that insight. Read the full reference file only when the insight is potentially relevant.\n\n**Step 3: Document risks and recommended actions**\n\nFor each applicable insight, note the specific risk and the recommended fix pattern from the reference file. Flag any insight that requires a design decision (e.g., whether to preserve Oracle empty-string-as-NULL semantics or adopt PostgreSQL behavior).\n\n### Validation workflow (post-migration)\n\n```\nValidation:\n- [ ] Step 1: Map the migration artifact\n- [ ] Step 2: Cross-check applicable insights\n- [ ] Step 3: Verify integration test coverage\n- [ ] Step 4: Gate the result\n```\n\n**Step 1: Map the migration artifact**\n\nIdentify the migrated object and summarize the change set.\n\n**Step 2: Cross-check applicable insights**\n\nFor each reference in [references\u002FREFERENCE.md](references\u002FREFERENCE.md), confirm the behavior or test requirement is acknowledged and addressed in the migration work.\n\n**Step 3: Verify integration test coverage**\n\nConfirm tests exercise both the happy path and the failure scenarios highlighted in applicable insights (exceptions, sorting, `UNION ALL` behavior\u002Fperformance risks, refcursor consumption, concurrent transactions, timestamps, materialized-view freshness, etc.).\n\n**Step 4: Gate the result**\n\nReturn a checklist asserting each applicable insight was addressed, migration scripts run, and integration tests pass.\n",{"name":34,"description":35},"reviewing-oracle-to-postgres-migration","Identifies Oracle-to-PostgreSQL migration risks by cross-referencing code against known behavioral differences (empty strings, refcursors, type coercion, sorting\u002Fcollations, UNION ALL planner risks, materialized-view refresh requirements, timestamps, concurrent transactions, etc.). Use when planning a database migration, reviewing migration artifacts, or validating that integration tests cover Oracle\u002FPostgreSQL differences.","main","5269f7ea2d6c3a9bfda5ed878b6726cf509121fd","app\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwait-what",0,"https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph","https:\u002F\u002Fgithub.com\u002FVortex375","2026-11-08 18:46:14",{"source":8,"skillName":34,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add Vortex375\u002Fseraph --skill reviewing-oracle-to-postgres-migration",{"tool":49,"command":50},"bunx","bunx skills add Vortex375\u002Fseraph --skill reviewing-oracle-to-postgres-migration",{"tool":52,"command":53},"pnpm","pnpm dlx skills add Vortex375\u002Fseraph --skill reviewing-oracle-to-postgres-migration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwait-what\u002FSKILL.md",true,[57,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119],{"path":58,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":61,"sourceHtmlUrl":62},"agents\u002Fopenai.yaml","REFERENCE","参考文档",158,"https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwait-what\u002Fagents\u002Fopenai.yaml",{"path":64,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":65,"sourceHtmlUrl":66},"references\u002Fempty-strings-handling.md",2058,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Fempty-strings-handling.md",{"path":68,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":69,"sourceHtmlUrl":70},"references\u002Fno-data-found-exceptions.md",2671,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Fno-data-found-exceptions.md",{"path":72,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":73,"sourceHtmlUrl":74},"references\u002Foracle-nvl-decode-functions.md",2424,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Foracle-nvl-decode-functions.md",{"path":76,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Foracle-parentheses-from-clause.md",4966,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Foracle-parentheses-from-clause.md",{"path":80,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Foracle-rownum-pagination.md",2163,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Foracle-rownum-pagination.md",{"path":84,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Foracle-sysdate-sequences-dual.md",3260,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Foracle-sysdate-sequences-dual.md",{"path":88,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Foracle-to-postgres-sorting.md",2723,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Foracle-to-postgres-sorting.md",{"path":92,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Foracle-to-postgres-timestamp-timezone.md",8622,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Foracle-to-postgres-timestamp-timezone.md",{"path":96,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Foracle-to-postgres-to-char-numeric.md",4286,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Foracle-to-postgres-to-char-numeric.md",{"path":100,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Foracle-to-postgres-type-coercion.md",5031,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Foracle-to-postgres-type-coercion.md",{"path":104,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":105,"sourceHtmlUrl":106},"references\u002Fpostgres-concurrent-transactions.md",9628,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Fpostgres-concurrent-transactions.md",{"path":108,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":109,"sourceHtmlUrl":110},"references\u002Fpostgres-materialized-view-refresh.md",1406,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Fpostgres-materialized-view-refresh.md",{"path":112,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":113,"sourceHtmlUrl":114},"references\u002Fpostgres-refcursor-handling.md",5796,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Fpostgres-refcursor-handling.md",{"path":116,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":117,"sourceHtmlUrl":118},"references\u002Fpostgres-union-all-planner.md",1626,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002Fpostgres-union-all-planner.md",{"path":120,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":121,"sourceHtmlUrl":122},"references\u002FREFERENCE.md",2832,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Freviewing-oracle-to-postgres-migration\u002Freferences\u002FREFERENCE.md",[124,148,173,197,216,233],{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":140,"publishedAt":29},"01M6BYS1QVW7F887EXS5RR34TA","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[130,135],{"categoryNo":131,"categoryName":132,"taxonomyType":133,"taxonomyTypeDesc":134},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":136,"categoryName":137,"taxonomyType":138,"taxonomyTypeDesc":139},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[141,142,143,144,145,146,147],"writing","writing for agents","for","when","documents","editing","use",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":29},"01M6BYRZNREK0C7V6Y43AKDJWW","wizard","Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can perform itself.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwizard\u002FSKILL.md",[],[150,155,156,157,158,159,160,161,144,162,163,143,164,165,166,167,168,169,147,170,171,172],"ci","generate","infrastructure","dashboard","provisioning","provisioning infrastructure","running","invoke","party","can","human","credentials","migration","up","only","interactive","Bash","secrets",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":29},"01M6BYRY92S448X31PTG25TCJC","wayfinder","Plan a huge chunk of work (more than one agent session can hold) as a shared map of decision tickets on your issue tracker, and resolve them one at a time until the way to the destination is clear.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fwayfinder\u002FSKILL.md",[],[175,180,181,182,164,28,183,184,185,186,187,188,189,190,191,192,193,194,195,196],"more","agent session","at","tickets","clear","as","shared","time","map","tracker","issue","session","work","decision","plan","chunk","one at a time",{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":203,"publishedAt":29},"01M6BYRTS6JNDYB7BZVAWK7JJ9","triage","Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Ftriage\u002FSKILL.md",[],[199,204,205,206,28,207,208,209,210,211,212,213,214,215],"roles","prs","state machine","briefs","move","machine","grill","ready","write","verify","issues","state",{"skillNo":217,"name":218,"nameZh":6,"description":219,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":220,"categories":221,"keywords":222,"publishedAt":29},"01M6BYRRRCDHNXH2YBDTYJPG36","to-tickets","Break a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker (edges as text in one file per ticket locally, or native blocking links on a real tracker).","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fto-tickets\u002FSKILL.md",[],[183,223,224,185,225,189,226,194,227,228,229,230,231,28,232],"to tickets","ticket","conversation","text","SET","file","spec","native","break","links",{"skillNo":234,"name":235,"nameZh":6,"description":236,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":237,"categories":238,"keywords":239,"publishedAt":29},"01M6BYRPVC9BB3DSS24PDQ6V19","to-spec","Turn the current conversation into a spec and publish it to the project issue tracker: no interview, just synthesis of what you've already discussed.","https:\u002F\u002Fgithub.com\u002FVortex375\u002Fseraph\u002Fblob\u002Fmain\u002Fapp\u002Fseraph_app\u002F.agents\u002Fskills\u002Fto-spec\u002FSKILL.md",[],[240,229,241,28,242,25,243,225,189,190,244,245,246,247],"to spec","issue tracker","you","project","Synthesis","interview","just","publish"]